參考文章:
Flutter監(jiān)聽路由返回
方法一:
push方法.then逝淹,支持手勢(shì)返回?,可以獲取傳回參數(shù)?桶唐。
方法二:
didPopNext栅葡,支持手勢(shì)返回?,但回傳參數(shù)獲取不到?尤泽。
方法三欣簇、
deactivate(),不支持手勢(shì)返回?坯约,回傳參數(shù)獲取不到?熊咽。
各個(gè)使用方法:
方法一、push后.then即可
方法二鬼店、添加route監(jiān)聽
1网棍、程序入口添加:
// 用于路由返回監(jiān)聽
static final RouteObserver<PageRoute> routeObserver = RouteObserver<PageRoute>();
2、MaterialApp
下添加
return MaterialApp(
navigatorObservers: [MyApp.routeObserver],
3妇智、所在頁(yè)面添加with RouteAware
4滥玷、添加訂閱和移除訂閱
@override
void didChangeDependencies() {
super.didChangeDependencies();
// 添加監(jiān)聽訂閱
MyApp.routeObserver.subscribe(this, ModalRoute.of(context));
}
@override
void dispose() {
// 移除監(jiān)聽訂閱
MyApp.routeObserver.unsubscribe(this);
super.dispose();
}
4、使用一下方法來(lái)監(jiān)聽
@override
void didPush() {
super.didPush();
// push進(jìn)入當(dāng)前頁(yè)面時(shí)走這里
LogUtils.d('生命周期監(jiān)聽', 'didPush');
}
@override
void didPushNext() {
super.didPushNext();
// 當(dāng)前頁(yè)面push到其他頁(yè)面走這里
LogUtils.d('生命周期監(jiān)聽', 'didPushNext');
}
@override
void didPop() {
super.didPop();
// pop出當(dāng)前頁(yè)面時(shí)走這里
LogUtils.d('生命周期監(jiān)聽', 'didPop');
}
@override
void didPopNext() {
super.didPopNext();
// 從其他頁(yè)面pop回當(dāng)前頁(yè)面走這里
LogUtils.d('生命周期監(jiān)聽', 'didPopNext');
}
方法三巍棱、
@override
void deactivate() {
bool isBack = ModalRoute.of(context).isCurrent;
if (isBack) {
// 限于從其他頁(yè)面返回到當(dāng)前頁(yè)面時(shí)執(zhí)行惑畴,首次進(jìn)入當(dāng)前頁(yè)面不執(zhí)行
// 注:此方法在iOS手勢(shì)返回時(shí),不執(zhí)行此處
logPrint('從其他頁(yè)面返回到${widget.runtimeType}頁(yè)');
} else {
// 離開當(dāng)前頁(yè)面或退出當(dāng)前頁(yè)面時(shí)執(zhí)行
logPrint('離開或退出${widget.runtimeType}頁(yè)');
}
super.deactivate();
}