RouteObserveMixin provides easy access to didPush/didPop/didPushNext/didPopNext.
Usage
1. Wrap MaterialApp with RouteObserverProvider.
voidmain() {
runApp(
MultiProvider(
providers: [
// 1. Wrap MaterialApp with RouteObserverProvider.RouteObserverProvider(),
ChangeNotifierProvider(create: (context) => Logger())
],
child: constApp(),
),
);
// Of course, this is also ok.// I demonstrated that [MultiProvider] can be used for RouteObserverProvider👍/*
runApp(
RouteObserverProvider(
child: App(),
),
);
*/
}
2. Pass RouteObserverProvider.of(context) to navigatorObservers.
3. Add with RouteAware, RouteObserverMixin to State and override RouteAware methods.
classAPageextendsStatefulWidget{
constAPage({Key key}) : super(key: key);
@override_APageStatecreateState() => _APageState();
}
// 3. Add `with RouteAware, RouteObserverMixin` to State and override RouteAware methods.class_APageStateextendsState<APage> withRouteAware, RouteObserverMixin{
@overrideWidgetbuild(BuildContext context) {
returnScaffold(
appBar: AppBar(
title: constText('A Page'),
),
body: Center(
child: RaisedButton(
onPressed: () {
Navigator.of(context).push<void>(
MaterialPageRoute(
builder: (context) => constBPage(),
),
);
},
child: constText('B Page'),
),
),
);
}
/// Called when the top route has been popped off, and the current route/// shows up.@overridevoiddidPopNext() { }
/// Called when the current route has been pushed.@overridevoiddidPush() { }
/// Called when the current route has been popped off.@overridevoiddidPop() { }
/// Called when a new route has been pushed, and the current route is no/// longer visible.@overridevoiddidPushNext() { }
}