参考文章:
Flutter监听路由返回
方法一:
push方法.then,支持手势返回✅,可以获取传回参数✅。
方法二:
didPopNext,支持手势返回✅,但回传参数获取不到❌。
方法三、
deactivate(),不支持手势返回❌,回传参数获取不到❌。
各个使用方法:
方法一、push后.then即可
方法二、添加route监听
1、程序入口添加:
// 用于路由返回监听
static final RouteObserver<PageRoute> routeObserver = RouteObserver<PageRoute>();
2、MaterialApp
下添加
return MaterialApp(
navigatorObservers: [MyApp.routeObserver],
3、所在页面添加with RouteAware
4、添加订阅和移除订阅
@override
void didChangeDependencies() {
super.didChangeDependencies();
// 添加监听订阅
MyApp.routeObserver.subscribe(this, ModalRoute.of(context));
}
@override
void dispose() {
// 移除监听订阅
MyApp.routeObserver.unsubscribe(this);
super.dispose();
}
4、使用一下方法来监听
@override
void didPush() {
super.didPush();
// push进入当前页面时走这里
LogUtils.d('生命周期监听', 'didPush');
}
@override
void didPushNext() {
super.didPushNext();
// 当前页面push到其他页面走这里
LogUtils.d('生命周期监听', 'didPushNext');
}
@override
void didPop() {
super.didPop();
// pop出当前页面时走这里
LogUtils.d('生命周期监听', 'didPop');
}
@override
void didPopNext() {
super.didPopNext();
// 从其他页面pop回当前页面走这里
LogUtils.d('生命周期监听', 'didPopNext');
}
方法三、
@override
void deactivate() {
bool isBack = ModalRoute.of(context).isCurrent;
if (isBack) {
// 限于从其他页面返回到当前页面时执行,首次进入当前页面不执行
// 注:此方法在iOS手势返回时,不执行此处
logPrint('从其他页面返回到${widget.runtimeType}页');
} else {
// 离开当前页面或退出当前页面时执行
logPrint('离开或退出${widget.runtimeType}页');
}
super.deactivate();
}
网友评论