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

ローディングボタン Loading Button

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

別名
送信中ボタンくるくるボタン処理中ボタンプログレスボタンProgress ButtonSubmit Button Animation
動き
押すと丸く縮む中でくるくるチェックに変わる
作り方
自作 標準ウィジェットの組み合わせで自分で作ります

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

別タブで大きく開く ↗

どんなもの?

通信を伴う送信ボタンで、「今処理している」「終わった」をボタンそのもので伝えます。

状態(待機・処理中・完了)を持ち、AnimatedContainer の幅を状態に応じて変えると、なめらかに縮んだり戻ったりします。

処理中は onPressed(onTap)を null にして押せなくし、二重送信を防ぎます。

中身は CircularProgressIndicator、終わったら Icons.check に差し替えます。

こんなときに

  • 送信・保存・ログインなど、数秒かかる通信のボタン

避けたい場面

  • 一瞬で終わる操作(くるくるが一瞬だけ出てちらつく)

最小コード

AnimatedContainer(
  duration: const Duration(milliseconds: 300),
  width: state == Load.idle ? 240 : 56, // 押すと丸く縮む
  height: 56,
  decoration: BoxDecoration(color: Colors.indigo, borderRadius: BorderRadius.circular(28)),
  child: InkWell(
    onTap: state == Load.idle ? submit : null, // 処理中は押せない
    child: Center(
      child: switch (state) {
        Load.idle => const Text('送信する'),
        Load.loading => const CircularProgressIndicator(),
        Load.done => const Icon(Icons.check),
      },
    ),
  ),
)

使うウィジェット

AnimatedContainerCircularProgressIndicator

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

触ってみる ↗
ボタン スライドして確定Slide to Confirm

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

つまみを右へ動かす
触ってみる ↗
ボタン いいねボタンLike Button Animation

ハートを押すと、ぽんっとふくらんで縮み、周りに小さな粒が飛び散る。数字も下から入れ替わる。

ふくらんで戻る