Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 导航到其他屏幕时如何使用PageTransitionsBuilder?_Flutter - Fatal编程技术网

Flutter 导航到其他屏幕时如何使用PageTransitionsBuilder?

Flutter 导航到其他屏幕时如何使用PageTransitionsBuilder?,flutter,Flutter,我的理解是,我只能在主题内设置PageTransitionsBuilder,有没有办法在Navigator内使用它 您可以根据需要在应用程序中更改毫秒时间。最简单的解决方案是自定义PageRouteBuilder: 您说您想导航到另一个屏幕并面临问题,您还添加了错误转换builder:builder,//error。如果您能仔细阅读问题,请解释我在这里错过的内容,我不是要RouteTransitionsBuilder,而是PageTransitionsBuilder。两者之间有区别。我想在Nav

我的理解是,我只能在主题内设置PageTransitionsBuilder,有没有办法在Navigator内使用它


您可以根据需要在应用程序中更改毫秒时间。

最简单的解决方案是自定义PageRouteBuilder:


您说您想导航到另一个屏幕并面临问题,您还添加了错误转换builder:builder,//error。如果您能仔细阅读问题,请解释我在这里错过的内容,我不是要RouteTransitionsBuilder,而是PageTransitionsBuilder。两者之间有区别。我想在Navigator中使用PageTransitionsBuilder,如果可能的话?。您可能想看看帖子上@pskink的评论。PageTransitionsBuilder仅由PageTransitionsTheme使用,如果您想在PageRouteBuilder中使用它,您需要编写一些小的生成器wrapper@pskink明白了,先生,你能分享一些链接或文档吗,在哪里我可以找到如何包装它?transitionsBuilder:ctx,a1,a2,child=>builder.buildTransitionsroute,ctx,a1,a2,child这只是一个解决方法-相反,你应该编写一个扩展PageRouteBuilder或PageRoute或ModalRoute的类-无论如何,请随意编写一个自我回答-@是的,我知道那些扩展PageRoute、PageRouteBuilder甚至ModalRoute的方法,但是那样的话我必须自己提供动画,但是这次我想使用团队提供的内置动画,所以我想使用其中的一种。我刚刚注意到一件事,我需要提供一个到构造函数的路由,因此在一天结束时,我需要一个扩展PageRoute和前面提到的其他类的类,似乎没有办法做到这一点。
final builder = OpenUpwardsPageTransitionsBuilder();

Navigator.push(
  context,
  PageRouteBuilder(
    pageBuilder: (_, __, ___) => Page2(),
    transitionsBuilder: builder, // error
  ),
);
Navigator.push(
  context,
  PageRouteBuilder(
    pageBuilder: (ctx, a1, a2) => Screen2(),
    transitionsBuilder: (ctx, anim, a2, child) => FadeTransition(opacity: anim, child: child),
    transitionDuration: Duration(milliseconds: 3000),
  ),
);
class MyPageRouteBuilder<T> extends PageRouteBuilder<T> {
  final PageTransitionsBuilder pageTransitionsBuilder;

  MyPageRouteBuilder({
    @required RoutePageBuilder pageBuilder,
    @required this.pageTransitionsBuilder,
  }) : assert(pageTransitionsBuilder != null), super(pageBuilder: pageBuilder);

  @override
  Widget buildTransitions(BuildContext context, Animation<double> animation, Animation<double> secondaryAnimation, Widget child) {
    return pageTransitionsBuilder.buildTransitions(this, context, animation, secondaryAnimation, child);
  }
}
Navigator.of(context).push(
  MyPageRouteBuilder(
    pageBuilder: (ctx, a1, a2) => Page2(),
    pageTransitionsBuilder: OpenUpwardsPageTransitionsBuilder(),
  )
);