個人開発者が勉強がてらまとめているだけのサイトです

スライドして確定 Slide to Confirm

丸いつまみを右端まで指で滑らせると確定する。押し間違いが起きない、重い操作用のボタン。

別名
スワイプして確定スライドボタンスライドでロック解除スライド送金Swipe ButtonSlide to UnlockSlide Action
動き
つまみを右へ動かす端まで届くと確定途中で離すと戻る
作り方
自作 標準ウィジェットの組み合わせで自分で作ります

本物の Flutter ウィジェットが動きます(初回は数秒かかります)

別タブで大きく開く ↗

どんなもの?

送金・注文確定・配達完了など「うっかり押されたら困る」操作で使われます。タップでは確定しないのがポイントです。

つまみの位置を AnimationController の値として持ち、GestureDetector の onHorizontalDragUpdate で指の移動分だけ動かします。

指を離したとき、9割以上進んでいれば確定、足りなければ animateBack で元の位置へ戻します(Curves.easeOutBack で、ばねのように戻る)。

進むにつれて案内の文字を薄くすると、残りの距離が感覚で分かります。

こんなときに

  • 送金・注文確定など、取り消しにくく誤操作を防ぎたい操作

避けたい場面

  • 何度も繰り返す普通の操作(毎回スライドさせると面倒)

最小コード

GestureDetector(
  onHorizontalDragUpdate: (d) =>
      position.value = (position.value + d.delta.dx).clamp(0, max),
  onHorizontalDragEnd: (_) {
    if (position.value > max * 0.9) {
      position.animateTo(max);
      confirm();
    } else {
      position.animateBack(0, curve: Curves.easeOutBack); // 元へ戻る
    }
  },
  child: const CircleAvatar(child: Icon(Icons.arrow_forward)),
)

使うウィジェット

GestureDetectorAnimationControllerStackPositioned

似ているもの・一緒に見たいもの

触ってみる ↗
ボタン ローディングボタンLoading Button

押すとボタンが丸く縮んで中でくるくる回り、終わるとチェックマークに変わる。二度押しも防げる。

押すと丸く縮む
触ってみる ↗
ナビゲーション 戻る前の確認Confirm Before Leaving

入力の途中で戻ろうとすると、「変更を破棄しますか?」と確認が出て、うっかり消えるのを防ぐ。

戻ろうとすると止まる