如何在Flutter Web中管理会话和导航的最佳方法

时间:2019-12-18 21:04:42

标签: flutter dart flutter-web

我的proyect上有2个网页

enter image description here

enter image description here

我需要管理用户会话。如果已登录,则显示主页,如果未登录,则显示登录页面。

我正在使用提供程序来检查会话的状态

  @override
  Widget build(BuildContext context) {
    return Consumer<LoginGeneralNotifier>(
      builder: (context, appGenaralNotifier, _) {
        return appGenaralNotifier.getLogged()
            ? HomePage()
            : LoginPage();
      },
    );
  }
}

问题是登录后该网址不会更改

3 个答案:

答案 0 :(得分:0)

您可能要使用Navigator.of(context).pushNamed(HomePageNamedRoute);

这可以在initState中完成,如下所示: Flutter Redirect to a page on initState

答案 1 :(得分:0)

我做什么

我创建了一个保留所有全局变量的类

我创建了一个变量bool loginStatus;

并创建两个方法 get set 来处理值

只要登录成功,我就将值设置为true loginStatus=true;

init()方法的新页面上,我正在检查变量的值(如果value为false,则使用户进入登录页面,否则继续

class GlobalValues{
  static bool loginStatus;


  static void setLoginStatus(bool val) {
    loginStatus = val;
  }

  static bool getLoginStatus() {
    return loginStatus == null ? false : loginStatus;
  }
}

如果登录成功,则在登录页面上

GlobalValues.setLoginStatus(true);

在其他类页面上的init方法

  @override
  void initState() {
     if (GlobalValues.getLoginStatus()) {
       // call your login page class here
       //Navigator.of(context).pushNamed(LoginPageNamedRoute);
       Navigator.pop(context);
    }

    super.initState();
  }

答案 2 :(得分:0)

全局变量在编程世界中广为人知(除非绝对没有其他替代方法可用)。请改用用户会话。签出FlutterSession。该软件包在Flutter中增加了对用户会话的支持,并且易于使用。

// Store value to session
await FlutterSession().set("token", myJWTToken);

// Retrieve item from session
dynamic token = await FlutterSession().get("token");