/* * This file is part of Stack Wallet. * * Copyright (c) 2023 Cypher Stack * All Rights Reserved. * The code is distributed under GPLv3 license, see LICENSE file for details. * Generated by Cypher Stack on 2023-05-26 * */ import 'dart:async'; import 'package:flutter/material.dart'; import '../themes/stack_colors.dart'; import 'logger.dart'; import '../widgets/custom_loading_overlay.dart'; Future showLoading({ required Future whileFuture, required BuildContext context, required String message, String? subMessage, bool rootNavigator = false, bool opaqueBG = false, void Function(Exception)? onException, }) async { unawaited( showDialog( context: context, barrierDismissible: false, builder: (_) => WillPopScope( onWillPop: () async => false, child: Container( color: Theme.of(context) .extension()! .overlay .withOpacity(opaqueBG ? 1.0 : 0.6), child: CustomLoadingOverlay( message: message, subMessage: subMessage, eventBus: null, ), ), ), ), ); Exception? ex; T? result; try { result = await whileFuture; } catch (e, s) { Logging.instance.log( "showLoading caught: $e\n$s", level: LogLevel.Warning, ); ex = e is Exception ? e : Exception(e.toString()); } if (context.mounted) { Navigator.of(context, rootNavigator: rootNavigator).pop(); if (ex != null) { onException?.call(ex); } } return result; }