Move handling deep links to app root
OmarHatem committed
Nov 8, 2022 at 18:12 UTC
f68798dd197b3a09ac3b23f59c45fef959785562
2 files changed
+38
-45
lib/main.dart
-44
@@ -5,7 +5,6 @@ import 'package:cake_wallet/buy/order.dart';
5
import 'package:cake_wallet/ionia/ionia_category.dart';
6
import 'package:cake_wallet/ionia/ionia_merchant.dart';
7
import 'package:cake_wallet/store/yat/yat_store.dart';
8
-import 'package:cake_wallet/utils/payment_request.dart';
8
import 'package:flutter/foundation.dart';
9
import 'package:flutter/material.dart';
10
import 'package:flutter/services.dart';
@@ -39,8 +38,6 @@ import 'package:cw_core/unspent_coins_info.dart';
38
import 'package:cake_wallet/monero/monero.dart';
39
import 'package:cake_wallet/wallet_type_utils.dart';
40
42
-import 'src/screens/auth/auth_page.dart';
43
-
41
final navigatorKey = GlobalKey<NavigatorState>();
42
final rootKey = GlobalKey<RootState>();
43
@@ -205,47 +202,6 @@ class AppState extends State<App> with SingleTickerProviderStateMixin {
202
super.initState();
203
//_handleIncomingLinks();
204
//_handleInitialUri();
208
-
209
- initUniLinks();
210
- }
211
-
212
- @override
213
- void dispose() {
214
- stream?.cancel();
215
- super.dispose();
216
- }
217
-
218
- /// handle app links while the app is already started
219
- /// whether its in the foreground or in the background.
220
- Future<void> initUniLinks() async {
221
- try {
222
- stream = uriLinkStream.listen((Uri? uri) {
223
- handleDeepLinking(uri);
224
- });
225
-
226
- final Uri? initialUri = await getInitialUri();
227
-
228
- handleDeepLinking(initialUri);
229
- } catch (e) {
230
- print(e);
231
- }
232
- }
233
-
234
- void handleDeepLinking(Uri? uri) {
235
- if (uri == null || !mounted) return;
236
-
237
- Navigator.of(navigatorKey.currentContext!).pushNamed(Routes.auth,
238
- arguments: (bool isAuthenticatedSuccessfully, AuthPageState auth) {
239
- if (isAuthenticatedSuccessfully) {
240
- auth.close(route: Routes.send, arguments: PaymentRequest.fromUri(uri));
241
- }
242
- });
243
-
244
- // Navigator.pushNamed(
245
- // navigatorKey.currentContext!,
246
- // Routes.send,
247
- // arguments: PaymentRequest.fromUri(uri),
248
- // );
205
}
206
207
Future<void> _handleInitialUri() async {
lib/src/screens/root/root.dart
+38
-1
@@ -1,10 +1,12 @@
1
import 'dart:async';
2
+import 'package:cake_wallet/utils/payment_request.dart';
3
import 'package:flutter/material.dart';
4
import 'package:cake_wallet/routes.dart';
5
import 'package:cake_wallet/src/screens/auth/auth_page.dart';
6
import 'package:cake_wallet/store/app_store.dart';
7
import 'package:cake_wallet/store/authentication_store.dart';
8
import 'package:cake_wallet/entities/qr_scanner.dart';
9
+import 'package:uni_links/uni_links.dart';
10
11
class Root extends StatefulWidget {
12
Root(
@@ -35,6 +37,9 @@ class RootState extends State<Root> with WidgetsBindingObserver {
37
bool _isInactive;
38
bool _postFrameCallback;
39
40
+ StreamSubscription<Uri?>? stream;
41
+ Uri? launchUri;
42
+
43
@override
44
void initState() {
45
_isInactiveController = StreamController<bool>.broadcast();
@@ -42,6 +47,34 @@ class RootState extends State<Root> with WidgetsBindingObserver {
47
_postFrameCallback = false;
48
WidgetsBinding.instance.addObserver(this);
49
super.initState();
50
+
51
+ initUniLinks();
52
+ }
53
+
54
+ @override
55
+ void dispose() {
56
+ stream?.cancel();
57
+ super.dispose();
58
+ }
59
+
60
+ /// handle app links while the app is already started
61
+ /// whether its in the foreground or in the background.
62
+ Future<void> initUniLinks() async {
63
+ try {
64
+ stream = uriLinkStream.listen((Uri? uri) {
65
+ handleDeepLinking(uri);
66
+ });
67
+
68
+ handleDeepLinking(await getInitialUri());
69
+ } catch (e) {
70
+ print(e);
71
+ }
72
+ }
73
+
74
+ void handleDeepLinking(Uri? uri) {
75
+ if (uri == null || !mounted) return;
76
+
77
+ launchUri = uri;
78
}
79
80
@override
@@ -75,7 +108,11 @@ class RootState extends State<Root> with WidgetsBindingObserver {
108
}
109
110
_reset();
78
- auth.close();
111
+ auth.close(
112
+ route: launchUri != null ? Routes.send : null,
113
+ arguments: PaymentRequest.fromUri(launchUri),
114
+ );
115
+ launchUri = null;
116
});
117
});
118
}