gpt4 book ai didi

authentication - Flutter - onGenerateRoute 与 Await for auth Guard

转载 作者:行者123 更新时间:2023-12-03 19:25:47 27 4
gpt4 key购买 nike

我有一个包含多个页面的 Flutter 应用程序,有些页面需要用户登录才能访问该页面。

我遇到的主要问题是,对于我的 kDashboardRoute我需要调用 async检查用户是否登录并设置bool isUserLoggedIn的方法然而,相应地,我不能调用这个方法,因为它返回一个 future ,我不能使用 awaitroutes方法不能返回 future 。

请问有什么建议吗?

下面是我的 main.dart 类中的代码

Future<void> main() async {
// run the app
runApp(
MaterialApp(
title: kAppName,
theme: ThemeData(
primarySwatch: Colors.green,
primaryColor: kPrimaryColour,
),
onGenerateRoute: RouteGenerator.routes,
),
);
}

下面是我的路由文件中的代码

import 'package:flutter/material.dart';
import 'package:myapp/services/auth_service.dart';
import 'package:myapp/utilities/constants.dart';
import 'package:myapp/pages/login_page.dart';
import 'package:myapp/pages/two_step_verification.dart';
import 'package:myapp/pages/dashboard_page.dart';
import 'package:myapp/pages/error_page.dart';

class RouteGenerator {
static Route<dynamic> routes(RouteSettings settings) {
final args = settings.arguments;

switch (settings.name) {
case kLoginRoute:
return MaterialPageRoute(builder: (_) => LoginPage());
case kTwoStepAuthRoute:
return MaterialPageRoute(builder: (_) => TwoStepVerification());
case kDashboardRoute:
// TODO: call my auth check method here which required await
bool isUserLoggedIn = true; // set this accordingly
if (isUserLoggedIn == true) {
return MaterialPageRoute(builder: (_) => DashboardPage());
}

return MaterialPageRoute(builder: (_) => ErrorPage());
default:
return MaterialPageRoute(builder: (_) => LoginPage());
break;
}
}
}

最佳答案

如您所见 onGenerateRoute必须返回 Route ,所以必须是同步的,不能使用 await .

我认为对于提供的情况,最简单的解决方案是为仪表板创建一个代理页面,其中包含 FutureBuilder您可以在 future 进行时显示一些进度指示器,并在获得结果时更新它。

另一种选择是使用 FutureBuilder再次但对于整个 MaterialApp 类。

如果 future 实际上相当快(从共享首选项或本地数据库中读取),那么您可以尝试在 main 中等待 future 的结果。之前的功能 runApp

关于authentication - Flutter - onGenerateRoute 与 Await for auth Guard,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57357151/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com