use*_*745 5 authentication routes flutter
我有一个包含多个页面的 Flutter 应用程序,有些页面需要用户登录才能访问该页面。
我遇到的主要问题是,kDashboardRoute
我需要调用一个async
方法来检查用户是否已登录并相应地设置bool isUserLoggedIn
,但是,我无法调用此方法,因为它返回一个未来,我不能await
用作该routes
方法回不了一个未来。
请问有什么建议吗?
下面是我的 main.dart 类中的代码
Future<void> main() async {
// run the app
runApp(
MaterialApp(
title: kAppName,
theme: ThemeData(
primarySwatch: Colors.green,
primaryColor: kPrimaryColour,
),
onGenerateRoute: RouteGenerator.routes,
),
);
}
Run Code Online (Sandbox Code Playgroud)
下面是我的路由文件中的代码
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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
正如你所看到的onGenerateRoute
必须返回Route
,所以它必须是同步的并且不能使用await
.
我认为针对所提供的情况,最简单的解决方案是为仪表板创建一个代理页面,其中FutureBuilder
您可以在未来进行时显示一些进度指示器,并在获得结果时更新它。
另一种选择是FutureBuilder
再次使用,但用于整个 MaterialApp 类。
main
如果 future 实际上相当快(从共享首选项或本地数据库读取),那么您可以尝试在函数中等待未来结果runApp
归档时间: |
|
查看次数: |
2140 次 |
最近记录: |