Add the ability to launch app from Crypto QR codes

OmarHatem28 committed Aug 9, 2022 at 13:34 UTC 01adf863d06a179332136a3fd80210a38b146265
2 files changed +46
android/app/src/main/AndroidManifestBase.xml
+9
@@ -38,6 +38,15 @@
38 android:scheme="cakewallet"
39 android:host="y.at" />
40 </intent-filter>
41 + <!-- bitcoin qr code scheme -->
42 + <intent-filter android:autoVerify="true">
43 + <action android:name="android.intent.action.VIEW" />
44 + <category android:name="android.intent.category.DEFAULT" />
45 + <category android:name="android.intent.category.BROWSABLE" />
46 + <data android:scheme="bitcoin" />
47 + <data android:scheme="monero" />
48 + <data android:scheme="litecoin" />
49 + </intent-filter>
50 </activity>
51 <meta-data
52 android:name="flutterEmbedding"
lib/main.dart
+37
@@ -202,6 +202,8 @@ class AppState extends State<App> with SingleTickerProviderStateMixin {
202 super.initState();
203 //_handleIncomingLinks();
204 //_handleInitialUri();
205 +
206 + initUniLinks();
207 }
208
209 @override
@@ -210,6 +212,41 @@ class AppState extends State<App> with SingleTickerProviderStateMixin {
212 super.dispose();
213 }
214
215 + /// handle app links while the app is already started - be it in
216 + /// the foreground or in the background.
217 + Future<void> initUniLinks() async {
218 + try {
219 + stream = getLinksStream().listen((String link) {
220 + handleDeepLinking(link);
221 + });
222 +
223 + final String initialLink = await getInitialLink();
224 +
225 + handleDeepLinking(initialLink);
226 + } catch (e) {
227 + print(e);
228 + }
229 + }
230 +
231 + void handleDeepLinking(String link) async {
232 + if (link == null || !mounted) return;
233 +
234 + final List<String> urlComponents = link.split(":");
235 +
236 + switch (urlComponents.first) {
237 + case "bitcoin":
238 + print("@@@@@@@@@@@@@@@@@@@@@@@@@@");
239 + print("Bitcoin QR Code: \n${link}");
240 + break;
241 + case "litecoin":
242 + case "haven":
243 + case "monero":
244 + default:
245 + print("@@@@@@@@@@@@@@@@@@@@@@@@@@");
246 + print(link);
247 + }
248 + }
249 +
250 Future<void> _handleInitialUri() async {
251 try {
252 final uri = await getInitialUri();