Navigation
How do I navigate between pages?
In Xamarin.Forms, you navigate between pages normally through a CarouselPage. In Flutter, you can use a NavigationPage
that manages the stack of pages to display.
Flutter has a similar implementation, using a Navigator
and Routes
. A Route
is an abstraction for a Page
of an app, and a Navigator
is a widget that manages routes.
A route roughly maps to a Page
. The navigator works in a similar way to the Xamarin.Forms NavigationPage
, in that it can push()
and pop()
routes depending on whether you want to navigate to, or back from, a view.
To navigate between pages, you have a couple options:
The following example builds a Map.
void main() {
runApp(new MaterialApp(
home: new MyAppHome(), // becomes the route named '/'
routes: <String, WidgetBuilder> {
'/a': (BuildContext context) => new MyPage(title: 'page A'),
'/b': (BuildContext context) => new MyPage(title: 'page B'),
'/c': (BuildContext context) => new MyPage(title: 'page C'),
},
));
}
Navigate to a route by pushing its name to the Navigator
.
Navigator.of(context).pushNamed('/b');
The Navigator is a stack that manages your app’s routes. Pushing a route to the stack moves to that route. Popping a route from the stack, returns to the previous route. This is done by awaiting on the Future
returned by push()
.
Async
/await
is very similar to the .NET implementation and is explained in more detail in Async UI.
For example, to start a location
route that lets the user select their location, you might do the following:
Map coordinates = await Navigator.of(context).pushNamed('/location');
And then, inside your ‘location’ route, once the user has selected their location, pop the stack with the result:
Navigator.of(context).pop({"lat":43.821757,"long":-79.226392});
How do I navigate to another app?
In Xamarin.Forms, to send the user to another application, you use a specific URI scheme, using Device.OpenUrl("mailto://")
To implement this functionality in Flutter, create a native platform integration, or use an existing plugin, such as url_launcher
, available with many other packages on pub.dev.