当 AppLifeCycleState.detached 被调用时?

iDe*_*ode 5 flutter

我有:

class _PageState extends State<Page> 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);
    print('state = $state');
  }

  @override
  Widget build(BuildContext context) => Scaffold();
}
Run Code Online (Sandbox Code Playgroud)

AppLifeCycleState类有 4 个回调,其中 3 个

- active
- paused
- resumed
Run Code Online (Sandbox Code Playgroud)

似乎有效,但detached无论如何都没有起作用。

我阅读了文档,但在实际场景中无法理解它,任何人都可以分享相关代码,何时何地调用它?

jit*_*555 4

正如医生所说

\n\n
\n

已分离 \xe2\x86\x92 const AppLifecycleState 应用程序仍托管在 flutter 引擎上,但与任何主机视图分离。

\n\n

当应用程序处于此状态时,引擎将在没有视图的情况下运行。它可以在引擎首次初始化时附加视图,也可以在视图由于导航器弹出而被破坏之后。

\n
\n\n

仅当您的家庭小部件进入后台时(按 Android 设备的后退按钮),您才能在主屏幕上重现上述问题

\n\n
void main() => runApp(MyApp());\n\nclass MyApp extends StatelessWidget {\n  @override\n  Widget build(BuildContext context) {\n    return MaterialApp(\n      home: HomeScreen(),\n    );\n  }\n}\n\n\n\nclass HomeScreen extends StatefulWidget {\n  @override\n  _HomeScreenState createState() => _HomeScreenState();\n}\n\nclass _HomeScreenState extends State<HomeScreen> with WidgetsBindingObserver {\n\n  @override\n  void initState() {\n    super.initState();\n    WidgetsBinding.instance.addObserver(this);\n  }\n\n  @override\n  didChangeAppLifecycleState(AppLifecycleState state) {\n    if (AppLifecycleState.paused == state) {}\n    print("Status :" + state.toString());\n  }\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      appBar: AppBar(\n        title: Text(\'Book\'),\n      ),\n      body: Center(\n        child: Text(\'Home Screen\'),\n      ),\n    );\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

您可以在其他屏幕上生成上述内容,并在分离时进行调用,您可以通过在小部件的任何单击事件上以编程方式关闭应用程序来完成

\n\n

安卓:

\n\n
SystemChannels.platform.invokeMethod(\'SystemNavigator.pop\');\n
Run Code Online (Sandbox Code Playgroud)\n\n

iOS:

\n\n
exit(0)\n
Run Code Online (Sandbox Code Playgroud)\n