[TOC]
导航
1. 我怎么在不同页面之间跳转?
在 iOS 中,你可以使用管理了 view controller 栈的 UINavigationController
来在不同的 viewcontroller
之间跳转。
Flutter 也有类似的实现,使用了 Navigator
和 Routes
。一个路由是 App 中“屏幕”或“页面”的抽象,而一个 Navigator
是管理多个路由的 widget 。你可以粗略地把一个路由对应到一个 UIViewController
。Navigator
的工作原理和 iOS 中 UINavigationController
非常相似,当你想跳转到新页面或者从新页面返回时,它可以 push()
和 pop()
路由。
在页面之间跳转,你有几个选择:
- 具体指定一个由路由名构成的 Map。(MaterialApp)
- 直接跳转到一个路由。(WidgetApp)
下面是构建一个 Map 的例子:
void main() {
runApp(MaterialApp(
home: MyAppHome(), // becomes the route named '/'
routes: <String, WidgetBuilder> {
'/a': (BuildContext context) => MyPage(title: 'page A'),
'/b': (BuildContext context) => MyPage(title: 'page B'),
'/c': (BuildContext context) => MyPage(title: 'page C'),
},
));
}
通过把路由的名字 push
给一个 Navigator
来跳转:
Navigator.of(context).pushNamed('/b');
Navigator
类不仅用来处理 Flutter
中的路由,还被用来获取你刚 push
到栈中的路由返回的结果。通过 await
等待路由返回的结果来达到这点。
举个例子,要跳转到“位置”路由来让用户选择一个地点,你可能要这么做:
Map coordinates = await Navigator.of(context).pushNamed('/location');
之后,在 location
路由中,一旦用户选择了地点,携带结果一起 pop()
出栈:
Navigator.of(context).pop({"lat":43.821757,"long":-79.226392});
2. 我怎么跳转到其他 App?
在 iOS 中,要跳转到其他 App,你需要一个特定的 URL Scheme
。对系统级别的 App 来说,这个 scheme 取决于 App。为了在 Flutter 中实现这个功能,你可以创建一个原生平台的整合层,或者使用现有的 plugin,例如 url_launcher。
网友评论