authentication - Flutter:应用生命周期之间的导航问题

标签 authentication flutter dart navigation

在我的应用程序中,我使用routes在页面之间导航。

这是我实现路线的方法:

main.dart文件中,我定义了这样的路由:

bool session = await isValidSession(); //queries database and validate session

if (session) {
    _defaultHome = new HomePage();
}

final routes = {
    '/login': (BuildContext context) => new LoginPage(),
    '/home': (BuildContext context) => new HomePage(),
    //several other pages
    '/logout' : (BuildContext context) => new LogoutPage(),
};

我已经将该路由作为runApp方法的参数传递了:
runApp(new MaterialApp(
    title: 'My Application',
    theme: ThemeData(
      primarySwatch: Colors.blue,
    ),
    home: _defaultHome,
    routes: routes,
));

可通过抽屉菜单浏览页面。当用户将Tap放在菜单上时,此代码将执行并将客户带到相应页面。
Navigator.of(context).pushNamed("/PAGE_NAME");

问题场景:
  • 当用户打开应用程序时,填写表格并尝试登录
  • 函数验证凭据和登录用户
  • 成功登录后,我获得了用于导航到Home页面的代码。
    Navigator.of(context).popAndPushNamed("/home");
    

  • 根据 popAndPushNamed 方法的官方文档,

    Pop the current route off the navigator that most tightly encloses the given context and push a named route in its place.



    因此,根据我的理解,popAndPushNamed应该从上下文中删除login页面,并将导航到home页面。

    不能按预期的方式工作,它导航到home页,但不会从上下文中删除login页,因为按下后退按钮会返回登录页面(即使表单处于填充状态)。

    或者,如果我将当前上下文poppush链接到新页面,则使用,然后按预期运行。
    Navigator.pop(context); 
    Navigator.of(context).pushNamed("/home");
    

    但是,当我从back页面上点击home按钮时,这种方法仍然存在问题。屏幕变为空白,而不是退出应用程序。

    问题:
  • 如何正确从上下文中删除login页面? (如果用户按下后退按钮,则应用程序退出)
  • 用户注销时,如何从上下文中删除所有页面并导航到login页面? (已经尝试过,但在我的情况下不起作用)
    Navigator.of(context).popUntil(ModalRoute.withName('/login'));
    
  • 最佳答案

    您可以尝试注销:

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

    关于authentication - Flutter:应用生命周期之间的导航问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58114861/

    相关文章:

    django - 如何实现基于JqueryMobile、AngularJs、PhoneGap的移动Django客户端认证

    authentication - SignalR 2.0 中的授权 header

    flutter - 如何在 Flutter 的 initState 中获取当前的 App Locale?

    dart - 关于导入本地文件的Dart风格建议

    dart - REGEX只捕获单词吗?

    forms - 如何验证值更改的文本字段?

    Spring安全身份验证管理器没有提供者

    asp.net - 使用 System.Web.ApplicationServices.AuthenticationService 进行 WCF 服务身份验证,我无法向成员资格提供程序进行身份验证

    android - "Execution failed for task ' :app:packageDebug ' > Failed to generate v1 signature" exception while compiling Flutter

    android - 脚本 'C:\tools\flutter\packages\flutter_tools\gradle\flutter.gradle' 行 : 1070