Flutter navigatorkey + GlobalKey:“方法 'pushedName' 被调用为 null”

Joe*_*esh 10 navigator flutter

我在这里找到了中间件“GlobalKey NavigatorState”解决方案,但无法克服错误“The method 'pushedNamed' was called on null”。然后我找到了这个替代解决方案来使用单独的类和静态变量来解决这个问题,但它产生了同样的错误。 我真正需要的是一个非常基本的设置示例以及如何在其他地方调用“pushedNamed”函数。

当前代码

在单独的文件夹中初始化 GlobalKey:

class NavKey{
  static final navKey = new GlobalKey<NavigatorState>();
}
Run Code Online (Sandbox Code Playgroud)

主要.dart:

import 'package:eumag/assets/tools/route_navigation_constants.dart';

    ...

  @override
  Widget build(BuildContext context) {
    return StoreProvider<AppState>(
      store: store,
      child: MaterialApp(
        theme: ThemeData.dark(),
        navigatorKey: NavKey.navKey,
        routes: <String, WidgetBuilder>{
          ROUTE_LOGIN_PAGE: (BuildContext context) => LoginPage(store),
          ROUTE_MAIN_PAGE: (BuildContext context) => MainPage(store),
        },
        home: StoreBuilder<AppState>(
          builder: (BuildContext context, Store<AppState> store) =>
              LoginPage(store),
        ),
      ),
    );
  }
Run Code Online (Sandbox Code Playgroud)

中间件.dart:

import 'package:eumag/assets/tools/route_navigation_constants.dart';

void appStateMiddleware (Store<AppState> store, action, NextDispatcher next) async{

  final navigatorKey = NavKey.navKey;

  if (action is UpdateRoomStatus){
    navigatorKey.currentState.pushNamed(ROUTE_MAIN_PAGE);
    store.dispatch(createSocketConnection);
  }
  next(action);
}
Run Code Online (Sandbox Code Playgroud)

小智 7

有同样的问题,文档中的最后一行似乎给出了修复的提示。

navigatorKey 属性

您显然不能使用routesanavigatorKey并且必须使用onGenerateRoute.

  • @ZinoHofmann,你没有给出任何代码示例,也没有给出一个糟糕的解释。我也不会检查它 (6认同)