首页 > 解决方案 > 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 类型的滑动动画。

标签: flutter

解决方案


推荐阅读