如何在下面的代码中使用 systemNavigator.pop 在 flutter 中退出应用程序

ram*_*man 3 dart flutter

这是我的代码。我使用 SystemNavigator.pop 但它说undefined name SystemNavigator

我想要的只是使用 OnTap 退出应用程序


class AppDrawer extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Drawer(
      child: ListView(
        padding: EdgeInsets.zero,
        children: <Widget>[
          _createHeader(),
          _createDrawerItem(
              icon: Icons.home,
              text: 'Home',
              onTap: () => Navigator.of(context).pop()),


          Divider(),

          _createDrawerItem
(icon: Icons.exit_to_app, text: 'Exit app',
onTap: () => SystemNavigator.pop),

          ),
        ],
      ),
    );
  }

Run Code Online (Sandbox Code Playgroud)

SystemNavigator.pop在这种情况下添加的正确方法是什么?如果您知道任何添加方法,请帮助我SystemNavigator.pop

Fut*_*eJJ 11

您可能缺少包含 SystemNavigator 的导入,因此添加:

import 'package:flutter/services.dart';
Run Code Online (Sandbox Code Playgroud)

你缺少一个括号,所以,正确的SystemNavigator.popSystemNavigator.pop()

或者,您可以使用SystemChannels

SystemChannels.platform.invokeMethod<void>('SystemNavigator.pop');
Run Code Online (Sandbox Code Playgroud)

而不是SystemNavigator.pop()里面onTap。在此处参考颤振文档:链接

上面链接中的 Flutter 文档说:

指示系统导航器从堆栈中删除此活动并返回到前一个活动。

在 iOS 上,对此方法的调用将被忽略,因为 Apple 的人机界面指南规定应用程序不应自行退出。

这种方法应该优先于调用 dart:io 的 exit 方法,因为后者可能会导致底层平台表现得好像应用程序崩溃了一样。

exit(0)如果您计划在 Apple 应用商店中启动该应用,请不要使用,因为 Apple 人机界面指南强烈建议您以编程方式退出该应用。请参阅此 iOS 文档存档

上面的链接说:

不要调用退出函数。调用 exit 的应用程序将在用户看来已崩溃,而不是执行正常终止并动画返回主屏幕。

关于 exit() 的Flutter 文档说:

使用给定的退出代码立即退出 Dart VM 进程。

这不会等待任何异步操作终止。因此使用 exit 很可能会丢失数据。

  • 不适用于 ios 模拟器。没有在真正的 iPhone 上进行测试。 (2认同)