From 086019d926110a809bb029da6a639035af3b0bd0 Mon Sep 17 00:00:00 2001 From: Serhii Date: Mon, 8 May 2023 23:30:14 +0300 Subject: [PATCH] CW-365-Wallet-QR-codes-not-working-properly-on-some-devices (#909) * add exception for range error * add app links for wallets * Update reference to qr.flutter clone * QrImage update * Update fullscreen_qr_page.dart * Add automatic version for wallet QR --------- Co-authored-by: OmarHatem --- android/app/src/main/AndroidManifestBase.xml | 6 ++ assets/images/restore_qr.png | Bin 0 -> 1085 bytes ios/Runner/InfoBase.plist | 60 ++++++++++++++++++ .../screens/receive/fullscreen_qr_page.dart | 5 +- lib/src/screens/receive/widgets/qr_image.dart | 2 +- .../screens/receive/widgets/qr_widget.dart | 9 ++- .../screens/restore/restore_options_page.dart | 2 +- .../screens/wallet_keys/wallet_keys_page.dart | 3 +- .../restore/wallet_restore_from_qr_code.dart | 1 + pubspec_base.yaml | 6 +- 10 files changed, 88 insertions(+), 6 deletions(-) create mode 100644 assets/images/restore_qr.png diff --git a/android/app/src/main/AndroidManifestBase.xml b/android/app/src/main/AndroidManifestBase.xml index 2dbedcba9..64adea1e7 100644 --- a/android/app/src/main/AndroidManifestBase.xml +++ b/android/app/src/main/AndroidManifestBase.xml @@ -46,8 +46,14 @@ + + + + + + Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D1JX%EK~z{r%~@SY z6j2mD_s;HWnqnzML_tD9(xT8yg_#nVkV{FF{a_ndw)R615kB-TJ@gd4)Jyabg)fyo zlogq64?zz}5fn&8L>WqD>h9{!oX)v3lWRM=S?1mk&YnAS&%N`_{W!^)gCQoHmPi2E+_?Th>+>g`V?#rony(Pc^1e4;} zGq^54iI7)eK+zFD1XlXQB!cxJpm5tHS2$i$LqW!6{AF)EJA=+@bN zFx+}c9SEvN>X1Eyj?|6DyG*e9EGW5{3vlngg@+EB*l~?+TO;&0j^NPwILaHh5klJp z?A)!!MH>XlY2ts-G8v5tC@$8Dn*vWgn;bR(#+^l~71Z{i5d>PqI>MzTcC}h~qzRyU zL;4!L+4UKFuN2evchbXeDJIg9GpWthhB&T2=7SZReUr}LuaDtWX{Nj@-*bHpw8zk( z@e_>>!A%|n+rmlQ-OQ;XJ;n4~NUE4rl3oPwgkl&x?(2l0aU$@aXl-dGPkx*XWBbhg?^VaUUsp zaM?*eEUXKpUE57F&=j$-=ZURk9!9CvKY$6oeL#0J3t)n5G{y8#raQWH`CE=trxj%0 zJOqmfmXzcy<74}@J`g9`Ol+tJ_&ziiGz{Zie!g#{rc&aw$Mz;*#+elLsv0|K^As1Z zdk?|2r882~#dZF)rRAO z#Osmwi{Rd47DgKB#BgFY2>GF4zJHVns;Df&B`9<0y~HH`LW%@hKx3j8WNd`V5y>RR zzkZF6>o9t$5PK*OwuS`^3?}9+C<-J}31(BUPOL!^tPv8dRoV(xx*NXWRLHtu%_J74 z!W;@#N|rhcR#vRq3s!x{PZ4xVQy}Ytbw3H#780zLvmjW{?0tjH&84#bitcoin + + CFBundleTypeRole + Editor + CFBundleURLName + bitcoin-wallet + CFBundleURLSchemes + + bitcoin-wallet + + + + CFBundleTypeRole + Editor + CFBundleURLName + bitcoin_wallet + CFBundleURLSchemes + + bitcoin_wallet + + CFBundleTypeRole Editor @@ -52,6 +72,26 @@ monero + + CFBundleTypeRole + Editor + CFBundleURLName + monero-wallet + CFBundleURLSchemes + + monero-wallet + + + + CFBundleTypeRole + Editor + CFBundleURLName + monero_wallet + CFBundleURLSchemes + + monero_wallet + + CFBundleTypeRole Editor @@ -62,6 +102,26 @@ litecoin + + CFBundleTypeRole + Viewer + CFBundleURLName + litecoin-wallet + CFBundleURLSchemes + + litecoin-wallet + + + + CFBundleTypeRole + Viewer + CFBundleURLName + litecoin_wallet + CFBundleURLSchemes + + litecoin_wallet + + CFBundleVersion $(CURRENT_PROJECT_VERSION) diff --git a/lib/src/screens/receive/fullscreen_qr_page.dart b/lib/src/screens/receive/fullscreen_qr_page.dart index 4bde38710..2fcc24e2c 100644 --- a/lib/src/screens/receive/fullscreen_qr_page.dart +++ b/lib/src/screens/receive/fullscreen_qr_page.dart @@ -71,7 +71,10 @@ class FullscreenQRPage extends BasePage { padding: EdgeInsets.all(10), decoration: BoxDecoration( border: Border.all(width: 3, color: Theme.of(context).accentTextTheme!.headline2!.backgroundColor!)), - child: QrImage(data: qrViewData.data, version: qrViewData.version), + child: Container( + decoration: BoxDecoration( + border: Border.all(width: 3, color: Colors.white)), + child: QrImage(data: qrViewData.data, version: qrViewData.version)), ), ), ), diff --git a/lib/src/screens/receive/widgets/qr_image.dart b/lib/src/screens/receive/widgets/qr_image.dart index c8cc622c4..c624ad3c0 100644 --- a/lib/src/screens/receive/widgets/qr_image.dart +++ b/lib/src/screens/receive/widgets/qr_image.dart @@ -16,7 +16,7 @@ class QrImage extends StatelessWidget { @override Widget build(BuildContext context) { - return qr.QrImage( + return qr.QrImageView( data: data, errorCorrectionLevel: errorCorrectionLevel, version: version ?? 9, // Previous value: 7 something happened after flutter upgrade monero wallets addresses are longer than ver. 7 ??? diff --git a/lib/src/screens/receive/widgets/qr_widget.dart b/lib/src/screens/receive/widgets/qr_widget.dart index fc58d4cec..33cc3d598 100644 --- a/lib/src/screens/receive/widgets/qr_widget.dart +++ b/lib/src/screens/receive/widgets/qr_widget.dart @@ -86,7 +86,14 @@ class QRWidget extends StatelessWidget { Theme.of(context).accentTextTheme.headline2!.backgroundColor!, ), ), - child: QrImage(data: addressListViewModel.uri.toString()), + child: Container( + decoration: BoxDecoration( + border: Border.all( + width: 3, + color:Colors.white, + ), + ), + child: QrImage(data: addressListViewModel.uri.toString())), ), ), ), diff --git a/lib/src/screens/restore/restore_options_page.dart b/lib/src/screens/restore/restore_options_page.dart index c08d2b7e4..93a44c752 100644 --- a/lib/src/screens/restore/restore_options_page.dart +++ b/lib/src/screens/restore/restore_options_page.dart @@ -25,7 +25,7 @@ class RestoreOptionsPage extends BasePage { final bool isNewInstall; final imageSeedKeys = Image.asset('assets/images/restore_wallet_image.png'); final imageBackup = Image.asset('assets/images/backup.png'); - final qrCode = Image.asset('assets/images/qr_code_icon.png'); + final qrCode = Image.asset('assets/images/restore_qr.png'); @override Widget body(BuildContext context) { diff --git a/lib/src/screens/wallet_keys/wallet_keys_page.dart b/lib/src/screens/wallet_keys/wallet_keys_page.dart index da58c4b31..c1c2e6fb5 100644 --- a/lib/src/screens/wallet_keys/wallet_keys_page.dart +++ b/lib/src/screens/wallet_keys/wallet_keys_page.dart @@ -11,6 +11,7 @@ import 'package:cake_wallet/src/screens/base_page.dart'; import 'package:cake_wallet/src/widgets/list_row.dart'; import 'package:cake_wallet/view_model/wallet_keys_view_model.dart'; import 'package:cake_wallet/routes.dart'; +import 'package:qr_flutter/qr_flutter.dart'; class WalletKeysPage extends BasePage { WalletKeysPage(this.walletKeysViewModel); @@ -32,7 +33,7 @@ class WalletKeysPage extends BasePage { await Navigator.pushNamed( context, Routes.fullscreenQR, - arguments: QrViewData(data: url.toString()), + arguments: QrViewData(data: url.toString(), version: QrVersions.auto), ); // ignore: unawaited_futures DeviceDisplayBrightness.setBrightness(brightness); 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 9ebf01429..c4b772f9c 100644 --- a/lib/view_model/restore/wallet_restore_from_qr_code.dart +++ b/lib/view_model/restore/wallet_restore_from_qr_code.dart @@ -51,6 +51,7 @@ class WalletRestoreFromQRCode { static String getFormattedUri(String code) { final index = code.indexOf(':'); + if (index == -1) return throw Exception('Unexpected wallet type: $code, try to scan again'); final scheme = code.substring(0, index).replaceAll('_', '-'); final query = code.substring(index + 1).replaceAll('?', '&'); final formattedUri = '$scheme:?$query'; diff --git a/pubspec_base.yaml b/pubspec_base.yaml index 58de6edab..0d6aa36e8 100644 --- a/pubspec_base.yaml +++ b/pubspec_base.yaml @@ -6,7 +6,11 @@ dependencies: flutter_cupertino_localizations: ^1.0.1 intl: ^0.17.0 url_launcher: ^6.1.4 - qr_flutter: ^4.0.0 + qr_flutter: + git: + url: https://github.com/cake-tech/qr.flutter.git + ref: cake-4.0.2 + version: 4.0.2 uuid: 3.0.6 shared_preferences: ^2.0.15 flutter_secure_storage: