【发布时间】:2022-01-16 05:09:03
【问题描述】:
这是我的home.dart 代码,我想为我的应用程序编写一个身份验证中间件。目前我的main.dart 代码如下所示:
void main() {
Get.put(MenuController());
Get.put(NavigationController());
Get.put(AuthController());
Get.put(AuthCard);
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Obx(() => GetMaterialApp(
initialRoute: AuthController.instance.isAuth
? homeScreenRoute
: authenticationScreenRoute,
unknownRoute: GetPage(
name: '/not-found',
page: () => PageNotFound(),
transition: Transition.fadeIn),
getPages: [
GetPage(
name: rootRoute,
page: () {
return SiteLayout();
}),
GetPage(
name: authenticationScreenRoute,
page: () => const AuthenticationScreen()),
GetPage(name: homeScreenRoute, page: () => const HomeScreen()),
],
debugShowCheckedModeBanner: false,
title: 'BasicCode',
theme: ThemeData(
scaffoldBackgroundColor: light,
textTheme: GoogleFonts.mulishTextTheme(Theme.of(context).textTheme)
.apply(bodyColor: Colors.black),
pageTransitionsTheme: const PageTransitionsTheme(builders: {
TargetPlatform.iOS: FadeUpwardsPageTransitionsBuilder(),
TargetPlatform.android: FadeUpwardsPageTransitionsBuilder(),
}),
primarySwatch: Colors.blue,
),
));
}
}
我在代码的initialRoute 部分检查的isAuth 变量来自以下代码行,位于扩展GetXController 的auth_controller 文件内:
final _isAuth = false.obs;
bool get isAuth {
_isAuth.value= token != null;
return _isAuth.value;
}
String? get token {
if (_expiryDate != null &&
_expiryDate!.isAfter(DateTime.now()) &&
_token != null) {
return _token;
}
return null;
}
一切似乎都很好,但应用程序停留在身份验证页面,并且在 isAuth 的值更改为 true 后不会移动到主屏幕!
我进行了搜索,并通过创建身份验证中间件找到了另一种方法。所以我在main.dart文件中的上面的代码下面添加了以下代码:
class AuthMiddlware extends GetMiddleware {
@override
RouteSettings? redirect(String route) => !AuthController.instance.isAuth
? const RouteSettings(name: authenticationScreenRoute)
: null;
}
但是我在redirect 字下得到一条红线,没有错误描述,不知道如何完成中间件并使其工作?
【问题讨论】:
标签: authentication middleware flutter-getx react-state-management obs