gpt4 book ai didi

flutter - didChangeAppLifecycleState 没有按预期工作

转载 作者:行者123 更新时间:2023-12-03 02:45:40 33 4
gpt4 key购买 nike

我希望我明白如何didChangeAppLifecycleState工作正常。

我有页面 A 和页面 B 。当我从页面 B ( Navigator.of(context).pop(); ) 单击后退设备按钮时,我期望 didChangeAppLifecycleState在 pageA 中会被调用,但不会。

页面A

class _ABCState extends State<ABCrList> with WidgetsBindingObserver {
@override
void initState() {
super.initState();
WidgetsBinding.instance.addObserver(this);
....
}

@override
void dispose() {
WidgetsBinding.instance.removeObserver(this);
super.dispose();
}

@override
void didChangeAppLifecycleState(AppLifecycleState state) {
if (state == AppLifecycleState.resumed) {
setState(() {
print(...);
});
}else{
print(state.toString());
}
}

....

这是 initState在页面A中。用于调用后端服务的函数。
@override
void initState() {
super.initState();
_bloc.getList(context); // return list and populate to ListView
});
}

最佳答案

您认为的方式是 Android 的方式 onResume有效,但在 Flutter 中,事情不会这样发生。

通常,当系统将应用程序置于后台或将应用程序返回到前台时,会调用此方法。

它主要有4种状态:
resumed :应用程序可见并响应用户输入。
inactive :应用程序处于非事件状态,未接收用户输入。
paused :应用程序当前对用户不可见,不响应用户输入,并在后台运行。
detached :该应用程序仍托管在 Flutter 引擎上,但与任何主机 View 分离。

编辑:

当您导航到 PageB 时来自 PageA ,使用类似:

Navigator.pushNamed(context, "/pageB").then((flag) {
if (flag) {
// you're back from PageB, perform your function here
setState(() {}); // you may need to call this if you want to update UI
}
});

从 PageB,你可以使用
Navigator.pop(context, true);

关于flutter - didChangeAppLifecycleState 没有按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59153666/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com