From 1dc7f9309a83a1fb79ab90b2847044b6725fbb36 Mon Sep 17 00:00:00 2001 From: cyan Date: Wed, 5 Feb 2025 02:40:06 +0100 Subject: [PATCH] fix null check when user exits out of qr code scanner (#2002) --- lib/entities/qr_scanner.dart | 4 ++-- lib/src/screens/ur/animated_ur_page.dart | 2 ++ lib/src/widgets/address_text_field.dart | 1 + lib/view_model/node_list/node_create_or_edit_view_model.dart | 4 +++- lib/view_model/restore/wallet_restore_from_qr_code.dart | 3 ++- 5 files changed, 10 insertions(+), 4 deletions(-) diff --git a/lib/entities/qr_scanner.dart b/lib/entities/qr_scanner.dart index d8f7032d3..91c63a574 100644 --- a/lib/entities/qr_scanner.dart +++ b/lib/entities/qr_scanner.dart @@ -12,7 +12,7 @@ import 'package:flutter/scheduler.dart'; var isQrScannerShown = false; -Future presentQRScanner(BuildContext context) async { +Future presentQRScanner(BuildContext context) async { isQrScannerShown = true; try { final result = await Navigator.of(context).push( @@ -23,7 +23,7 @@ Future presentQRScanner(BuildContext context) async { ), ); isQrScannerShown = false; - return result!; + return result; } catch (e) { isQrScannerShown = false; rethrow; diff --git a/lib/src/screens/ur/animated_ur_page.dart b/lib/src/screens/ur/animated_ur_page.dart index dc40e6a12..cf9aa8509 100644 --- a/lib/src/screens/ur/animated_ur_page.dart +++ b/lib/src/screens/ur/animated_ur_page.dart @@ -100,6 +100,7 @@ class AnimatedURPage extends BasePage { switch (urQrType) { case "ur:xmr-txunsigned": // ur:xmr-txsigned final ur = await presentQRScanner(context); + if (ur == null) return; final result = await monero!.commitTransactionUR(animatedURmodel.wallet, ur); if (result) { Navigator.of(context).pop(true); @@ -107,6 +108,7 @@ class AnimatedURPage extends BasePage { break; case "ur:xmr-output": // xmr-keyimage final ur = await presentQRScanner(context); + if (ur == null) return; final result = await monero!.importKeyImagesUR(animatedURmodel.wallet, ur); if (result) { Navigator.of(context).pop(true); diff --git a/lib/src/widgets/address_text_field.dart b/lib/src/widgets/address_text_field.dart index 9b407dedb..1f30e648b 100644 --- a/lib/src/widgets/address_text_field.dart +++ b/lib/src/widgets/address_text_field.dart @@ -233,6 +233,7 @@ class AddressTextField extends StatelessWidget{ await PermissionHandler.checkPermission(Permission.camera, context); if (!isCameraPermissionGranted) return; final code = await presentQRScanner(context); + if (code == null) return; if (code.isEmpty) { return; } diff --git a/lib/view_model/node_list/node_create_or_edit_view_model.dart b/lib/view_model/node_list/node_create_or_edit_view_model.dart index 2fca12e95..71f996aff 100644 --- a/lib/view_model/node_list/node_create_or_edit_view_model.dart +++ b/lib/view_model/node_list/node_create_or_edit_view_model.dart @@ -215,7 +215,9 @@ abstract class NodeCreateOrEditViewModelBase with Store { bool isCameraPermissionGranted = await PermissionHandler.checkPermission(Permission.camera, context); if (!isCameraPermissionGranted) return; - String code = await presentQRScanner(context); + String? code = await presentQRScanner(context); + if (code == null) throw Exception("Unexpected QR code value: aborted"); + if (code.isEmpty) { throw Exception('Unexpected scan QR code value: value is empty'); } diff --git a/lib/view_model/restore/wallet_restore_from_qr_code.dart b/lib/view_model/restore/wallet_restore_from_qr_code.dart index 0e4664f48..e28a429a4 100644 --- a/lib/view_model/restore/wallet_restore_from_qr_code.dart +++ b/lib/view_model/restore/wallet_restore_from_qr_code.dart @@ -89,7 +89,8 @@ class WalletRestoreFromQRCode { } static Future scanQRCodeForRestoring(BuildContext context) async { - String code = await presentQRScanner(context); + String? code = await presentQRScanner(context); + if (code == null) throw Exception("Unexpected scan QR code value: aborted"); if (code.isEmpty) throw Exception('Unexpected scan QR code value: value is empty'); WalletType? walletType;