0

In dart, I read here that for passing parameters, you should use onGenerateRoute.

So for instance, like this:

onGenerateRoute: (RouteSettings settings) {
    if (settings.name == MyScreen.routeName) {
      final MyScreenArgs args = settings.arguments as MyScreenArgs;

      return MaterialPageRoute(builder: (context) => MyScreen(arguments: args));
    }
}

However, using something like this still works:

routes: {
    MyScreen.routeName: (context) {
      final MyScreenArgs args = ModalRoute.of(context).settings.arguments;
      return MyScreen(arguments: args);
    },
}

What's the difference between the 2 methods?

SnuKies
  • 1,578
  • 1
  • 16
  • 37
  • 1
    I personally use onGenerate route for adding business logics instead of doing them directly before calling navigator. For example if user is logged in or not can be done in onGenerateRoute easily without writing any business logic in your screens. Apart from that it can be used to extract query and path parameters from the route. Although there are a lot of routing libraries which does this,I find writing my own parser easier. – Zeeshan Hussain Aug 03 '20 at 11:29

1 Answers1

0

onGenerateRoute is called when routes does not find an exact match. You should use to parse out arguments provided in the settings.name (which may be supplied via the browser bar URI).

user48956
  • 14,850
  • 19
  • 93
  • 154