From a441000c3977fb8d7b77f789ed9575ea27eb1b74 Mon Sep 17 00:00:00 2001
From: vjrj <vjrj@comunes.org>
Date: Sat, 19 Aug 2023 10:53:29 +0200
Subject: [PATCH] Import on add

---
 lib/ui/screens/fifth_screen.dart              | 74 +-----------------
 lib/ui/widgets/card_drawer.dart               | 26 -------
 .../widgets/fifth_screen/import_dialog.dart   | 68 ++++++++++++++++
 .../first_screen/card_name_editable.dart      |  2 +
 lib/ui/widgets/first_screen/card_stack.dart   | 12 ++-
 .../first_screen/credit_card_mini.dart        | 78 ++++++++++---------
 6 files changed, 123 insertions(+), 137 deletions(-)

diff --git a/lib/ui/screens/fifth_screen.dart b/lib/ui/screens/fifth_screen.dart
index 987a0b19..9b259b41 100644
--- a/lib/ui/screens/fifth_screen.dart
+++ b/lib/ui/screens/fifth_screen.dart
@@ -7,11 +7,8 @@ import 'package:share_plus/share_plus.dart';
 
 import '../../data/models/app_cubit.dart';
 import '../../data/models/app_state.dart';
-import '../../data/models/cesium_card.dart';
-import '../../data/models/credit_card_themes.dart';
 import '../../data/models/theme_cubit.dart';
 import '../../g1/currency.dart';
-import '../../g1/g1_helper.dart';
 import '../../shared_prefs_helper.dart';
 import '../tutorial.dart';
 import '../tutorial_keys.dart';
@@ -22,7 +19,6 @@ import '../widgets/faq.dart';
 import '../widgets/fifth_screen/export_dialog.dart';
 import '../widgets/fifth_screen/fifth_tutorial.dart';
 import '../widgets/fifth_screen/grid_item.dart';
-import '../widgets/fifth_screen/import_clipboard_dialog.dart';
 import '../widgets/fifth_screen/import_dialog.dart';
 import '../widgets/fifth_screen/link_card.dart';
 import '../widgets/fifth_screen/node_info.dart';
@@ -193,9 +189,8 @@ class _FifthScreenState extends State<FifthScreen> {
                             GridItem(
                                 title: 'import_key',
                                 icon: Icons.upload,
-                                onTap: () {
-                                  _showSelectImportMethodDialog();
-                                }),
+                                onTap: () =>
+                                    showSelectImportMethodDialog(context)),
                           ]),
                       SwitchListTile(
                           title: Text(tr('expert_mode')),
@@ -243,49 +238,6 @@ class _FifthScreenState extends State<FifthScreen> {
     });
   }
 
