前言
写了这么多文章,有翻译文档的,有自己理解的,也不知道到底是怎么样的风格更能让人接受,希望大家能给点意见或建议。
正文
一里面已经把“页面跳转”的操作基本上都说完了,那当一个页面打开后是需要一些返回信息的时候应该怎么做呢?还是继续看原文吧
Routes can return a value 们可以返回一个值
当一个route
加载到页面并需要返回一个值的时候,这个值会在pop
方法返回
Navigator
的push
方法会返回一个Future
,这个东西可以在dart
教程里面找到。这个Future
会在route
被pop
的时候处理,而这个Future
的值就是pop
方法里的result
参数。
比如,当我们想在用户点击ok
的时候去确认一个操作,这个时候我们可以await
这个push
的结果。await
的用法也可以在dart
的教程里找到。
bool value = await Navigator.push(context, new MaterialPageRoute<bool>(
builder: (BuildContext context) {
return new Center(
child: new GestureDetector(
child: new Text('OK'),
onTap: () { Navigator.pop(context, true); }
),
);
}
));
上面的代码,如果用户按了ok
键,则返回的值是true,如果用户是按的返回键,则返回值是null
当一个route
被用来返回一个值的时候,这个route
的参数类型必须和结果返回的类型一致,这就是为什么我们用MaterialPageRoute<bool>
而不用MaterialPageRoute<void>
或直接用MaterialPageRoute
。(如果你就不想指定返回类型,也是可以的)
Popup routes “弹出route”
Custom routes 自定义route
你可以创建任何一个route
的子类,并控制他们的动画、颜色、行为等等。PageRouteBuilder
类用各种回调来控制这些,下面的例子是一个页面以旋转的方式来显示和隐藏。这个route
不会让整个屏幕变灰,因为他指定了opaque:false
:
Navigator.push(context, new PageRouteBuilder(
opaque: false,
pageBuilder: (BuildContext context, _, __) {
return new Center(child: new Text('My PageRoute'));
},
transitionsBuilder: (___, Animation<double> animation, ____, Widget child) {
return new FadeTransition(
opacity: animation,
child: new RotationTransition(
turns: new Tween<double>(begin: 0.5, end: 1.0).animate(animation),
child: child,
),
);
}
));