参考链接:How to check when my widget screen comes to visibility in flutter like onResume in Android - Stack Overflow
///默认全局路由观测者
final RouteObserver routeObserver = RouteObserver();
MaterialApp(
...
navigatorObservers:[routeObserver],
...
)
with RouteAware
在didChangeDependencies订阅消息
@override
void didChangeDependencies() {
super.didChangeDependencies();
routeObserver.subscribe(this, ModalRoute.of(context) as PageRoute);
}
dispose释放订阅
@override
void dispose() {
routeObserver.unsubscribe(this);
super.dispose();
}
@override
void dispose() {
routeObserver.unsubscribe(this);
super.dispose();
}
@override
void didPop() {
super.didPop();
}
///从别的页面返回 类似android的onResume ios的viewWillDisappear
@override
void didPopNext() {
super.didPopNext();
}
///首次进入 类似android的onStart
@override
void didPush() {
super.didPush();
}
///打开了别的页面 类似android的onPause ios的viewDidDisappear
@override
void didPushNext() {
super.didPushNext();
}
A页面设置了监听,跳转到B页面.B页面在打开关闭C页面.A页面不会触发监听.
只监听了路由跳转事件,app缩小到桌面,重新打开还不支持
参考文档:Flutter使用didChangeAppLifecycleState遇到的问题 - 简书
with WidgetsBindingObserver
initState
中添加监听WidgetsBinding.instance.addObserver(this);
3.在
dispose移除监听 WidgetsBinding.instance.removeObserver(this);
4.重写
didChangeAppLifecycleState @override
void didChangeAppLifecycleState(AppLifecycleState state) async {
print('\n\ndidChangeAppLifecycleState');
switch (state) {
case AppLifecycleState.resumed:
print('\n\nresumed');
_mymethod();
break;
case AppLifecycleState.inactive:
print('\n\ninactive');
break;
case AppLifecycleState.paused:
print('\n\npaused');
break;
case AppLifecycleState.detached:
print('\n\ndetached');
break;
}
}
例如:
标记当前页面
//由子页面 返回时刷新
@override
void didPopNext() {
_inCurrentPage = true;
//TODO 这里做 onResume 方法
refreshPage();
}
//进入子页面
@override
void didPushNext() {
_inCurrentPage = false;
super.didPushNext();
}
//由后台返回主屏幕 刷新数据
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
super.didChangeAppLifecycleState(state);
if (state == AppLifecycleState.resumed && _inCurrentPage) {
//TODO 这里做 onResume 方法
refreshPage();
}
}