flutter - MaterialPageRoute 和 PageRouteBuilder 的区别
问题描述
为了提供自定义动画,我可以扩展MaterialPageRoute
,或者PageRouteBuilder
它们似乎都做同样的工作。那么,这两者有什么区别,我应该使用哪一个呢?
这是代码片段:
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);
}
}
我看到的唯一区别是在 iOS 设备上运行应用程序时MaterialPageRoute
尝试在后台插入一些 iOS 类型的滑动动画。
解决方案
推荐阅读
- postgresql - 函数 crosstab(unknown, unknown) 不存在,但确实存在
- android - 将数据添加到实时数据库
- makefile - Makefile FILES 命令不会执行
- python - 如何使用 PySide2 Python 后端在 QML 中嵌入 PyQtGraph?
- php - 如何在 Heroku 免费计划上部署 laravel-websockets 服务器?
- angular - 为什么不调用我的 Angular 前端和 springboot 后端
- android - this.getPreferences() 上的 NullPointerException
- php - 在 Web 应用程序上下文中使用 mysql INTO OUTFILE
- amazon-web-services - AWS Lightsail 终端受阻
- bluetooth - 低功耗蓝牙配对与非配对通信