スライドして確定 Slide to Confirm
丸いつまみを右端まで指で滑らせると確定する。押し間違いが起きない、重い操作用のボタン。
本物の 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