导航
导航
如何在页面之间导航?
在 Xamarin.Forms 中,在页面之间导航通常会通过一个 CarouselPage。在 Flutter 中,你可以使用一个 NavigationPage 来管理页面栈去显示。
Flutter 也有类似的实现,使用了一个导航器(Navigator)和路由(Routes)。一个路由是一个应用程序里一个页面的抽象,而一个导航器是一个管理路由的 widget。
一个路由大致上映射到一个页面。导航器以类似 Xamarin.Forms NavigationPage 的方式工作,在里面可以 push() 和 pop() 路由,依赖于你是否想导航到一个视图,或者从它返回。
在页面间导航,你有几个选择:
- Specify a
Mapof route names. (MaterialApp) -
Directly navigate to a route. (WidgetApp)
-
指定路由名称的一个映射。(MaterialApp)
-
直接导航到一个路由。(WidgetApp)
接下来构建一个映射的示例。
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'),
},
));
}
通过推入一个路由的名称到导航器来导航到这个路由。
Navigator.of(context).pushNamed('/b');
导航器是一个管理你的应用程序的路由的堆栈。把一个路由推入堆栈可以移动到这个路由,而从堆栈弹出一个路由可以返回到前一个路由。这是通过等待被 push() 返回的 未来(Future) 来完成的。
Async/await 与 .NET 的实现非常类似,并且是在 Async UI中有更详尽的解释。
举个例子,要开始一个让用户选择他们的定位的 定位(location) 路由,你需要做以下步骤:
Map coordinates = await Navigator.of(context).pushNamed('/location');
然后,在你的“定位”路由里,一旦用户选择他们的定位,使用结果来 pop() 这个堆栈。
Navigator.of(context).pop({"lat":43.821757,"long":-79.226392});
如何导航到其它应用程序?
在 Xamarin.Forms 中,需要用指定的 URI 协议并使用 Device.OpenUrl("mailto://") 来传送用户到其它应用程序。
为了在 Flutter 中实现这个功能,需要创建一个原生平台集成,或者使用 已有的插件,比如 url_launcher,可与在 [pub.dev 上的许多其他包一起使用。
