PageRouteBuilder
前面我们介绍的所有路由都是MaterialPageRoute。但这并不能满足项目中的实际需求,有时候我们也需要修改路由默认的转场效果,这个时候就需要自定义路由,要用到另一个类,它就是PageRouteBuilder,首先我们来看看它的源码:
PageRouteBuilder({
RouteSettings settings,
@required this.pageBuilder,
this.transitionsBuilder = _defaultTransitionsBuilder,
this.transitionDuration = const Duration(milliseconds: 300),
this.opaque = true,
this.barrierDismissible = false,
this.barrierColor,
this.barrierLabel,
this.maintainState = true,
bool fullscreenDialog = false,
}) : assert(pageBuilder != null),
assert(transitionsBuilder != null),
assert(opaque != null),
assert(barrierDismissible != null),
assert(maintainState != null),
assert(fullscreenDialog != null),
super(settings: settings, fullscreenDialog: fullscreenDialog);
属性讲解
我们来看一下PageRouteBuilder源码中几个重要的属性,如下图所示:
属性 | 取值 |
---|---|
Opaque | 是否遮挡整个屏幕 |
transitionsBuilder | 用于自定义的转场效果 |
pageBuilder | 用来创建所要跳转到的页面 |
transitionDuration | 转场动画的持续时间 |
自定义路由转场效果
介绍完几个重要的属性,我们就直接来实战把,这里我们将通过一个自定义的Widget和PageRouteBuild,实现一个简单的Hero效果的路由转场,首先,我们定义一个方法,用于路由的切换,代码如下:
_customToButton(Widget page){
Navigator.of(context).push(
PageRouteBuilder<Null>(
pageBuilder: (BuildContext context,Animation<double> anim1,Animation<double> anim2){
<