【问题标题】:How to set home page async and conditional?如何设置主页异步和条件?
【发布时间】:2021-06-14 22:19:37
【问题描述】:

我的应用程序有一个登录页面,并使用访问令牌登录用户。在应用程序启动时,如果用户仍然有一个令牌(这意味着自上次登录后没有注销),主页是 X,但如果用户没有令牌主页是登录页面。没有问题,因为我使用 SharedPreferences 来存储令牌,但我决定使用 flutter_secure_storage 包。它的功能是异步工作的。所以问题是,在我将 SharedPreferences 更改为 flutter_secure_storage 后,如果用户没有令牌并启动应用程序,页面 X 将显示几秒钟,然后登录页面即将到来。我对所有 flutter_secure_storage 变量使用了 async/await 函数,但不能将它用于主页。我认为这是因为我不能让应用程序等待令牌检查,它开始构建页面 X,然后意识到令牌为空,然后构建登录页面。这可能不是真的,只是我的想法。我的家庭密码:是

home: Constants.storage.read(key: "token") !=
                null 
            ? ChangeNotifierProvider(
                create: (context) => BooksPageViewModel(),
                child: BooksView(),
              )
            : ChangeNotifierProvider(
                create: (context) => LoginPageViewModel(),
                child: LoginPage(),
              ));

我尝试创建一个 Future 函数,但无法将其分配给 home:... 我试图回家:......异步但没有发生。 如何将我的主页设置为等待令牌检查?提前致谢。

【问题讨论】:

  • 您可以使用FutureBuilder 显示初始屏幕(或加载指示器),直到您的未来返回一个值,然后使用该值来决定显示哪个页面。

标签: flutter dart


【解决方案1】:

因此,如果我理解正确,则 .storage.read 函数是异步的,必须等待才能使令牌不为空。 在这种情况下,我要么使用 Futurebuilder,要么您事先执行 Constants.storage.read 函数,例如:

var token = await Constants.storage.read(key: "token");

如果您遇到必须使 main 方法异步的问题,没关系,只需在 main 的开头调用 WidgetsFlutterBinding.ensureInitialized(); 即可。

【讨论】:

    【解决方案2】:

    我把我的主要转向

    Future main() async {
    

    正如@MaxTromp 所说,我添加了WidgetsFlutterBinding.ensureInitialized(); 然后我在常量中添加了一个static String 作为我的令牌,并在main 中调用了Constants.token = await Constants.storage.read(key: "token");。 然后我家:是

    home: Constants.token !=
                    null 
                ? ChangeNotifierProvider(
                    create: (context) => BooksPageViewModel(),
                    child: BooksView(),
                  )
                : ChangeNotifierProvider(
                    create: (context) => LoginPageViewModel(),
                    child: LoginPage(),
                  ));
    

    现在,它运行良好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-18
      • 2015-03-12
      • 2023-02-24
      • 2011-03-13
      相关资源
      最近更新 更多