はじめに
今回のモチベーションとしては漫画のビューワーなどでフルスクリーン時にAppBarやNavigationBarの表示非表示を行いたいというものです。
実装
今回の例としてはAppBarをAnimation付きでハンドリングするためのものを紹介します。
class AnimationAppBar extends StatelessWidget implements PreferredSizeWidget { const AnimationAppBar({ Key? key, required this.child, required this.controller, required this.visible, required this.beginOffset, required this.endOffset, }) : super(key: key); final PreferredSizeWidget child; final AnimationController controller; final bool visible; final Offset beginOffset; final Offset endOffset; @override Size get preferredSize => child.preferredSize; @override Widget build(BuildContext context) { visible ? controller.reverse() : controller.forward(); return SlideTransition( position: Tween<Offset>(begin: beginOffset, end: endOffset).animate( CurvedAnimation(parent: controller, curve: Curves.fastOutSlowIn), ), child: child, ); } }
SlideTransition
を使用します。プロパティの position
にどのようにアニメーションするかを入れます。
そして、それぞれ使いやすいように child
を引数に取ることによって使う側でAppBarのUIを決定することができます。
AnimationController
を表示非表示のフラグに合わせて controller.reverse()
, controller.forward()
をします。今回のOffsetとしては begin
は controller.reverse()
に合わせて Offset.zero
を指定し、 end
は OffSet(0, -1)
を指定しました。
AppBar以外でも使うために
今回はAppBar用のものを紹介しましたが、他でも使うためには PreferredSizeWidget
をimplementsしないようにし、 child
の型を Widget
に変更しましょう。
最後に
エキサイトではフロントエンジニア、バックエンドエンジニア、アプリエンジニアを随時募集しております。募集にはありませんが、長期インターンも歓迎していますので、興味があれば連絡いただければと思います。
カジュアル面談はこちらになります! meety.net
募集職種一覧はこちらになります!(カジュアルからもOK) www.wantedly.com