下にスワイプして閉じる Swipe Down to Dismiss
全画面の写真を下へ払うと、写真が縮みながら離れていき、背景が透けて元の一覧に戻る。
本物の Flutter ウィジェットが動きます(初回は数秒かかります)
どんなもの?
写真アプリや SNS の画像ビューアで、×ボタンを探さなくても閉じられる操作です。
写真を GestureDetector の onVerticalDragUpdate で指に合わせて動かし、
ずらした量に応じて写真を縮め、黒い背景を薄くしていきます(後ろの一覧が見えてくる)。
離したとき、一定以上動いたか勢いよく払った(速度が大きい)なら閉じ、足りなければ元の位置へ戻します。
こんなときに
- 全画面の写真・動画ビューア
避けたい場面
- 中身を縦にスクロールする画面(スクロールと取り合いになる)
最小コード
GestureDetector(
onVerticalDragUpdate: (d) => drag.value += d.delta.dy,
onVerticalDragEnd: (d) {
final fast = (d.primaryVelocity ?? 0) > 700;
if (drag.value > 120 || fast) {
close();
} else {
drag.animateTo(0, curve: Curves.easeOutBack); // 元へ戻る
}
},
child: AnimatedBuilder(
animation: drag,
builder: (context, child) => Transform.translate(
offset: Offset(0, drag.value),
child: Transform.scale(scale: 1 - progress * 0.5, child: child),
),
child: photo,
),
)使うウィジェット
GestureDetector(onVerticalDrag)AnimationControllerTransform