Skip to content

Commit 63a739b

Browse files
author
ashrawat2
committed
Added deeplink and analytics
1 parent 95da4f8 commit 63a739b

24 files changed

+853
-557
lines changed

lib/core/analytics/analytics.dart

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
abstract class Analytics {
2+
void logEvent({required String name, required Object value});
3+
4+
void logEventWithParam({required String name, Map<String, Object?>? parameters});
5+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
class AnalyticsConstants {
2+
//Keys
3+
static const String login = 'login';
4+
static const String otp = 'OTP';
5+
static const String splash = 'splash';
6+
7+
//values
8+
static const String verifyWithOTP = 'verify user with OTP';
9+
static const String loginWithUsername = 'login with username';
10+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import 'package:firebase_analytics/firebase_analytics.dart';
2+
import 'package:fluttercommerce/core/analytics/analytics.dart';
3+
import 'package:injectable/injectable.dart';
4+
5+
@Injectable(as: Analytics)
6+
class FirebaseAnalyticsImpl extends Analytics {
7+
final FirebaseAnalytics _analytics;
8+
9+
FirebaseAnalyticsImpl(this._analytics);
10+
11+
@override
12+
void logEvent({required String name, required Object value}) {
13+
_analytics.logEvent(name: name, parameters: {"value": value});
14+
}
15+
16+
@override
17+
void logEventWithParam({required String name, Map<String, Object?>? parameters}) {
18+
_analytics.logEvent(name: name, parameters: parameters);
19+
}
20+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import 'package:app_links/app_links.dart';
2+
3+
import 'deep_link.dart';
4+
5+
class AppDeeplink extends Deeplink {
6+
final AppLinks _appLinks = AppLinks();
7+
8+
@override
9+
Future<String> createDeepLink(String path, Map<String, dynamic>? value, {bool? short}) {
10+
throw UnimplementedError();
11+
}
12+
13+
@override
14+
Future<Uri?>? initDeepLinks() async {
15+
final uri = await _appLinks.getInitialAppLink();
16+
return uri;
17+
}
18+
19+
Future<Uri?>? getLatestAppLink() async {
20+
final getLatestAppLink = await _appLinks.getLatestAppLink();
21+
return getLatestAppLink;
22+
}
23+
24+
@override
25+
void listenToDeepLinks(Function(Uri uri) onDeepLinkCalled) {
26+
_appLinks.uriLinkStream.forEach((uri) {
27+
onDeepLinkCalled(uri);
28+
});
29+
}
30+
}

lib/core/deeplink/deep_link.dart

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
abstract class Deeplink {
2+
Future<String> createDeepLink(String path, Map<String, dynamic>? value, {bool? short});
3+
4+
Future<Uri?>? initDeepLinks();
5+
6+
void listenToDeepLinks(Function(Uri uri) onDeepLinkCalled);
7+
}
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
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

Comments
 (0)