Метод didPop
Метод didPop класса NavigatorObserver
вызывают после того, как верхний маршрут сняли.
route это снятый Route.
previousRoute это маршрут, который стал верхним.
Синтаксис
@override
void didPop(Route<dynamic> route, Route<dynamic>? previousRoute) {}
Параметры
| Параметр | Описание |
|---|---|
route |
Route, который убрали со стопки.
|
previousRoute |
Route, который стал верхним после pop.
|
Пример
Давайте залогируем didPop при закрытии экрана:
import 'package:flutter/material.dart';
class PopLog extends NavigatorObserver
{
@override
void didPop(Route<dynamic> route, Route<dynamic>? previousRoute)
{
debugPrint('12345');
}
}
class PopPage extends StatelessWidget
{
const PopPage({super.key});
@override
Widget build(BuildContext context)
{
return Scaffold(
body: Center(
child: ElevatedButton(
onPressed: () {
Navigator.pop(context);
},
child: const Text('abcde'),
),
),
);
}
}
void main()
{
runApp(
MaterialApp(
navigatorObservers: [PopLog()],
home: Builder(
builder: (context) {
return Scaffold(
body: Center(
child: ElevatedButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute<void>(
builder: (ctx) => const PopPage(),
),
);
},
child: const Text('open'),
),
),
);
},
),
),
);
}
На экране откройте второй маршрут и нажмите pop; didPop выведет '12345' в консоль.
Пример
Давайте прочитаем name снятого маршрута:
import 'package:flutter/material.dart';
class NamePopLog extends NavigatorObserver
{
@override
void didPop(Route<dynamic> route, Route<dynamic>? previousRoute)
{
debugPrint(route.settings.name ?? 'none');
}
}
void main()
{
runApp(
MaterialApp(
navigatorObservers: [NamePopLog()],
home: Scaffold(
body: Center(
child: Text('abcde'),
),
),
),
);
}
На экране корневой текст; при pop верхнего маршрута observer напечатает его name.