diff --git a/lib/main.dart b/lib/main.dart index 35bbc4a60b0409e860459f48e39e67bc903077db..efc831de6dfbf0915bf3ba6fb775f76ede4ae39f 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -363,6 +363,7 @@ class _GinkgoAppState extends State<GinkgoApp> { useMaterial3: true, colorScheme: darkColorScheme), navigatorKey: GinkgoApp.navigatorKey, + scaffoldMessengerKey: globalMessengerKey, /// Theme stuff themeMode: context.watch<ThemeCubit>().state.themeMode, diff --git a/lib/ui/ui_helpers.dart b/lib/ui/ui_helpers.dart index ccf8fb9ca46803d370e367bbeac309239c52ae1b..41f43c088cff1c573151e3e2666d9931d1876fe4 100644 --- a/lib/ui/ui_helpers.dart +++ b/lib/ui/ui_helpers.dart @@ -359,3 +359,6 @@ Color notSelectedPatternLock(BuildContext context) => Colors.amber; String ginkgoNetIcon = 'https://git.duniter.org/vjrj/ginkgo/-/raw/master/web/icons/favicon-32x32.png'; + +final GlobalKey<ScaffoldMessengerState> globalMessengerKey = + GlobalKey<ScaffoldMessengerState>(); diff --git a/lib/ui/widgets/fifth_screen/import_dialog.dart b/lib/ui/widgets/fifth_screen/import_dialog.dart index 70f50dff1ef96fbeaf371b27086f4fb52dbf57db..acf27fabba182374a3117c16f005e7772b824f24 100644 --- a/lib/ui/widgets/fifth_screen/import_dialog.dart +++ b/lib/ui/widgets/fifth_screen/import_dialog.dart @@ -30,9 +30,9 @@ class _ImportDialogState extends State<ImportDialog> { final GlobalKey<ScaffoldState> scaffoldKey = GlobalKey<ScaffoldState>(); @override - Widget build(BuildContext context) { + Widget build(BuildContext c) { return FutureBuilder<String>( - future: kIsWeb ? _importWalletWeb() : _importWallet(context), + future: kIsWeb ? _importWalletWeb(c) : _importWallet(c), builder: (BuildContext context, AsyncSnapshot<String> snapshot) { if (snapshot.hasData && snapshot.data != null && @@ -42,7 +42,6 @@ class _ImportDialogState extends State<ImportDialog> { jsonDecode(keyEncString) as Map<String, dynamic>; final String keyEncrypted = keyJson['key'] as String; // final Uint8List keyBase64 = base64Decode(keyEncrypted); - return Scaffold( key: scaffoldKey, appBar: AppBar( @@ -87,12 +86,23 @@ class _ImportDialogState extends State<ImportDialog> { } else { importWalletToSharedPrefs(keys); } + if (!mounted) { + return; + } + c.replaceSnackbar( + content: Text( + tr('wallet_imported'), + style: const TextStyle(color: Colors.white), + ), + ); + // ok, fetch the transactions & balance + // fetchTransactions(context); } catch (e, stacktrace) { logger('Error importing wallet: $e'); if (!mounted) { return; } - context.replaceSnackbar( + c.replaceSnackbar( content: Text( tr('error_importing_wallet'), style: const TextStyle(color: Colors.red), @@ -102,17 +112,6 @@ class _ImportDialogState extends State<ImportDialog> { stackTrace: stacktrace); return; } - if (!mounted) { - return; - } - context.replaceSnackbar( - content: Text( - tr('wallet_imported'), - style: const TextStyle(color: Colors.white), - ), - ); - // ok, fetch the transactions & balance - fetchTransactions(context); } if (!mounted) { return; @@ -209,7 +208,7 @@ class _ImportDialogState extends State<ImportDialog> { } } - Future<String> _importWalletWeb() async { + Future<String> _importWalletWeb(BuildContext context) async { final Completer<String> completer = Completer<String>(); final html.InputElement input = html.InputElement()..type = 'file'; diff --git a/lib/ui/widgets/fifth_screen/pattern_util.dart b/lib/ui/widgets/fifth_screen/pattern_util.dart index 9fae1f52c9caf34f5efca8600ebd9a41171c4e2c..5c7d69847a05c69167bf118405c85e89549ce973 100644 --- a/lib/ui/widgets/fifth_screen/pattern_util.dart +++ b/lib/ui/widgets/fifth_screen/pattern_util.dart @@ -1,12 +1,11 @@ import 'package:flutter/material.dart'; +import '../../ui_helpers.dart'; + extension BuildContextX on BuildContext { - void replaceSnackbar({ - required Widget content, - }) { - final ScaffoldMessengerState scaffoldMessenger = ScaffoldMessenger.of(this); - scaffoldMessenger.removeCurrentSnackBar(); - scaffoldMessenger.showSnackBar( + void replaceSnackbar({required Widget content}) { + globalMessengerKey.currentState!.removeCurrentSnackBar(); + globalMessengerKey.currentState!.showSnackBar( SnackBar(content: content), ); }