命名路线的动画

Bac*_*ash 6 animation android routes flutter

PageRoute在 Flutter 中,我们可以通过扩展(或使用扩展它的类)来自定义视图更改动画。

MaterialApplication例如,我正在使用这种方式将动画更改为“滑动” CupertinoPageRoute

Navigator.of(context).pushReplacement(
  CupertinoPageRoute(builder: (context) => Calendar()),
);
Run Code Online (Sandbox Code Playgroud)

现在我想通过使用main.dart文件中定义的命名视图来更改它:

return MaterialApp(
  title: 'Demo',
  theme: myTheme, // => Theme.of(context).copyWith(...)
  initialRoute: '/',
  routes: {
    '/': (context) => Login(),
    '/calendar': (context) => Calendar(),
  }
);
Run Code Online (Sandbox Code Playgroud)

这样我就可以打电话

Navigator.of(context).pushReplacementNamed('/calendar');
Run Code Online (Sandbox Code Playgroud)

IMO 更清晰且与视图无关。

这种方法的问题是我无法定义 a PageRoute,因此我无法自定义视图更改动画。

有没有办法做到这一点?

Bac*_*ash 6

我采纳了凯莫林的建议,并以类似的方式解决了这个问题,但使用了地图。

我“提取”该routes对象并将其放在外面MaterialApp

var routes = {
  '/': (context) => Login(),
  '/calendar': (context) => Calendar()
};
Run Code Online (Sandbox Code Playgroud)

然后我在里面使用了它onGenerateRoute

Widget build(BuildContext context) {
  var routes = {
    '/': (context) => Login(),
    '/calendar': (context) => Calendar()
  };

  return MaterialApp(
    title: 'Demo',
    theme: myTheme,
    initialRoute: '/',
    onGenerateRoute: (settings) {
      return CupertinoPageRoute(builder: (context) => routes[settings.name](context));
    }
  );
}
Run Code Online (Sandbox Code Playgroud)