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

Виджет Router

Виджет Router строит Navigator из RouterDelegate и RouteInformationParser. Параметр routerDelegate решает, какие страницы открыты. Параметр routeInformationParser разбирает RouteInformation в конфигурацию маршрута.

Синтаксис

Router( routerDelegate: myDelegate, routeInformationParser: myParser, )

Параметры

Параметр Описание
routerDelegate Делегат, который строит Navigator и стопку страниц.
routeInformationParser Парсер адреса в конфигурацию маршрута.
routeInformationProvider Источник текущего RouteInformation, например для web URL.
backButtonDispatcher Обработчик системной кнопки назад.

Пример

Давайте соберём минимальный Router с одной страницей:

import 'package:flutter/material.dart'; class SimpleConfig {} class SimpleParser extends RouteInformationParser<SimpleConfig> { @override Future<SimpleConfig> parseRouteInformation( RouteInformation routeInformation, ) async { return SimpleConfig(); } @override RouteInformation restoreRouteInformation(SimpleConfig configuration) { return RouteInformation(uri: Uri.parse('/')); } } class SimpleDelegate extends RouterDelegate<SimpleConfig> { @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(SimpleConfig configuration) async {} @override SimpleConfig get currentConfiguration => SimpleConfig(); } void main() { runApp( MaterialApp.router( routerDelegate: SimpleDelegate(), routeInformationParser: SimpleParser(), ), ); }

На экране Router покажет одну страницу с текстом 'abcde' через declarative pages.

Пример

Давайте покажем вторую страницу через список pages:

import 'package:flutter/material.dart'; class SimpleConfig {} class SimpleParser extends RouteInformationParser<SimpleConfig> { @override Future<SimpleConfig> parseRouteInformation( RouteInformation routeInformation, ) async { return SimpleConfig(); } @override RouteInformation restoreRouteInformation(SimpleConfig configuration) { return RouteInformation(uri: Uri.parse('/')); } } class TwoDelegate extends RouterDelegate<SimpleConfig> { @override Widget build(BuildContext context) { return Navigator( pages: const [ MaterialPage<void>( child: Scaffold( body: Center(child: Text('abcde')), ), ), MaterialPage<void>( child: Scaffold( body: Center(child: Text('12345')), ), ), ], onPopPage: (route, result) => route.didPop(result), ); } @override Future<void> setNewRoutePath(SimpleConfig configuration) async {} @override SimpleConfig get currentConfiguration => SimpleConfig(); } void main() { runApp( MaterialApp.router( routerDelegate: TwoDelegate(), routeInformationParser: SimpleParser(), ), ); }

На экране delegate сразу построит две MaterialPage; виден верхний экран с '12345'.

Смотрите также

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить