didChangeAppLifecycleState无法按预期工作

时间:2019-12-03 09:15:03

标签: flutter dart onresume

我希望我了解$ array=("one" "two" "three") $ jq '.x.y = $ARGS.positional' payload.json.tpl --args "${array[@]}" { "foo": "bar", "x": { "y": [ "one", "two", "three" ] } } 的工作方式。

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

PageA

didChangeAppLifecycleState

这是pageA中的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

1 个答案:

答案 0 :(得分:0)

您的思维方式是onResume工作的Android方式,但是在Flutter中,事情并非以这种方式发生。

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


主要有4种状态:

resumed:该应用程序可见并且正在响应用户输入。

inactive:该应用程序处于非活动状态,没有收到用户输入。

paused:该应用程序当前对用户不可见,未响应用户输入,并且在后台运行。

detached:该应用程序仍托管在Flutter引擎上,但已脱离任何主机视图。


编辑:

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);