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

Метод didPush

Метод didPush класса NavigatorObserver вызывают после того, как на стопку положили новый маршрут. route это маршрут, который стал верхним. previousRoute это маршрут, который был верхним до этого.

Синтаксис

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

Параметры

Параметр Описание
route Route, который только что стал верхним.
previousRoute Route, который был верхним раньше, или null.

Пример

Давайте напечатаем name при didPush:

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

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

Пример

Давайте посчитаем push в observer:

import 'package:flutter/material.dart'; class CountPush extends NavigatorObserver { var count = 0; @override void didPush(Route<dynamic> route, Route<dynamic>? previousRoute) { count += 1; debugPrint('$count'); } } void main() { runApp( MaterialApp( navigatorObservers: [CountPush()], home: Scaffold( body: Center( child: Text('12345'), ), ), ), ); }

На экране корневой маршрут; при первом push счётчик напечатает 1 в консоли.

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

  • метод didPop,
    вызывается при снятии Route
  • класс NavigatorObserver,
    базовый класс observer
  • метод push,
    вызывает didPush у observers
  • класс Route,
    передаётся в didPush
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить