56
33

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Flutter AndroidでもiOS風の画面遷移とスワイプで戻るを有効にする

Last updated at Posted at 2020-01-29

PageTransitionsTheme

ThemeData.pageTransitionsTheme を設定することで、画面遷移のトランジション(アニメーション)を Theme 経由で制御できる。

デフォルトではPageTransitionsTheme というクラスが使われ、内部では以下のようなMapになっており、Androidでは FadeUpwardsPageTransitionsBuilder が使われる。

<TargetPlatform, PageTransitionsBuilder>{
  TargetPlatform.android: FadeUpwardsPageTransitionsBuilder(),
  TargetPlatform.iOS: CupertinoPageTransitionsBuilder(),
  TargetPlatform.macOS: CupertinoPageTransitionsBuilder(),
};

コンストラクタでプラットフォームごとの PageTransitionsBuilder の対応Mapを渡せばカスタマイズできる。もし AndroidでもiOS風の遷移をさせたければ CupertinoPageTransitionsBuilder を使う。

MaterialApp(
  theme: ThemeData(
    pageTransitionsTheme: const PageTransitionsTheme(
      builders: <TargetPlatform, PageTransitionsBuilder>{
        TargetPlatform.android: CupertinoPageTransitionsBuilder(), // iOS風
        TargetPlatform.iOS: CupertinoPageTransitionsBuilder(),
        TargetPlatform.macOS: CupertinoPageTransitionsBuilder(),
      },
    ),
  ),
  home: const YourHomePage(),
);

あるいは PageTransitionsTheme を継承して buildTransitions をoverrideしてしまう方法もある。

class MyPageTransitionsTheme extends PageTransitionsTheme {
  const MyPageTransitionsTheme();

  // すべてこれを使う
  static const PageTransitionsBuilder builder = CupertinoPageTransitionsBuilder();

  @override
  Widget buildTransitions<T>(
    PageRoute<T> route,
    BuildContext context,
    Animation<double> animation,
    Animation<double> secondaryAnimation,
    Widget child,
  ) {
    return builder.buildTransitions<T>(route, context, animation, secondaryAnimation, child);
  }
}

MaterialPageRoute

なお PageTransitionsTheme を参照してくれるのは MaterialPageRoute なので、遷移時は MaterialPageRoute を使う。

Navigator.of(context).push(MaterialPageRoute<void>(
  builder: (BuildContext context) => const YourSecondPage(),
));

他のPageTransitionsBuilder

Flutterに最初から用意されている PageTransitionsBuilder

  • FadeUpwardsPageTransitionsBuilder: FlutterにおけるAndroidの標準
  • CupertinoPageTransitionsBuilder: iOS 風
  • OpenUpwardsPageTransitionsBuilder: Android P 風
  • ZoomPageTransitionsBuilder: Android 10 風
56
33
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
56
33

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?