9

Different ways to Navigate and Different ways to send parameters for Navigation...

 3 years ago
source link: https://www.coderzheaven.com/2019/12/17/different-ways-to-navigate-and-different-ways-to-send-parameters-for-navigation-in-flutter/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Different ways to Navigate and Different ways to send parameters for Navigation in Flutter

Watch Video Tutorial

Navigate using Push

Normally if we want to navigate from one screen to another we would use Navigate.push, like in the code below

Navigator.push(
context,
MaterialPageRoute(
builder: (context) => SecondScreen()
),
);

And if we want to send parameters, then one of the way to do this is like below

Navigator.push(
context,
MaterialPageRoute(
builder: (context) => SecondScreen(
'param1',
'param2',
),
),
);

Here SecondScreen is another screen that extends StatelessWidget or StatefulWidget which as a constructor like this.

final String title;
final String message;
SecondScreen({this.title, this.message});

Now we see another way to send parameters to next screen where we will use the ‘settings’ property inside the ‘MaterialPageRoute‘. So the above piece of code will change like this.

Navigator.push(
context,
MaterialPageRoute(
builder: (context) => SecondScreen(),
settings: RouteSettings(
arguments: ScreenArguments(
_controllerTitle.text,
_controllerMessage.text,
),
),
),
);

Here ScreenArguments is our own custom class which is used to send two parameters while navigating to SecondScreen.

ScreenArguments class will look like this

class ScreenArguments {
final String title;
final String message;
ScreenArguments(this.title, this.message);
}

So you can have your own custom object there. Now how will we receive it in the SecondScreen. For that we use the code like below in the build method of SecondScreen.

final ScreenArguments args = ModalRoute.of(context).settings.arguments;

Here args.title will get us the title parameter and args.message will get us the message parameter.


Navigate Using PushNamed

In this method, you need to register the screens up-front.
So we go to the main.dart and update our main Widget code like this.

class HomeApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
//home: FirstScreen(),
routes: {
FirstScreen.routeId: (context) => FirstScreen(),
SecondScreen.routeId: (context) => SecondScreen(),
},
initialRoute: FirstScreen.routeId,
);
}
}

Here FirstScreen.routeId is a static String declared in the FirstScreen Screen. It can be any meaningful value. Similarly for SecondScreen.

// FirstScreen
static String routeId = 'first_screen';
// SecondScreen
static String routeId = 'second_screen';

Once done we can navigate using the below method.

Navigator.pushNamed(
context,
SecondScreen.routeId,
arguments: ScreenArguments(
_controllerTitle.text,
_controllerMessage.text,
),
);

Listen to return values from Closing Screen

For Listening to the returning values from a Closing Screen, we need to pass parameters back in the pop method of the Navigator like this.

Navigator.pop(context, 'YOUR_VALUE_HERE');

Now to receive it. Call await on the Navigator.push or Navigator.pushNamed like below

final result = await Navigator.pushNamed(
context,
SecondScreen.routeId,
arguments: ScreenArguments(
_controllerTitle.text,
_controllerMessage.text,
),
);

and we will have the return value in the ‘result‘ variable here, and That’s it.

Don’t forget to watch this tutorial on Youtube.
Also Please Like, share, subscribe if you find the article and video useful.

  • Youtube Downloader
  • Register
  • Complete
  • Screen
  • Email
  • Video Tutorials


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK