9
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Flutter】 全画面覆うようにローディングを表示する

Last updated at Posted at 2021-10-08

appBarも含めて処理中にローディングを回したい時の方法。
備忘録として残します。
処理中にappBarが押せたりすると、思わぬ不具合に繋がります。
showGeneralDialogを使うと全画面覆うようにローディングが表示されるので安心です!

※追記
routemasterを使うようになってから、popしても消えなくなってしまいました!!
Navigator.of(context, rootNavigator: true).pop();を使うことで解決しました😭
※さらに追記
routemasterを使う際は、そもそもshowGeneralDialogを使わないで、背景を半透明にするなど、ダイアログっぽいWidgetをルートにpushすれば通常通りにpopすることができました😅

// 全画面プログレスダイアログを表示する関数
void showProgressDialog(context) {
  showGeneralDialog(
    context: context,
    barrierDismissible: false,
    transitionDuration: Duration.zero, // これを入れると遅延を入れなくて
    barrierColor: Colors.black.withOpacity(0.5),
    pageBuilder: (BuildContext context, Animation animation,
        Animation secondaryAnimation) {
      return Center(
        child: CircularProgressIndicator(),
      );
    },
  );
}

/// 省略 ///

TextButton(
  onPressed: () async {
    showProgressDialog(context);
    await Future<dynamic>.delayed(Duration(seconds: 2));// dialogをawaitできないので、遅延させて調整。。他の方法知っている方いらっしゃいましたら教えてください!!

    // await 何かの処理

    // 処理が完了したらローディングを消す
    if (isCompleted) Navigator.of(context).pop(); // これだと消えない。。
      Navigator.of(context, rootNavigator: true).pop();

  },
  child: Text('登録する'),
)

参考にさせていただいたページ
https://cbtdev.net/flutter-progress-indicator/

最近ぐるぐる回るのじゃなくて、長いのをよく見かける今日この頃
リニアタイプっていうのね。。LinearProgressIndicator()

でもリニアモータカーはmaglev(マグレブ)て言うらしいですよーー

間違いありましたらコメントいただけますと!!!(マグレブの方も)

9
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?