簡體   English   中英

在 flutter web 中管理會話和導航的最佳方式是什么

[英]how is the best way to manage session and navigation in flutter web

我的項目上有 2 個網頁

在此處輸入圖片說明

在此處輸入圖片說明

我需要管理用戶會話。 如果用戶已登錄,則顯示主頁,如果用戶未登錄,則顯示登錄頁面。

我正在使用提供程序來檢查會話的狀態

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

問題是我登錄后url沒有改變

你可能想使用 Navigator.of(context).pushNamed(HomePageNamedRoute);

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

我做的是

我創建了一個類,在其中保留所有全局變量

在那里我創建了一個變量bool loginStatus;

並創建兩個方法getset來處理值

每當登錄成功時,我都會將該值設置為 true loginStatus=true;

init()方法的新頁面上,如果值為 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();
  }

全局變量在編程世界中受到強烈反對(除非絕對沒有其他替代方案可用)。 改用用戶會話。 查看FlutterSession 該包在 Flutter 中添加了用戶會話支持,並且易於使用。

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM