我希望我了解didChangeAppLifecycleState如何正常工作。

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

页面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());
    }
  }

....

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

最佳答案

您的想法是onResume在Android上起作用,但是在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);

10-08 03:27