長押しで確定 Hold to Confirm
ボタンを押し続けると色が溜まっていき、端まで溜まると実行される。途中で離すと溜めた分が抜ける。
本物の Flutter ウィジェットが動きます(初回は数秒かかります)
どんなもの?
削除やリセットなど取り消せない操作を、うっかり押しても実行されないようにする形です。
ゲームの「長押しでスキップ」もこの仲間です。
onTapDown で AnimationController を forward、onTapUp と onTapCancel で reverse し、
完了(AnimationStatus.completed)したら実行します。
溜まり具合は FractionallySizedBox の widthFactor にアニメーションの値を渡して見せます。
こんなときに
- 削除・リセットなど、確認ダイアログを出すほどではないが誤操作は防ぎたい
避けたい場面
- よく使う普通の操作(毎回待たされて煩わしい)
最小コード
GestureDetector(
onTapDown: (_) => hold.forward(), // 押している間、溜まる
onTapUp: (_) => hold.reverse(), // 途中で離すと抜ける
onTapCancel: () => hold.reverse(),
child: AnimatedBuilder(
animation: hold,
builder: (context, _) => Stack(children: [
FractionallySizedBox(
widthFactor: hold.value,
child: const ColoredBox(color: Colors.red),
),
const Center(child: Text('長押しで削除')),
]),
),
)
// hold.addStatusListener((s) { if (s == AnimationStatus.completed) delete(); });使うウィジェット
GestureDetector(onTapDown/onTapUp)AnimationControllerFractionallySizedBox