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

Класс RouterDelegate

Класс RouterDelegate реализуют для Router. Метод build возвращает Navigator со списком pages. Метод setNewRoutePath принимает новую конфигурацию из URL. Метод popRoute обрабатывает системный назад.

Синтаксис

class AppDelegate extends RouterDelegate<AppConfig> { @override Widget build(BuildContext context) { return Navigator( pages: [ MaterialPage<void>( child: Scaffold( body: Center( child: Text('abcde'), ), ), ), ], onPopPage: (route, result) => route.didPop(result), ); } }

Методы

Метод Описание
build Router вызывает build при каждом обновлении конфигурации. Давайте разберём вызов на примерах.
setNewRoutePath Его вызывает Router после parseRouteInformation. Давайте разберём вызов на примерах.
popRoute Возвращает Future: true, если pop обработан delegate. Давайте разберём вызов на примерах.

Пример

Давайте реализуем delegate с одной страницей:

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

На экране RouterDelegate построит Navigator с текстом 'abcde'.

Пример

Давайте вернём true из popRoute, когда pop невозможен:

import 'package:flutter/material.dart'; class GuardDelegate extends RouterDelegate<AppConfig> { @override Widget build(BuildContext context) { return Navigator( pages: const [ MaterialPage<void>( child: Scaffold( body: Center( child: Text('12345'), ), ), ), ], onPopPage: (route, result) => route.didPop(result), ); } @override Future<bool> popRoute() async => true; @override Future<void> setNewRoutePath(AppConfig configuration) async {} @override AppConfig get currentConfiguration => AppConfig(); }

На экране delegate сообщит Router, что pop обработан, даже если стопка из одной страницы.

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

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