From a597e9acea7d1d6ad6ac50067c5c9edab9e154eb Mon Sep 17 00:00:00 2001
From: vjrj <vjrj@comunes.org>
Date: Sat, 21 Oct 2023 15:34:04 +0200
Subject: [PATCH] Import wallet with QR #98

---
 .../fifth_screen/import_clipboard_dialog.dart | 26 +++++++---
 .../widgets/first_screen/pay_qr_button.dart   | 49 ++----------------
 lib/ui/widgets/generic_qr_button.dart         | 51 +++++++++++++++++++
 3 files changed, 74 insertions(+), 52 deletions(-)
 create mode 100644 lib/ui/widgets/generic_qr_button.dart

diff --git a/lib/ui/widgets/fifth_screen/import_clipboard_dialog.dart b/lib/ui/widgets/fifth_screen/import_clipboard_dialog.dart
index 74e683a6..d2a288e9 100644
--- a/lib/ui/widgets/fifth_screen/import_clipboard_dialog.dart
+++ b/lib/ui/widgets/fifth_screen/import_clipboard_dialog.dart
@@ -2,6 +2,8 @@ import 'package:clipboard/clipboard.dart';
 import 'package:easy_localization/easy_localization.dart';
 import 'package:flutter/material.dart';
 
+import '../generic_qr_button.dart';
+
 class ImportClipboardDialog extends StatefulWidget {
   const ImportClipboardDialog({super.key, required this.onImport});
 
@@ -45,13 +47,23 @@ class _ImportClipboardDialogState extends State<ImportClipboardDialog> {
         ],
       ),
       actions: <Widget>[
-        TextButton(
-          child: Text(tr('import')),
-          onPressed: () {
-            Navigator.of(context).pop(_textController.text);
-            widget.onImport(_textController.text);
-          },
-        ),
+        Row(
+            mainAxisAlignment: MainAxisAlignment.spaceBetween,
+            children: <Widget>[
+              GenericQrButton(
+                onKeyScanned: (String key) {
+                  Navigator.of(context).pop(key);
+                  widget.onImport(key);
+                },
+              ),
+              TextButton(
+                child: Text(tr('import')),
+                onPressed: () {
+                  Navigator.of(context).pop(_textController.text);
+                  widget.onImport(_textController.text);
+                },
+              ),
+            ])
       ],
     );
   }
diff --git a/lib/ui/widgets/first_screen/pay_qr_button.dart b/lib/ui/widgets/first_screen/pay_qr_button.dart
index e91cfae3..f77b37cd 100644
--- a/lib/ui/widgets/first_screen/pay_qr_button.dart
+++ b/lib/ui/widgets/first_screen/pay_qr_button.dart
@@ -1,55 +1,14 @@
 import 'package:flutter/material.dart';
-import 'package:flutter_bloc/flutter_bloc.dart';
 
-import '../../../data/models/payment_cubit.dart';
-import '../../../data/models/payment_state.dart';
 import '../../pay_helper.dart';
-import '../../qr_manager.dart';
+import '../generic_qr_button.dart';
 
-class PayQrButton extends StatefulWidget {
+class PayQrButton extends StatelessWidget {
   const PayQrButton({super.key});
 
-  @override
-  State<PayQrButton> createState() => _PayQrButtonState();
-}
-
-class _PayQrButtonState extends State<PayQrButton> {
   @override
   Widget build(BuildContext context) {
-    return BlocBuilder<PaymentCubit, PaymentState>(
-        builder: (BuildContext context, PaymentState state) {
-      if (state.contact == null || state.contact!.pubKey.isEmpty) {
-        return ElevatedButton.icon(
-          onPressed: () async {
-            final String? scannedKey = await QrManager.qrScan(context);
-            if (scannedKey is String &&
-                scannedKey != null &&
-                scannedKey != '-1') {
-              if (!mounted) {
-                return;
-              }
-              await onKeyScanned(context, scannedKey);
-            }
-          },
-          icon: const Row(children: <Widget>[
-            SizedBox(width: 5),
-            Icon(Icons.qr_code_scanner)
-          ]),
-          label: const Text(''),
-          style: ElevatedButton.styleFrom(
-            minimumSize: const Size(30.0, 60.0),
-            foregroundColor: Colors.white,
-            backgroundColor: Theme.of(context).colorScheme.primary,
-            padding:
-                const EdgeInsets.symmetric(horizontal: 16.0, vertical: 8.0),
-            shape: RoundedRectangleBorder(
-              borderRadius: BorderRadius.circular(6.0),
-            ),
-          ),
-        );
-      } else {
-        return Container();
-      }
-    });
+    return GenericQrButton(
+        onKeyScanned: (String key) => onKeyScanned(context, key));
   }
 }
diff --git a/lib/ui/widgets/generic_qr_button.dart b/lib/ui/widgets/generic_qr_button.dart
new file mode 100644
index 00000000..89d98aa6
--- /dev/null
+++ b/lib/ui/widgets/generic_qr_button.dart
@@ -0,0 +1,51 @@
+import 'package:flutter/material.dart';
+import 'package:flutter_bloc/flutter_bloc.dart';
+
+import '../../../data/models/payment_cubit.dart';
+import '../../../data/models/payment_state.dart';
+import '../qr_manager.dart';
+
+class GenericQrButton extends StatelessWidget {
+  const GenericQrButton({super.key, required this.onKeyScanned});
+
+  final Function(String) onKeyScanned;
+
+  @override
+  Widget build(BuildContext context) {
+    return BlocBuilder<PaymentCubit, PaymentState>(
+        builder: (BuildContext context, PaymentState state) {
+      if (state.contact == null || state.contact!.pubKey.isEmpty) {
+        return ElevatedButton.icon(
+          onPressed: () async {
+            final String? scannedKey = await QrManager.qrScan(context);
+            if (scannedKey is String &&
+                scannedKey != null &&
+                scannedKey != '-1') {
+/*              if (!mounted) {
+                return;
+              }*/
+              await onKeyScanned(scannedKey);
+            }
+          },
+          icon: const Row(children: <Widget>[
+            SizedBox(width: 5),
+            Icon(Icons.qr_code_scanner)
+          ]),
+          label: const Text(''),
+          style: ElevatedButton.styleFrom(
+            minimumSize: const Size(30.0, 60.0),
+            foregroundColor: Colors.white,
+            backgroundColor: Theme.of(context).colorScheme.primary,
+            padding:
+                const EdgeInsets.symmetric(horizontal: 16.0, vertical: 8.0),
+            shape: RoundedRectangleBorder(
+              borderRadius: BorderRadius.circular(6.0),
+            ),
+          ),
+        );
+      } else {
+        return Container();
+      }
+    });
+  }
+}
-- 
GitLab