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 <omarh.ismail1@gmail.com>
Serhii committed
May 8, 2023 at 23:30 UTC
086019d926110a809bb029da6a639035af3b0bd0
10 files changed
+88
-6
android/app/src/main/AndroidManifestBase.xml
+6
@@ -46,8 +46,14 @@
46
<category android:name="android.intent.category.DEFAULT" />
47
<category android:name="android.intent.category.BROWSABLE" />
48
<data android:scheme="bitcoin" />
49
+ <data android:scheme="bitcoin-wallet" />
50
+ <data android:scheme="bitcoin_wallet" />
51
<data android:scheme="monero" />
52
+ <data android:scheme="monero-wallet" />
53
+ <data android:scheme="monero_wallet" />
54
<data android:scheme="litecoin" />
55
+ <data android:scheme="litecoin-wallet" />
56
+ <data android:scheme="litecoin_wallet" />
57
</intent-filter>
58
</activity>
59
<meta-data
assets/images/restore_qr.png
Binary files /dev/null and b/assets/images/restore_qr.png differ
ios/Runner/InfoBase.plist
+60
@@ -42,6 +42,26 @@
42
<string>bitcoin</string>
43
</array>
44
</dict>
45
+ <dict>
46
+ <key>CFBundleTypeRole</key>
47
+ <string>Editor</string>
48
+ <key>CFBundleURLName</key>
49
+ <string>bitcoin-wallet</string>
50
+ <key>CFBundleURLSchemes</key>
51
+ <array>
52
+ <string>bitcoin-wallet</string>
53
+ </array>
54
+ </dict>
55
+ <dict>
56
+ <key>CFBundleTypeRole</key>
57
+ <string>Editor</string>
58
+ <key>CFBundleURLName</key>
59
+ <string>bitcoin_wallet</string>
60
+ <key>CFBundleURLSchemes</key>
61
+ <array>
62
+ <string>bitcoin_wallet</string>
63
+ </array>
64
+ </dict>
65
<dict>
66
<key>CFBundleTypeRole</key>
67
<string>Editor</string>
@@ -52,6 +72,26 @@
72
<string>monero</string>
73
</array>
74
</dict>
75
+ <dict>
76
+ <key>CFBundleTypeRole</key>
77
+ <string>Editor</string>
78
+ <key>CFBundleURLName</key>
79
+ <string>monero-wallet</string>
80
+ <key>CFBundleURLSchemes</key>
81
+ <array>
82
+ <string>monero-wallet</string>
83
+ </array>
84
+ </dict>
85
+ <dict>
86
+ <key>CFBundleTypeRole</key>
87
+ <string>Editor</string>
88
+ <key>CFBundleURLName</key>
89
+ <string>monero_wallet</string>
90
+ <key>CFBundleURLSchemes</key>
91
+ <array>
92
+ <string>monero_wallet</string>
93
+ </array>
94
+ </dict>
95
<dict>
96
<key>CFBundleTypeRole</key>
97
<string>Editor</string>
@@ -62,6 +102,26 @@
102
<string>litecoin</string>
103
</array>
104
</dict>
105
+ <dict>
106
+ <key>CFBundleTypeRole</key>
107
+ <string>Viewer</string>
108
+ <key>CFBundleURLName</key>
109
+ <string>litecoin-wallet</string>
110
+ <key>CFBundleURLSchemes</key>
111
+ <array>
112
+ <string>litecoin-wallet</string>
113
+ </array>
114
+ </dict>
115
+ <dict>
116
+ <key>CFBundleTypeRole</key>
117
+ <string>Viewer</string>
118
+ <key>CFBundleURLName</key>
119
+ <string>litecoin_wallet</string>
120
+ <key>CFBundleURLSchemes</key>
121
+ <array>
122
+ <string>litecoin_wallet</string>
123
+ </array>
124
+ </dict>
125
</array>
126
<key>CFBundleVersion</key>
127
<string>$(CURRENT_PROJECT_VERSION)</string>
lib/src/screens/receive/fullscreen_qr_page.dart
+4
-1
@@ -71,7 +71,10 @@ class FullscreenQRPage extends BasePage {
71
padding: EdgeInsets.all(10),
72
decoration: BoxDecoration(
73
border: Border.all(width: 3, color: Theme.of(context).accentTextTheme!.headline2!.backgroundColor!)),
74
- child: QrImage(data: qrViewData.data, version: qrViewData.version),
74
+ child: Container(
75
+ decoration: BoxDecoration(
76
+ border: Border.all(width: 3, color: Colors.white)),
77
+ child: QrImage(data: qrViewData.data, version: qrViewData.version)),
78
),
79
),
80
),
lib/src/screens/receive/widgets/qr_image.dart
+1
-1
@@ -16,7 +16,7 @@ class QrImage extends StatelessWidget {
16
17
@override
18
Widget build(BuildContext context) {
19
- return qr.QrImage(
19
+ return qr.QrImageView(
20
data: data,
21
errorCorrectionLevel: errorCorrectionLevel,
22
version: version ?? 9, // Previous value: 7 something happened after flutter upgrade monero wallets addresses are longer than ver. 7 ???
lib/src/screens/receive/widgets/qr_widget.dart
+8
-1
@@ -86,7 +86,14 @@ class QRWidget extends StatelessWidget {
86
Theme.of(context).accentTextTheme.headline2!.backgroundColor!,
87
),
88
),
89
- child: QrImage(data: addressListViewModel.uri.toString()),
89
+ child: Container(
90
+ decoration: BoxDecoration(
91
+ border: Border.all(
92
+ width: 3,
93
+ color:Colors.white,
94
+ ),
95
+ ),
96
+ child: QrImage(data: addressListViewModel.uri.toString())),
97
),
98
),
99
),
lib/src/screens/restore/restore_options_page.dart
+1
-1
@@ -25,7 +25,7 @@ class RestoreOptionsPage extends BasePage {
25
final bool isNewInstall;
26
final imageSeedKeys = Image.asset('assets/images/restore_wallet_image.png');
27
final imageBackup = Image.asset('assets/images/backup.png');
28
- final qrCode = Image.asset('assets/images/qr_code_icon.png');
28
+ final qrCode = Image.asset('assets/images/restore_qr.png');
29
30
@override
31
Widget body(BuildContext context) {
lib/src/screens/wallet_keys/wallet_keys_page.dart
+2
-1
@@ -11,6 +11,7 @@ import 'package:cake_wallet/src/screens/base_page.dart';
11
import 'package:cake_wallet/src/widgets/list_row.dart';
12
import 'package:cake_wallet/view_model/wallet_keys_view_model.dart';
13
import 'package:cake_wallet/routes.dart';
14
+import 'package:qr_flutter/qr_flutter.dart';
15
16
class WalletKeysPage extends BasePage {
17
WalletKeysPage(this.walletKeysViewModel);
@@ -32,7 +33,7 @@ class WalletKeysPage extends BasePage {
33
await Navigator.pushNamed(
34
context,
35
Routes.fullscreenQR,
35
- arguments: QrViewData(data: url.toString()),
36
+ arguments: QrViewData(data: url.toString(), version: QrVersions.auto),
37
);
38
// ignore: unawaited_futures
39
DeviceDisplayBrightness.setBrightness(brightness);
lib/view_model/restore/wallet_restore_from_qr_code.dart
+1
@@ -51,6 +51,7 @@ class WalletRestoreFromQRCode {
51
52
static String getFormattedUri(String code) {
53
final index = code.indexOf(':');
54
+ if (index == -1) return throw Exception('Unexpected wallet type: $code, try to scan again');
55
final scheme = code.substring(0, index).replaceAll('_', '-');
56
final query = code.substring(index + 1).replaceAll('?', '&');
57
final formattedUri = '$scheme:?$query';
pubspec_base.yaml
+5
-1
@@ -6,7 +6,11 @@ dependencies:
6
flutter_cupertino_localizations: ^1.0.1
7
intl: ^0.17.0
8
url_launcher: ^6.1.4
9
- qr_flutter: ^4.0.0
9
+ qr_flutter:
10
+ git:
11
+ url: https://github.com/cake-tech/qr.flutter.git
12
+ ref: cake-4.0.2
13
+ version: 4.0.2
14
uuid: 3.0.6
15
shared_preferences: ^2.0.15
16
flutter_secure_storage: