【问题标题】:Flutter back-pressed shows black screenFlutter 后按显示黑屏
【发布时间】:2019-12-10 12:33:01
【问题描述】:

在导航抽屉屏幕出现给用户之前,我已经在颤动中创建了NavigationDrawer 我在它之前有 3 个屏幕

  1. 启动画面
  2. 介绍滑块
  3. 登录屏幕
  4. 导航抽屉

当用户从导航抽屉屏幕按下安卓手机中的返回按钮时,我想关闭我的应用程序,但它会显示黑屏。

我在下面调用了从登录到抽屉的导航

      Navigator.pushAndRemoveUntil(
                context,
                MaterialPageRoute(
                  builder: (BuildContext context) => NavigationDrawerDemo(),
                ),
                ModalRoute.withName('/LoginFieldForm'));

我用

调用 loginfieldform
  Navigator.push(context,
    new MaterialPageRoute(builder: (context) =>new LoginFieldForm()));

【问题讨论】:

  • 你能显示推送LoginFieldForm的代码吗?我可能知道出了什么问题
  • @magicleon94 更新问题
  • 我就是这么想的。检查我的答案,它应该是你需要的

标签: flutter dart


【解决方案1】:

我认为您已经使用 Navigator.push 方法推送了“LoginFieldForm”,并尝试使用命名路由将其删除。

例如:

// 使用 Navigator.push 方法推送路由

Navigator.push(
        context,
        MaterialPageRoute(builder: (context) => LoginFieldForm()),
      );

// 使用命名路由删除。

Navigator.pushAndRemoveUntil(
                context,
                MaterialPageRoute(
                  builder: (BuildContext context) => NavigationDrawerDemo(),
                ),
                ModalRoute.withName('/LoginFieldForm'));

如果您使用命名路由添加了路由,则只能使用 ModalRoute.withName()。

【讨论】:

  • 我只是给了你一个提示。它不是要实现的代码。仍然在您的问题中粘贴您的方法和错误日志。
【解决方案2】:

您的路线可能没有设置名称。如果是这样,弹出直到名称匹配将导致弹出所有内容,因为永远找不到您要查找的名称。

当您推送LoginFieldForm 时,请确保将settings 传递给路由。

推送的时候可以这样操作:

MaterialPageRoute(
    settings: RouteSettings(name: "routeName"),
    builder: (context) => YourWidget(),
)

如果您在onGenerateRoute 内,则您已经将settings 作为参数传递给onGenerateRoute 函数。在这种情况下,只需将它们转发到MaterialPageRoute

MaterialPageRoute(
    settings: settings, //these settings are arguments from the function
    builder: (context) => YourWidget(),
)

【讨论】:

    【解决方案3】:

    要关闭应用程序,您可以在后面使用dart:ioexit(0)。press.exit(0) 帮助使用给定的退出代码立即退出 Dart VM 进程。

    这不会等待任何异步操作终止。你可以找到更多关于 exit(0) here

    或者

    SystemChannels.platform.invokeMethod('SystemNavigator.pop');
    

    更多详情可以查看here

    【讨论】:

    • 你能简单介绍一下吗
    【解决方案4】:

    用例:pushNamedAndRemoveUntil

     Navigator.of(context).pushNamedAndRemoveUntil('/LoginFieldForm', 
    (Route<dynamic> route) => false);
    

    【讨论】:

      猜你喜欢
      • 2021-04-09
      • 2021-05-26
      • 2019-04-11
      • 2021-03-09
      • 1970-01-01
      • 2022-10-21
      • 1970-01-01
      • 2020-04-09
      • 2011-01-11
      相关资源
      最近更新 更多