Flutter - Cannot modify unmodifiable map when passing data with popuntil

Viewed 48

i am receiving following error while I try to pass data to previous screen when using popUntil method. Can't understand why the error is happening:

[VERBOSE-2:ui_dart_state.cc(198)] Unhandled Exception: Unsupported operation: Cannot modify unmodifiable map

here is steps that I follow:

1) Router:

Route<dynamic> generateRoute(RouteSettings settings) {
  switch (settings.name) {

    case LoginViewRoute:
      String navigatedScreen = settings.arguments as String;
      return MaterialPageRoute(
          settings:  RouteSettings(name: LoginViewRoute, arguments: Map()),
          builder: (context) => LoginPage(
                navigatedPage: navigatedScreen,
              ));

 }
}

2) Pushing Screen:

 Navigator.pushNamed(context, LoginViewRoute, arguments: HomeViewRoute).then((value) {
                final arguments = ModalRoute.of(context)?.settings.arguments as Map;
                bool result = arguments[IS_LOGIN_COMPLTED];
                if (result) {
                  _bloc.onLoggedIn();
                  print(User().email);
                }
              });

3) Handling Returning Data from Pushed Screen:

Navigator.of(context).popUntil((route) {
                        if (route.settings.name == widget.navigatedPage) {
                          (route.settings.arguments as Map)[IS_LOGIN_COMPLTED] = true;
                          return true;
                        } else {
                          return false;
                        }

in step 3, following code block, i am facing that error:

[VERBOSE-2:ui_dart_state.cc(198)] Unhandled Exception: Unsupported operation: Cannot modify unmodifiable map

here is the code block where this error happens(in step 3):

(route.settings.arguments as Map)[IS_LOGIN_COMPLTED] = true;
1 Answers

solved. make sure that the screen's settings that you will popback must not be have a const value

removed the const key from settings on following code where user will be popped back.

 case HomeViewRoute:
      return MaterialPageRoute(
        builder: (context) => HomePage(),
        settings: RouteSettings(name: HomeViewRoute, arguments:  {}),
      );
Related