Flutter - how avoid pushing same route twice?

611
Navigator.of(context).pushNamedAndRemoveUntil(
   "newRouteName",
   (route) => route.isCurrent && route.settings.name == "newRouteName"
  ? false
  : true);

t will pop the current route if name of the route is "newRouteName" and then push new one, else will not pop anything.

Edit: Latest flutter provides ModalRoute.of(context).settings.name to get the name of current route.

Share:
611
FetFrumos
Author by

FetFrumos

Updated on December 06, 2022

Comments

  • FetFrumos
    FetFrumos over 1 year

    This structure of my app navigation:

    CupertinoTabScaffold ->tabBuilder:TabPage-> tabBar: CupertinoTabBar
    

    My TabPage:

    return MaterialApp(
      navigatorKey: navKey,    
      home: child,
    );
    

    I have separate navigation in each tab. by clicking on the bottom tab, I go back to the beginning. this is my code and this is working now:

     key.currentState!.pushNamedAndRemoveUntil('/', ModalRoute.withName('/'));
    

    for each tab I have my own navigation key. I pass it to each TabPage.

    but if the page is at the root I need to avoid pushing same route twice. I tried this code but it doesn't work:

      key.currentState!.pushNamedAndRemoveUntil("/",
        (route) => route.isFirst && route.settings.name == "/" ? false : true);
    

    how avoid pushing same route twice?

  • FetFrumos
    FetFrumos over 2 years
    how is this different from my version?