-  Future<void> _showSelectImportMethodDialog() async {
-    final String? method = await showDialog<String>(
-      context: context,
-      builder: (BuildContext context) => const SelectImportMethodDialog(),
-    );
-    if (method != null) {
-      if (!mounted) {
-        return;
-      }
-      showDialog(
-        context: context,
-        builder: (BuildContext context) {
-          if (method == 'file') {
-            return const ImportDialog();
-          } else {
-            // if (method == 'clipboard') {
-            return ImportClipboardDialog(onImport: (String wallet) {
-              if (validateKey(wallet)) {
-                // It's a pubkey, let's think is a cesium wallet
-                if (!SharedPreferencesHelper().has(wallet)) {
-                  SharedPreferencesHelper().addCesiumCard(CesiumCard(
-                      name: '',
-                      theme: CreditCardThemes.theme2,
-                      pubKey: extractPublicKey(wallet),
-                      seed: CesiumCard.unknown));
-                } else {
-                  ScaffoldMessenger.of(context).showSnackBar(
-                      SnackBar(content: Text(tr('wallet_already_imported'))));
-                }
-              } else {
-                showDialog(
-                    context: context,
-                    builder: (BuildContext context) {
-                      return ImportDialog(wallet: wallet);
-                    });
-              }
-            });
-          }
-        },
-      );
-    }
-  }
-
   Future<void> _showSelectExportMethodDialog() async {
     final ExportType? method = await showDialog<ExportType>(
       context: context,
@@ -305,28 +257,6 @@ class _FifthScreenState extends State<FifthScreen> {
   }
 }
 
-class SelectImportMethodDialog extends StatelessWidget {
-  const SelectImportMethodDialog({super.key});
-
-  @override
-  Widget build(BuildContext context) {
-    return AlertDialog(
-      title: Text(tr('select_import_method')),
-      // content: Text(tr('select_import_method_desc')),
-      actions: <Widget>[
-        TextButton.icon(
-            icon: const Icon(Icons.file_present),
-            label: Text(tr('file_import')),
-            onPressed: () => Navigator.of(context).pop('file')),
-        TextButton.icon(
-            icon: const Icon(Icons.content_paste),
-            label: Text(tr('clipboard_import')),
-            onPressed: () => Navigator.of(context).pop('clipboard')),
-      ],
-    );
-  }
-}
-
 class SelectExportMethodDialog extends StatelessWidget {
   const SelectExportMethodDialog({super.key});
 
diff --git a/lib/ui/widgets/card_drawer.dart b/lib/ui/widgets/card_drawer.dart
index 46d1a9cf..ffbc1863 100644
--- a/lib/ui/widgets/card_drawer.dart
+++ b/lib/ui/widgets/card_drawer.dart
@@ -57,32 +57,6 @@ class CardDrawer extends StatelessWidget {
                       child: CardStack(),
                     ),
                   ),
-                // Expanded(child: Container()),
-                /* if (!kReleaseMode)
-                  Expanded(
-                    child: Container(
-                      decoration: const BoxDecoration(
-                        borderRadius: BorderRadius.only(
-                          topLeft: Radius.circular(20),
-                        ),
-                      ),
-                      child: ListView.builder(
-                        shrinkWrap: true,
-                        itemCount: cards.length,
-                        itemBuilder: (BuildContext context, int index) {
-                          final CesiumCard card = cards[index];
-                          return InkWell(
-                            onTap: () {
-                              SharedPreferencesHelper()
-                                  .selectCurrentWallet(index);
-                              Navigator.pop(context);
-                            },
-                            child: Text(card.pubKey),
-                          );
-                        },
-                      ),
-                    ),
-                  ), */
                 if (inDevelopment)
                   ListTile(
                     leading: const Icon(Icons.build),
diff --git a/lib/ui/widgets/fifth_screen/import_dialog.dart b/lib/ui/widgets/fifth_screen/import_dialog.dart
index 01f4b057..acad8a4f 100644
--- a/lib/ui/widgets/fifth_screen/import_dialog.dart
+++ b/lib/ui/widgets/fifth_screen/import_dialog.dart
@@ -11,12 +11,15 @@ import 'package:pattern_lock/pattern_lock.dart';
 import 'package:sentry_flutter/sentry_flutter.dart';
 import 'package:universal_html/html.dart' as html;
 
+import '../../../data/models/cesium_card.dart';
+import '../../../data/models/credit_card_themes.dart';
 import '../../../data/models/transaction_cubit.dart';
 import '../../../g1/g1_helper.dart';
 import '../../../shared_prefs_helper.dart';
 import '../../logger.dart';
 import '../../ui_helpers.dart';
 import '../custom_error_widget.dart';
+import 'import_clipboard_dialog.dart';
 import 'pattern_util.dart';
 
 class ImportDialog extends StatefulWidget {
@@ -273,3 +276,68 @@ class _ImportDialogState extends State<ImportDialog> {
     );
   }
 }
+
+Future<void> showSelectImportMethodDialog(BuildContext context) async {
+  final String? method = await showDialog<String>(
+    context: context,
+    builder: (BuildContext context) => const SelectImportMethodDialog(),
+  );
+  if (method != null) {
+    if (!context.mounted) {
+      return;
+    }
+    showDialog(
+      context: context,
+      builder: (BuildContext context) {
+        if (method == 'file') {
+          return const ImportDialog();
+        } else {
+          // if (method == 'clipboard') {
+          return ImportClipboardDialog(onImport: (String wallet) {
+            if (validateKey(wallet)) {
+              // It's a pubkey, let's think is a cesium wallet
+              if (!SharedPreferencesHelper().has(wallet)) {
+                SharedPreferencesHelper().addCesiumCard(CesiumCard(
+                    name: '',
+                    theme: CreditCardThemes.theme2,
+                    pubKey: extractPublicKey(wallet),
+                    seed: CesiumCard.unknown));
+              } else {
+                ScaffoldMessenger.of(context).showSnackBar(
+                    SnackBar(content: Text(tr('wallet_already_imported'))));
+              }
+            } else {
+              showDialog(
+                  context: context,
+                  builder: (BuildContext context) {
+                    return ImportDialog(wallet: wallet);
+                  });
+            }
+          });
+        }
+      },
+    );
+  }
+}
+
+class SelectImportMethodDialog extends StatelessWidget {
+  const SelectImportMethodDialog({super.key});
+
+  @override
+  Widget build(BuildContext context) {
+    return AlertDialog(
+      title: Text(tr('select_import_method')),
+      // content: Text(tr('select_import_method_desc')),
+      actions: <Widget>[
+        TextButton.icon(
+            icon: const Icon(Icons.file_present),
+            label: Text(tr('file_import')),
+            onPressed: () => Navigator.of(context).pop('file')),
+        TextButton.icon(
+            icon: const Icon(Icons.content_paste),
+            label: Text(tr('clipboard_import')),
+            onPressed: () => Navigator.of(context).pop('clipboard')),
+      ],
+    );
+  }
+}
diff --git a/lib/ui/widgets/first_screen/card_name_editable.dart b/lib/ui/widgets/first_screen/card_name_editable.dart
index 6668150b..74b12b8d 100644
--- a/lib/ui/widgets/first_screen/card_name_editable.dart
+++ b/lib/ui/widgets/first_screen/card_name_editable.dart
@@ -79,6 +79,8 @@ class _CardNameEditableState extends State<CardNameEditable> {
 
   @override
   Widget build(BuildContext context) {
+    /*   return Consumer<SharedPreferencesHelper>(builder: (BuildContext context,
+        SharedPreferencesHelper prefsHelper, Widget? child) { */
     return FutureBuilder<String>(
         future: _initValue(),
         builder: (BuildContext context, AsyncSnapshot<String> snapshot) {
diff --git a/lib/ui/widgets/first_screen/card_stack.dart b/lib/ui/widgets/first_screen/card_stack.dart
index b02c0f27..a6c154eb 100644
--- a/lib/ui/widgets/first_screen/card_stack.dart
+++ b/lib/ui/widgets/first_screen/card_stack.dart
@@ -4,6 +4,7 @@ import 'package:provider/provider.dart';
 import '../../../data/models/cesium_card.dart';
 import '../../../shared_prefs_helper.dart';
 import '../../logger.dart';
+import '../fifth_screen/import_dialog.dart';
 import 'credit_card_mini.dart';
 
 class CardStack extends StatefulWidget {
@@ -21,9 +22,9 @@ class _CardStackState extends State<CardStack> {
     return Consumer<SharedPreferencesHelper>(builder: (BuildContext context,
         SharedPreferencesHelper prefsHelper, Widget? child) {
       final List<CesiumCard> cards =
-          List<CesiumCard>.from(SharedPreferencesHelper().cesiumCards);
+      List<CesiumCard>.from(SharedPreferencesHelper().cesiumCards);
       final int currentIndex =
-          SharedPreferencesHelper().getCurrentWalletIndex();
+      SharedPreferencesHelper().getCurrentWalletIndex();
       logger('Current wallet index is $currentIndex of ${cards.length}');
       final CesiumCard currentItem = cards.removeAt(currentIndex);
       cards.add(currentItem);
@@ -33,7 +34,7 @@ class _CardStackState extends State<CardStack> {
         children: <Widget>[
           ...List<Widget>.generate(
             walletsSize,
-            (int index) {
+                (int index) {
               return Positioned(
                 top: 50.0 * index,
                 child: SizedBox(
@@ -66,7 +67,10 @@ class _CardStackState extends State<CardStack> {
                   side: const BorderSide(color: Colors.grey, width: 1.0),
                   borderRadius: BorderRadius.circular(20),
                 ), */
-                  onPressed: () {},
+                  onPressed: () {
+                    Navigator.pop(context);
+                    showSelectImportMethodDialog(context);
+                  },
                   child: const Icon(Icons.add),
                 ),
               ))
diff --git a/lib/ui/widgets/first_screen/credit_card_mini.dart b/lib/ui/widgets/first_screen/credit_card_mini.dart
index df9faad8..de6c68ef 100644
--- a/lib/ui/widgets/first_screen/credit_card_mini.dart
+++ b/lib/ui/widgets/first_screen/credit_card_mini.dart
@@ -45,10 +45,7 @@ class CreditCardMini extends StatelessWidget {
     return Padding(
         padding: const EdgeInsets.all(10),
         child: GestureDetector(
-            onTap: () {
-              SharedPreferencesHelper().selectCurrentWallet(card);
-              Navigator.pop(context);
-            },
+            onTap: () => onCardTap(context),
             child: Card(
                 elevation: 8.0,
                 shape: RoundedRectangleBorder(
@@ -122,38 +119,49 @@ class CreditCardMini extends StatelessWidget {
                                       width: 100,
                                       height: 100),
                                 )),
-                            Column(
-                                crossAxisAlignment: CrossAxisAlignment.start,
-                                // mainAxisAlignment: MainAxisAlignment.start,
-                                children: <Widget>[
-                                  if (card.name.isNotEmpty)
-                                    Padding(
-                                        padding: EdgeInsets.symmetric(
-                                            horizontal: cardInternalElPadding,
-                                            vertical: cardInternalElPadding),
-                                        child: Row(children: <Widget>[
-                                          Expanded(
-                                              child: CardNameText(
-                                                  currentText: card.name,
-                                                  onTap: () {})),
-                                        ])),
-                                  Padding(
-                                      padding: EdgeInsets.symmetric(
-                                          horizontal: cardInternalElPadding,
-                                          vertical: cardInternalElPadding),
-                                      child: Row(children: <Widget>[
-                                        FittedBox(
-                                            fit: BoxFit.scaleDown,
-                                            child: Text(
-                                              '${card.pubKey.substring(0, 4)} ${card.pubKey.substring(4, 8)}',
-                                              style: cardTextStyle(context,
-                                                  fontSize: 16),
-                                            )),
-                                      ])),
-                                  if (bigDevice) const SizedBox(height: 6.0),
-                                  const SizedBox(height: 8.0),
-                                ]),
+                            GestureDetector(
+                                onTap: () => onCardTap(context),
+                                child: Column(
+                                    crossAxisAlignment:
+                                        CrossAxisAlignment.start,
+                                    // mainAxisAlignment: MainAxisAlignment.start,
+                                    children: <Widget>[
+                                      if (card.name.isNotEmpty)
+                                        Padding(
+                                            padding: EdgeInsets.symmetric(
+                                                horizontal:
+                                                    cardInternalElPadding,
+                                                vertical:
+                                                    cardInternalElPadding),
+                                            child: Row(children: <Widget>[
+                                              Expanded(
+                                                  child: CardNameText(
+                                                      currentText: card.name,
+                                                      onTap: () {})),
+                                            ])),
+                                      Padding(
+                                          padding: EdgeInsets.symmetric(
+                                              horizontal: cardInternalElPadding,
+                                              vertical: cardInternalElPadding),
+                                          child: Row(children: <Widget>[
+                                            FittedBox(
+                                                fit: BoxFit.scaleDown,
+                                                child: Text(
+                                                  '${card.pubKey.substring(0, 4)} ${card.pubKey.substring(4, 8)}',
+                                                  style: cardTextStyle(context,
+                                                      fontSize: 16),
+                                                )),
+                                          ])),
+                                      if (bigDevice)
+                                        const SizedBox(height: 6.0),
+                                      const SizedBox(height: 8.0),
+                                    ])),
                           ]),
                         ))))));
   }
+
+  void onCardTap(BuildContext context) {
+    SharedPreferencesHelper().selectCurrentWallet(card);
+    Navigator.pop(context);
+  }
 }
-- 
GitLab