Метод 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