|
| 1 | +import 'package:firebase_dynamic_links/firebase_dynamic_links.dart'; |
| 2 | +import 'package:package_info/package_info.dart'; |
| 3 | + |
| 4 | +import 'deep_link.dart'; |
| 5 | + |
| 6 | +class FirebaseDeepLink extends Deeplink { |
| 7 | + final FirebaseDynamicLinks _firebaseDynamicLinks; |
| 8 | + |
| 9 | + FirebaseDeepLink(this._firebaseDynamicLinks); |
| 10 | + |
| 11 | + @override |
| 12 | + Future<Uri?>? initDeepLinks() async { |
| 13 | + final data = await _firebaseDynamicLinks.getInitialLink(); |
| 14 | + final deepLink = data?.link; |
| 15 | + return deepLink; |
| 16 | + } |
| 17 | + |
| 18 | + @override |
| 19 | + void listenToDeepLinks(Function(Uri uri) onDeepLinkCalled) { |
| 20 | + _firebaseDynamicLinks.onLink.listen((PendingDynamicLinkData? dynamicLink) { |
| 21 | + final deepLink = dynamicLink?.link; |
| 22 | + |
| 23 | + if (deepLink != null) { |
| 24 | + onDeepLinkCalled(deepLink); |
| 25 | + } |
| 26 | + }); |
| 27 | + } |
| 28 | + |
| 29 | + @override |
| 30 | + Future<String> createDeepLink(String path, Map<String, dynamic>? value, {bool? short}) async { |
| 31 | + final packageInfo = await PackageInfo.fromPlatform(); |
| 32 | + var packageName = packageInfo.packageName; |
| 33 | + var appStoreId = ""; |
| 34 | + var pageLink = 'https://fluttercommerce.page.link'; |
| 35 | + var androidMinimumVersion = 0; |
| 36 | + var iosMinimumVersion = 0; |
| 37 | + final parameters = DynamicLinkParameters( |
| 38 | + uriPrefix: pageLink, |
| 39 | + link: Uri( |
| 40 | + scheme: 'http', |
| 41 | + host: 'fluttercommerce.io', |
| 42 | + path: '$path', |
| 43 | + queryParameters: value, |
| 44 | + ), |
| 45 | + androidParameters: AndroidParameters( |
| 46 | + packageName: packageName, |
| 47 | + minimumVersion: androidMinimumVersion, |
| 48 | + ), |
| 49 | + iosParameters: IOSParameters( |
| 50 | + bundleId: packageName, |
| 51 | + appStoreId: appStoreId, |
| 52 | + minimumVersion: '$iosMinimumVersion', |
| 53 | + ), |
| 54 | + ); |
| 55 | + |
| 56 | + Uri url; |
| 57 | + if (short ?? false) { |
| 58 | + final shortLink = await _firebaseDynamicLinks.buildShortLink( |
| 59 | + parameters, |
| 60 | + ); |
| 61 | + url = shortLink.shortUrl; |
| 62 | + } else { |
| 63 | + url = await _firebaseDynamicLinks.buildLink(parameters); |
| 64 | + } |
| 65 | + return url.toString(); |
| 66 | + } |
| 67 | +} |
0 commit comments