在iOS原生开发中,如果我们从页面A push 到页面B,再从页面B pop回页面A时,想刷新页面A的数据的话,可以在viewWillAppear生命周期方法中进行处理。在Flutter中也想实现此需求的话可以使用全局路由监听对象。
1、在main.dart中创建全局路由监听对象
RouteObserver<PageRoute> routeObserver = RouteObserver<PageRoute>();
2、将全局路由监听对象传入MaterialApp的navigatorObservers属性里
navigatorObservers: [routeObserver],
3、在需要使用的页面里的State混入RouteAware
class _QLUserContentState extends State<QLUserContent> with RouteAware {
4、重写didChangeDependencies方法加入监听
@override
void didChangeDependencies() {
// TODO: implement didChangeDependencies
super.didChangeDependencies();
routeObserver.subscribe(this, ModalRoute.of(context) as PageRoute);
}
5、页面dispose时销毁监听
@override
void dispose() {
routeObserver.unsubscribe(this);
super.dispose();
}
6、重写需要监听的事件方法
// 1、Push到该页面时调用
@override
void didPush() {
print('didPush');
}
// 2、Pop到该页面时调用
@override
void didPopNext() {
print('didPopNext');
}
// 3、从该页面Push到其他页面时调用
@override
void didPushNext() {
print('didPushNext');
}
// 4、该页面被Pop时调用
@override
void didPop() {
print('didPop');
}