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(マグレブ)て言うらしいですよーー
間違いありましたらコメントいただけますと!!!(マグレブの方も)