diff --git a/lib/pages/bootstrap/bootstrap_dialog.dart b/lib/pages/bootstrap/bootstrap_dialog.dart index 89659ec7c..19ddfb1e8 100644 --- a/lib/pages/bootstrap/bootstrap_dialog.dart +++ b/lib/pages/bootstrap/bootstrap_dialog.dart @@ -371,6 +371,7 @@ class BootstrapDialogState extends State { if (consent != OkCancelResult.ok) return; final req = await showFutureLoadingDialog( context: context, + delay: false, future: () async { await widget.client.updateUserDeviceKeys(); return widget.client diff --git a/lib/pages/device_settings/device_settings.dart b/lib/pages/device_settings/device_settings.dart index 5d9b1ce39..7d863ef72 100644 --- a/lib/pages/device_settings/device_settings.dart +++ b/lib/pages/device_settings/device_settings.dart @@ -67,6 +67,7 @@ class DevicesSettingsController extends State { await showFutureLoadingDialog( context: context, + delay: false, future: () => matrix.client.uiaRequestBackground( (auth) => matrix.client.deleteDevices( deviceIds, diff --git a/lib/pages/settings_3pid/settings_3pid.dart b/lib/pages/settings_3pid/settings_3pid.dart index 6b333f088..d73814608 100644 --- a/lib/pages/settings_3pid/settings_3pid.dart +++ b/lib/pages/settings_3pid/settings_3pid.dart @@ -53,6 +53,7 @@ class Settings3PidController extends State { if (ok != OkCancelResult.ok) return; final success = await showFutureLoadingDialog( context: context, + delay: false, future: () => Matrix.of(context).client.uiaRequestBackground( (auth) => Matrix.of(context).client.add3PID( clientSecret, diff --git a/lib/widgets/future_loading_dialog.dart b/lib/widgets/future_loading_dialog.dart index 3df0cf8c0..11b867dbf 100644 --- a/lib/widgets/future_loading_dialog.dart +++ b/lib/widgets/future_loading_dialog.dart @@ -19,20 +19,23 @@ Future> showFutureLoadingDialog({ String? backLabel, String Function(dynamic exception)? onError, bool barrierDismissible = false, + bool delay = true, }) async { final futureExec = future(); final resultFuture = ResultFuture(futureExec); - var i = 3; - do { - final result = resultFuture.result; - if (result != null) { - if (result.isError) break; - return result; + if (delay) { + var i = 3; + while (i > 0) { + final result = resultFuture.result; + if (result != null) { + if (result.isError) break; + return result; + } + await Future.delayed(const Duration(milliseconds: 100)); + i--; } - await Future.delayed(const Duration(milliseconds: 100)); - i--; - } while (i > 0); + } final result = await showAdaptiveDialog>( context: context,