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