MaterialPageRoute 和 PageRouteBuilder 之间的区别

iDe*_*ode 5 flutter

为了提供自定义动画,我可以扩展MaterialPageRoutePageRouteBuilder,它们似乎都做同样的工作。那么,两者有什么区别,我应该使用哪一种呢?

这是代码片段:

class HomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: ElevatedButton(
        onPressed: () => Navigator.push(context, Foo/BarRoute(Scaffold(appBar: AppBar()))),
        child: Text('Navigate'),
      ),
    );
  }
}

class FooRoute<T> extends MaterialPageRoute<T> {
  final Widget page;
  FooRoute(this.page) : super(builder: (_) => page);

  @override
  Widget buildTransitions(_, animation, __, ___) {
    return FadeTransition(opacity: animation, child: page);
  }
}

class BarRoute<T> extends PageRouteBuilder<T> {
  final Widget page;
  BarRoute(this.page) : super(pageBuilder: (_, __, ___) => page);

  @override
  Widget buildTransitions(_, animation, __, ___) {
    return FadeTransition(opacity: animation, child: page);
  }
}
Run Code Online (Sandbox Code Playgroud)

我看到的唯一区别是在 iOS 设备上运行应用程序时MaterialPageRoute尝试在后台插入一些 iOS 类型的滑动动画。