Flutter Redux Navigator GlobalKey.currentState returns null

﹥>﹥吖頭↗ 提交于 2019-12-01 09:25:11

I solwed this issue by having the global navigator key in a separate file. Then I used that in my materialApp and in the middleware.

I put the navigator key in my keys.dart file:

import 'package:flutter/widgets.dart';
class NoomiKeys {
  static final navKey = new GlobalKey<NavigatorState>();
}

Added the key to MaterialApp widget "navigatorKey: NoomiKeys.navKey," in my main.dart file (alot of code is removed to make it faster to read):

import 'package:noomi_nursing_home_app/keys.dart';


@override
Widget build(BuildContext context) {
return StoreProvider<AppState>(
  store: store,
  child: MaterialApp(

    //Add the key to your materialApp widget
    navigatorKey: NoomiKeys.navKey,

    localizationsDelegates: [NoomiLocalizationsDelegate()],
    onGenerateRoute: (RouteSettings settings) {
      switch (settings.name) {

And use it in navigate_middleware.dart;

import 'package:noomi_nursing_home_app/actions/actions.dart';
import 'package:noomi_nursing_home_app/keys.dart';
import 'package:redux/redux.dart';
import 'package:noomi_nursing_home_app/models/models.dart';

List<Middleware<AppState>> navigateMiddleware() {

  final navigatorKey = NoomiKeys.navKey;

  final navigatePushNamed = _navigatePushNamed(navigatorKey);
  return ([
    TypedMiddleware<AppState, NavigatePushNamedAction>(navigatePushNamed),
  ]);
}

Middleware<AppState> _navigatePushNamed(navigatorKey) {
  return (Store<AppState> store, action, NextDispatcher next) {
    next(action);
    navigatorKey.currentState.pushNamed(action.to);
  };
}

looks like you forgot to declare & pass navigatorKey to middleware

final navigatorKey = GlobalKey<NavigatorState>();
void main() {
  final store = Store(appStateReducer,
      middleware:createRouteMiddleware(navigatorKey: navigatorKey)
  );
  runApp(MyApp(store));
}

and your MaterialApp is missing navigatorKey too

MaterialApp(
  navigatorKey: navigatorKey
  routes: /* your routes */
)
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!