flatter getx:在登录中间件中发生循环
发布时间:2022-03-15 12:30:17 552
相关标签:
我在我的示例项目中使用Getx,如下所示:
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return GetMaterialApp(
theme: ThemeData(
primarySwatch: Colors.blue,
),
initialRoute: AppLinks.LOGIN,
getPages: AppRoutes.pages,
initialBinding: MainBinding(),
);
}
}
我有这样的路线:
class AppRoutes {
static final pages = [
GetPage(
name: AppLinks.LOGIN,
page: () => Login(),
binding: LoginBinding(),
),
GetPage(
name: AppLinks.DASHBOARD,
page: () => Dashboard(),
middlewares: [
AuthGuard(),
],
children: [...
正如你所看到的,我宣布了一个Middelware:
middlewares: [
AuthGuard(),
],
这是一个简单的中间件:
class AuthGuard extends GetMiddleware {
final authService = Get.find();
@override
int? get priority => 1;
@override
RouteSettings? redirect(String? route) {
if (authService.isAuthenticated)
return RouteSettings(name: AppLinks.LOGIN);
else
return RouteSettings(name: AppLinks.DASHBOARD);
}
}
在登录页面中,我有一个按钮:
ElevatedButton(
style: ElevatedButton.styleFrom(
primary: Colors.red,
onPrimary: Colors.green,
onSurface: Colors.pink,
),
onPressed: () => controller.toDashboard(),
child: Text("Dashboard"),
)
在它的控制器里我有这个:
class LoginController extends GetxController {
toDashboard() => Get.toNamed(AppLinks.DASHBOARD);
}
但当我打电话时toDashboard
方法I在该语句中进入循环:
@override
RouteSettings? redirect(String? route) {
if (authService.isAuthenticated)
return RouteSettings(name: AppLinks.LOGIN);
else
return RouteSettings(name: AppLinks.DASHBOARD);
}
}
我正在使用:
environment:
sdk: ">=2.12.0 <3.0.0"
dependencies:
flutter:
sdk: flutter
cupertino_icons: ^1.0.2
get: ^4.3.4
医生:
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, 2.8.1, on Debian GNU/Linux 10 (buster) 4.19.0-18-amd64, locale en_US.UTF-8)
[✓] Android toolchain - develop for Android devices (Android SDK version 32.0.0)
[✓] Chrome - develop for the web
[✓] Android Studio (version 2020.3)
[✓] Android Studio
[✓] VS Code (version 1.63.2)
[✓] Connected device (2 available)
• No issues found!
特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报