1

我正在编写一个适用于移动设备的 Flutter 应用程序。我习惯了 Android 范例,您将用户所做的所有更改保留在 中onPause,基本上只要当前屏幕进入后台,就会调用它。我找不到 Flutter 的等价物。

我看到的所有示例都有一个“提交”按钮,但我希​​望应用程序在我按下返回或主页按钮时保存数据(或者如果我按下应用程序栏中的保存图标)。

Flutter 应用程序通常在哪里将状态保存到存储中?

4

1 回答 1

2

您可以使用WidgetsBindingObserver获取AppLifecycleState.paused

class MyPage extends StatefulWidget {
  @override
  _MyPageState createState() => _MyPageState();
}

class _MyPageState extends State<MyPage> 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) {
    super.didChangeAppLifecycleState(state);
    switch (state) {
      case AppLifecycleState.resumed:
        break;
      case AppLifecycleState.inactive:
        break;
      case AppLifecycleState.paused:
        _saveState();
        break;
      case AppLifecycleState.detached:
        break;
    }
  }

  void _saveState() {
    // Save state here
  }

  @override
  Widget build(BuildContext context) => Scaffold(
        body: WillPopScope(
          onWillPop: () async {
            _saveState();
            return true;
          },
          child: SafeArea(
            child: Container(),
          ),
        ),
      );
}

另一种选择是使用hydrad_bloc,它会自动为您保存状态。

于 2021-02-18T06:19:14.797 回答