颤动:动画过渡到命名路线

lhk*_*lhk 23 flutter flutter-animation

当我使用 时Navigator.pushNamed(context, "/someRoute");,有一个最小动画从屏幕底部滑入新路线(在 Android 上,在 iOS 上可能看起来不同)。

如何向此过渡添加自定义动画?

我找到了这篇文章,其中有一些非常简洁的未命名路由示例代码。他们实现自己的类继承自PageRouteBuilder并可以这样使用:Navigator.push(context, SlideRightRoute(page: Screen2()))。但是 aPageRouteBuilder不是 Widget 并且不能在MaterialApp. 所以我不知道如何将它应用于命名路由。

Cop*_*oad 38

您需要onGenerateRoute在您的MaterialApp小部件中使用。

onGenerateRoute: (settings) {
  if (settings.name == "/someRoute") {
    return PageRouteBuilder(
      settings: settings, // Pass this to make popUntil(), pushNamedAndRemoveUntil(), works
      pageBuilder: (_, __, ___) => SomePage(),
      transitionsBuilder: (_, a, __, c) => FadeTransition(opacity: a, child: c)
    );
  }
  // Unknown route
  return MaterialPageRoute(builder: (_) => UnknownPage());
},
Run Code Online (Sandbox Code Playgroud)

  • 另外,如果您在“MaterialApp”上设置“routes”,它似乎会忽略“onGenerateRoute” (12认同)
  • 这对我有用。我唯一要添加的是“settings”需要传递给“PageRouteBuilder”构造函数,以便包含路由参数。这是我最终得到的结果: ``` onGenerateRoute: (settings) => PageRouteBuilder( pageBuilder: (context, _, __) => paths[settings.name](context), settings: settings,transitionsBuilder: (_,动画1,__,子)=> FadeTransition(不透明度:动画1,子:子),),``` (2认同)
  • 如果我使用它,顶部的 url 似乎不再显示新的路由名称。如果我想说使用pushNamedAndRemoveUntil(),这不是一个问题吗? (2认同)
  • 这是关于如何设置最小页面转换的最简单且最好的答案。简单就是好的。谢谢。 (2认同)