Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
753 of 1024 menu
◀ ▶

Метод 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,
    вызывает build delegate
  • виджет Navigator,
    результат build
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить