Метод build
Метод build класса RouterDelegate router вызывает build при каждом обновлении конфигурации. Внутри обычно возвращают Navigator со списком MaterialPage.
Синтаксис
@override
Widget build(BuildContext context) {
return Navigator(
pages: pages,
onPopPage: (route, result) => route.didPop(result),
);
}
Параметры
| Параметр | Описание |
|---|---|
context |
BuildContext, который передаёт Router.
|
Пример
Давайте вернём Navigator с одной MaterialPage:
import 'package:flutter/material.dart';
class Cfg {}
class BuildDelegate extends RouterDelegate<Cfg>
{
@override
Widget build(BuildContext context) {
return Navigator(
pages: const [
MaterialPage<void>(
child: Scaffold(
body: Center(
child: Text('abcde'),
),
),
),
],
onPopPage: (route, result) => route.didPop(result),
);
}
@override
Future<void> setNewRoutePath(Cfg configuration) async {}
@override
Cfg get currentConfiguration => Cfg();
}
class CfgParser extends RouteInformationParser<Cfg>
{
@override
Future<Cfg> parseRouteInformation(
RouteInformation routeInformation,
) async {
return Cfg();
}
@override
RouteInformation restoreRouteInformation(Cfg configuration) {
return RouteInformation(uri: Uri.parse('/'));
}
}
void main()
{
runApp(
MaterialApp.router(
routerDelegate: BuildDelegate(),
routeInformationParser: CfgParser(),
),
);
}
На экране build delegate покажет текст 'abcde'.
Пример
Давайте добавим вторую page в build:
import 'package:flutter/material.dart';
class StackDelegate extends RouterDelegate<Cfg>
{
@override
Widget build(BuildContext context) {
return Navigator(
pages: const [
MaterialPage<void>(
key: ValueKey('a'),
child: Scaffold(
body: Center(child: Text('abcde')),
),
),
MaterialPage<void>(
key: ValueKey('b'),
child: Scaffold(
body: Center(child: Text('12345')),
),
),
],
onPopPage: (route, result) => route.didPop(result),
);
}
@override
Future<void> setNewRoutePath(Cfg configuration) async {}
@override
Cfg get currentConfiguration => Cfg();
}
На экране build отдаст верхнюю page с '12345'; нижняя остаётся в стопке.
Смотрите также
-
класс
RouterDelegate,
владелец методаbuild -
метод
setNewRoutePath,
меняет конфигурацию передbuild -
виджет
Router,
вызываетbuilddelegate -
виджет
Navigator,
результатbuild