【问题标题】:flutter web auto_route: Maintenance Modeflutter web auto_route:维护模式
【发布时间】:2022-07-08 00:48:30
【问题描述】:

我将如何简单地实现“维护模式”?

因此:我的路线如下:

/ => home
/contact => contact view
/about=>about view

我试图通过在我的第一条路由 (/) 中添加一个守卫来解决这个问题,并在我的解析器中推送到 /maintenance。按照代码示例:

app_router.dart

part 'app_router.gr.dart';

@CupertinoAutoRouter(replaceInRouteName: 'View', 
  routes: <AutoRoute>[
  AutoRoute(page: HomeView, initial: true, path: HomeView.route, guards: [MaintenanceGuard]),
  AutoRoute(page: AboutView, path: AboutView.route),
  AutoRoute(page: ContactView, path: ContactView.route),
  AutoRoute(page: MaintenanceView, path: MaintenanceView.route),
])
class AppRouter extends _$AppRouter {
  AppRouter({required MaintenanceGuard maintenanceGuard}) : super(maintenanceGuard: maintenanceGuard); 
}

maintenance_guard.dart

class MaintenanceGuard extends AutoRouteGuard {
  @override
  void onNavigation(NavigationResolver resolver, StackRouter router) {
    /// Proceed in debug mode
    if (kDebugMode) {
      resolver.next(true);
      return;
    }
    /// Redirect to maintenance view
    router.pushNamed(MaintenanceView.route);
  }
}

它适用于 my-domain.commy-domain.com/,但如果我重新加载页面,我会收到 404 错误:The requested URL was not found on this server

同样,如果我直接插入urlmy-domain.com/maintenance

【问题讨论】:

    标签: flutter flutter-web flutter-navigation flutter-packages


    【解决方案1】:

    我能够使用 GetX 实现这一点。我在数据库中存储了一个布尔值,并在其上订阅了 Hasura。一旦它发生变化,就会调用以下控制器并完成路由。

    class MaintenanceController extends GetxController {
    
          RxBool isMaintenance = false.obs;
        
          @override
          onInit() {
            super.onInit();
            ever(
                isMaintenance,
                (_) => {
                      if (isMaintenance.value) {Get.offNamed(Routes.maintenance)} else {Get.offNamed(Routes.splash)}
                    });
          }
        }
    

    只要第一个参数的值发生变化,就会调用ever() 方法,并执行第二个参数。 onInit() 方法在控制器初始化时被调用。就我而言,当我做Get.lazyPut(() =&gt; MaintenanceController()); 通过这样做,我可以强制应用程序在维护屏幕和启动屏幕之间移动 - 我在其中进行所有初始化(无需强制重启,这可能不会被 Apple 接受)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多