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

Класс NavigatorObserver

Класс NavigatorObserver вешают на Navigator через observers. При push вызывают didPush, при pop - didPop. Так логируют переходы или обновляют аналитику.

Синтаксис

class LogObserver extends NavigatorObserver { @override void didPush(Route<dynamic> route, Route<dynamic>? previousRoute) {} }

Методы

Метод Описание
didPush Параметр route - новый верхний маршрут, previousRoute - тот, что был верхним до push. Давайте разберём вызов на примерах.
didPop Параметр route - маршрут, который сняли, previousRoute - новый верхний маршрут. Давайте разберём вызов на примерах.

Пример

Давайте выведем имя маршрута при push:

import 'package:flutter/material.dart'; class PrintObserver extends NavigatorObserver { @override void didPush(Route<dynamic> route, Route<dynamic>? previousRoute) { debugPrint(route.settings.name ?? 'abcde'); } } class ObsHome extends StatelessWidget { const ObsHome({super.key}); @override Widget build(BuildContext context) { return Scaffold( body: Center( child: ElevatedButton( onPressed: () { Navigator.push( context, MaterialPageRoute<void>( settings: const RouteSettings(name: '/next'), builder: (ctx) => const Scaffold( body: Center(child: Text('12345')), ), ), ); }, child: const Text('abcde'), ), ), ); } } void main() { runApp( MaterialApp( navigatorObservers: [PrintObserver()], home: ObsHome(), ), ); }

На экране откроется второй маршрут; в консоли отладки появится '/next' из didPush.

Пример

Давайте залогируем pop:

import 'package:flutter/material.dart'; class PopLogObserver extends NavigatorObserver { @override void didPop(Route<dynamic> route, Route<dynamic>? previousRoute) { debugPrint('pop'); } } void main() { runApp( MaterialApp( navigatorObservers: [PopLogObserver()], home: Scaffold( body: Center( child: Text('12345'), ), ), ), ); }

На экране корневой текст; при pop с этого маршрута observer напишет pop в консоль.

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

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