Flutter go_routerに画面遷移時のアニメーションを定義

投稿者:

– 左から右にスライド遷移する
– 戻る動作(pop)にも自然なスライド

Thank you for reading this post, don't forget to subscribe!
class TopMapRoute extends GoRouteData {
  const TopMapRoute();

  static const String path = '/top_map';

  @override
  Page buildPage(BuildContext context, GoRouterState state) {
    return CustomTransitionPage(
      key: state.pageKey,
      child: TopMapScreen(),
      transitionsBuilder: (context, animation, secondaryAnimation, child) {
        // 画面遷移(push)時:右 → 左にスライド
        final enterTween = Tween(
          begin: const Offset(1, 0), // 新しい画面が右から出てくる
          end: Offset.zero,
        ).chain(CurveTween(curve: Curves.easeOutCubic));

        // 戻る(pop)時:左 → 右にスライドして前の画面が戻る
        final exitTween = Tween(
          begin: Offset.zero,
          end: const Offset(-1, 0),
        ).chain(CurveTween(curve: Curves.easeOutCubic));

        return SlideTransition(
          position: animation.drive(enterTween),
          child: SlideTransition(
            position: secondaryAnimation.drive(exitTween),
            child: child,
          ),
        );
      },
      transitionDuration: const Duration(milliseconds: 350),
    );
  }
}

build() は書かなくてOK
buildPage() をオーバーライドすると
build() の代わりにそのページ構築ロジックが使われる