From ae34d4d5c6ff1141b62b4ec94b0193d9043afe0a Mon Sep 17 00:00:00 2001
From: vjrj <vjrj@comunes.org>
Date: Thu, 20 Apr 2023 20:23:36 +0200
Subject: [PATCH] Wallet import fix

---
 .../widgets/fifth_screen/import_dialog.dart   | 51 ++++++++++++++++---
 1 file changed, 43 insertions(+), 8 deletions(-)

diff --git a/lib/ui/widgets/fifth_screen/import_dialog.dart b/lib/ui/widgets/fifth_screen/import_dialog.dart
index 7065e5d1..70f50dff 100644
--- a/lib/ui/widgets/fifth_screen/import_dialog.dart
+++ b/lib/ui/widgets/fifth_screen/import_dialog.dart
@@ -73,14 +73,35 @@ class _ImportDialogState extends State<ImportDialog> {
                                   keyEncrypted, pattern.join());
                           final bool? confirm = await confirmImport(context);
                           if (confirm != null && confirm) {
-                            /* SharedPreferencesHelper().addCesiumCard(
-                                SharedPreferencesHelper().buildCesiumCard(
-                                    pubKey: keys['pub'] as String,
-                                    seed: keys['seed'] as String));*/
-                            SharedPreferencesHelper().setDefaultWallet(
-                                SharedPreferencesHelper().buildCesiumCard(
-                                    pubKey: keys['pub'] as String,
-                                    seed: keys['seed'] as String));
+                            try {
+                              final dynamic cesiumCards = keys['cesiumCards'];
+                              if (cesiumCards != null) {
+                                final List<dynamic> cesiumCardList =
+                                    jsonDecode(cesiumCards as String)
+                                        as List<dynamic>;
+                                // ignore: avoid_function_literals_in_foreach_calls
+                                cesiumCardList.forEach((dynamic cesiumCard) {
+                                  importWalletToSharedPrefs(
+                                      cesiumCard as Map<String, dynamic>);
+                                });
+                              } else {
+                                importWalletToSharedPrefs(keys);
+                              }
+                            } catch (e, stacktrace) {
+                              logger('Error importing wallet: $e');
+                              if (!mounted) {
+                                return;
+                              }
+                              context.replaceSnackbar(
+                                content: Text(
+                                  tr('error_importing_wallet'),
+                                  style: const TextStyle(color: Colors.red),
+                                ),
+                              );
+                              await Sentry.captureException(e,
+                                  stackTrace: stacktrace);
+                              return;
+                            }
                             if (!mounted) {
                               return;
                             }
@@ -121,6 +142,20 @@ class _ImportDialogState extends State<ImportDialog> {
         });
   }
 
+  void importWalletToSharedPrefs(Map<String, dynamic> cesiumCard) {
+    final dynamic pub = cesiumCard['pub'];
+    SharedPreferencesHelper().setDefaultWallet(SharedPreferencesHelper()
+        .buildCesiumCard(
+            pubKey:
+                pub != null ? pub as String : cesiumCard['pubKey'] as String,
+            seed: cesiumCard['seed'] as String));
+    /* In the future, with multicards, use this instead
+     SharedPreferencesHelper().addCesiumCard(SharedPreferencesHelper()
+        .buildCesiumCard(
+        pubKey: cesiumCard['pub'] as String,
+        seed: cesiumCard['seed'] as String)); */
+  }
+
   Future<String> _importWallet(BuildContext context) async {
     try {
       // Use file_picker to pick a file
-- 
GitLab