返回

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!

enter image description here

特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
相关帖子