Flutter Navigator.pushReplacementNamed 在页面显示返回按钮

Posted

技术标签:

【中文标题】Flutter Navigator.pushReplacementNamed 在页面显示返回按钮【英文标题】:Flutter Navigator.pushReplacementNamed show back button at the page 【发布时间】:2020-11-08 07:18:35 【问题描述】:

我在 Flutter 应用程序中使用 Navigator.pushReplacementNamed 从登录页面导航到主页运行良好,但在我的主页中显示 appBar 上的返回箭头按钮,并在按下它时返回登录页面。我该怎么办?我试过把leading: Text(''),但是当按下物理后退按钮时,它仍然会回到登录页面。

我有一个注销按钮,我希望用户仅通过此按钮而不是后退按钮注销

*这是我在这里的第一个问题,对不起我的英语不好或有任何错误

【问题讨论】:

【参考方案1】:

你应该改用这个:

.pushNamedAndRemoveUntil(/* Your Route */, (Route<dynamic> route) => false)

【讨论】:

谢谢,它有效。所以当我们应该使用 . pushReplacementNamed ? 小记,我必须将构建上下文添加为第一个参数。 从颤振版本改变。我仍然没有在我的颤振版本中传递上下文@eimmer【参考方案2】:

据我了解您的 UX 流程,用户将始终在应用启动时被定向到登录页面。如果用户已经登录,你应该避免导航到这个(在那一刻无用的)路线。而是尝试在构建方法中区分用户是否登录。如果用户已经登录,则构建主页。如果用户未登录,则构建登录页面。用户一登录,状态就会发生变化,主页就会建立起来。

// your stateful component

bool isLoggedIn;

@override
Widget build(BuildContext context) 
  if(isLoggedIn) 
    return _buildHomepage();
   else 
    return _buildLoginPage();
  


Widget _buildHomepage() 
  // build your homepage


Widget _buildLoginPage() 
  // build your login page

【讨论】:

【参考方案3】:

我今天遇到了这个问题,并遇到了您的帖子。 虽然 PushNamedAndRemoveUntil 有效,但我的解决方案更加简单:

确保您没有命名路线,这不是您的主屏幕“/”。

类似:

MaterialApp(
          title: 'Flutter Demo',
          initialRoute: Screen1.routeName,  // routeName = "/route1"
          routes: 
            Screen1.routeName: (ctx) => Screen1(),   // routeName = "/route1"
            Screen2.routeName: (ctx) => Screen2(),   // routeName = "/"
            Screen3.routeName: (ctx) => Screen3(),   // routeName = "/screen2"
          ,
        );
      )

将使用 Screen1 启动您的应用程序,但将 Screen2 放在导航器堆栈的顶部。

【讨论】:

以上是关于Flutter Navigator.pushReplacementNamed 在页面显示返回按钮的主要内容,如果未能解决你的问题,请参考以下文章

[Flutter] flutter项目一直卡在 Running Gradle task 'assembleDebug'...

flutter 日志输出,Flutter打印日志,flutter log,flutter 真机日志

Flutter开发 Flutter 包和插件 ( Flutter 包和插件简介 | 创建 Flutter 插件 | 创建 Dart 包 )

flutter与原生混编(iOS)

Flutter-布局

如何解决flutter gradle build error?C:\flutter\packages\flutter_tools\gradle\flutter.gradle' line: 991