如何在Flutter中进行无上下文导航以移动到维护屏幕



我有一个维护控制器,它初始化一个可观察变量,每当该变量为true时,它就会导航到维护屏幕,当变量设置为false时,它会按如下方式导航回来:

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)}
});
}
}

一切都很好,但我在日志中得到了以下异常:

flutter: You are trying to use contextless navigation without
a GetMaterialApp or Get.key.
If you are testing your app, you can use:
[Get.testMode = true], or if you are running your app on
a physical device or emulator, you must exchange your [MaterialApp]
for a [GetMaterialApp].
flutter:
#0      GetNavigation.global (package:get/get_navigation/src/extension_navigation.dart:1094:7)
#1      GetNavigation.offNamed (package:get/get_navigation/src/extension_navigation.dart:629:12)
#2      MaintenanceController.onInit.<anonymous closure> (package:n_app/src/screens/maintenance/maintenance_controller.dart:17:85)
#3      ever.<anonymous closure> (package:get/get_rx/src/rx_workers/rx_workers.dart:69:44)
#4      GetStream._notifyData (package:get/get_rx/src/rx_stream/get_stream.dart:47:21)
#5      GetStream.add (package:get/get_rx/src/rx_stream/get_stream.dart:97:5)
#6      RxObjectMixin.value= (package:get/get_rx/src/rx_types/rx_core/rx_impl.dart:105:13)
#7      MaintenanceController.subscribe.<anonymous closure> (package:n_app/src/screens/maintenance/maintenance_controller.dart:29:21)
#8      _rootRunUnary (dart:async/zone.dart:1434:47)
#9      _CustomZone.runUnary (dart:async/zone.dart:1335:19)
#10     _CustomZone.runUnaryGuarded (dart:async/zone.dart:1244:7)
#11     _Bufferi<…>
flutter: ----------------------------------------------------

app.dart:

GetMaterialApp(
debugShowCheckedModeBanner: false,
locale: Get.find<LocalizationController>().deviceLocale,
getPages: Routes.routes,
localizationsDelegates: AppLocalizations.localizationsDelegates,
supportedLocales: AppLocalizations.supportedLocales,
unknownRoute: Routes.getNotFound,
initialRoute: GetPlatform.isWeb ? Routes.initial : Routes.splash,
theme: Get.find<ThemeController>().themeData,
navigatorKey: NavigationService.navigatorKey,
);

我尝试添加navigatorKey: Get.key并使用navigatorKey.currentState!.pushNamed(routeName);进行导航,但currentState始终为null。有什么建议吗?

您必须使用GetMaterialApp而不是MaterialApp才能在GetX中进行无上下文导航。

更换

MaterialApp(home: somePage());

带有

GetMaterialApp(home: somePage());

navigatorKey: Get.key添加到GetMaterialApp并继续使用Get.offNamed(...)而不是navigatorKey.currentState!.pushNamed(routeName);起作用。

最新更新