From a8b61f02cf30f8ad910749158c88c03e83d3ace9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E2=80=9Cnb9960=E2=80=9D?= <“nbodani8@gmail.com”>
Date: Mon, 8 Mar 2021 23:40:39 +0530
Subject: [PATCH] feat: dynamic link
---
android/app/build.gradle | 1 +
android/app/src/main/AndroidManifest.xml | 10 +++++
lib/main.dart | 2 +-
lib/services/dynamicLink.dart | 36 +++++++++++++++
lib/widgets/product/product_page.dart | 15 ++++++-
lib/widgets/splash.dart | 56 ++++++++++++++++++++++++
pubspec.yaml | 3 ++
7 files changed, 121 insertions(+), 2 deletions(-)
create mode 100644 lib/services/dynamicLink.dart
diff --git a/android/app/build.gradle b/android/app/build.gradle
index 5fc80e7..aeca324 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -60,4 +60,5 @@ flutter {
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
+ implementation 'com.google.firebase:firebase-dynamic-links'
}
diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index d098a2f..cf39cd2 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -37,6 +37,16 @@
+
+
+
+
+
+
+
+
diff --git a/lib/main.dart b/lib/main.dart
index a0788f4..218e21b 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -22,7 +22,7 @@ class MyApp extends StatelessWidget {
routes: {
'/dashboard': (BuildContext context) => Dashboard(),
},
- home: Splash(),
+ home: Splash(initLink: true),
);
}
}
diff --git a/lib/services/dynamicLink.dart b/lib/services/dynamicLink.dart
new file mode 100644
index 0000000..6864eb1
--- /dev/null
+++ b/lib/services/dynamicLink.dart
@@ -0,0 +1,36 @@
+import 'package:firebase_dynamic_links/firebase_dynamic_links.dart';
+import 'package:flutter/material.dart';
+
+class DynamicLinkService {
+ static Future createDynamicLink(
+ {int height,
+ String text,
+ String owner,
+ String image,
+ String seller,
+ String amount,
+ bool isProduct = false}) async {
+ final DynamicLinkParameters parameters = DynamicLinkParameters(
+ uriPrefix: 'https://relicbazaar.page.link',
+ // text: text,
+ // owner: owner,
+ // image: image,
+ // prodHeight: height,
+ // seller: seller,
+ // amount: amount,
+ link: isProduct
+ ? Uri.parse(
+ 'https://relicbazaar.page.link.com/?isProduct=$isProduct&text=$text&height=$height&image=$image&seller=$seller&amount=$amount&owner=$owner')
+ : Uri.parse(
+ 'https://relicbazaar.page.link.com/?isProduct=$isProduct'),
+ androidParameters: AndroidParameters(
+ packageName: 'com.example.retro_shopping',
+ ),
+ );
+ Uri url;
+ final ShortDynamicLink shortLink = await parameters.buildShortLink();
+ url = shortLink.shortUrl;
+
+ return url;
+ }
+}
diff --git a/lib/widgets/product/product_page.dart b/lib/widgets/product/product_page.dart
index d8c24b0..9a05b3b 100644
--- a/lib/widgets/product/product_page.dart
+++ b/lib/widgets/product/product_page.dart
@@ -345,7 +345,20 @@ class _ProductPageState extends State {
width: width * 0.12,
height: height * 0.05,
borderColor: Colors.white,
- )
+ ),
+ RetroButton(
+ child: Center(
+ child: Icon(
+ Icons.share,
+ color: RelicColors.primaryColor,
+ ),
+ ),
+ upperColor: Colors.white,
+ lowerColor: Colors.black,
+ width: width * 0.12,
+ height: height * 0.05,
+ borderColor: Colors.white,
+ ),
],
),
),
diff --git a/lib/widgets/splash.dart b/lib/widgets/splash.dart
index 6fb3dd3..6ab6b29 100644
--- a/lib/widgets/splash.dart
+++ b/lib/widgets/splash.dart
@@ -1,7 +1,12 @@
import 'dart:async';
import 'package:flutter/material.dart';
+import 'package:firebase_dynamic_links/firebase_dynamic_links.dart';
+import 'package:retro_shopping/helpers/slide_route.dart';
+import 'package:retro_shopping/widgets/product/product_page.dart';
class Splash extends StatefulWidget {
+ final bool initLink;
+ Splash({this.initLink});
@override
_SplashState createState() => _SplashState();
}
@@ -11,6 +16,57 @@ class _SplashState extends State {
void initState() {
super.initState();
startTime();
+ _initLink();
+ }
+
+ @override
+ void dispose() {
+ super.dispose();
+ }
+
+ Future initDynamicLinks() async {
+ final PendingDynamicLinkData data =
+ await FirebaseDynamicLinks.instance.getInitialLink();
+
+ await _handleDeepLink(data);
+
+ // Register a link callback to fire if the app is opened up from the background
+ // using a dynamic link.
+ FirebaseDynamicLinks.instance.onLink(
+ onSuccess: (PendingDynamicLinkData dynamicLink) async {
+ // handle link that has been retrieved
+ await _handleDeepLink(dynamicLink);
+ }, onError: (OnLinkErrorException e) async {
+ print('Link Failed: ${e.message}');
+ });
+ }
+
+ Future _handleDeepLink(PendingDynamicLinkData data) async {
+ final Uri deepLink = data?.link;
+ if (deepLink != null) {
+ if (deepLink.queryParameters['isProduct'] == 'true') {
+ Navigator.push(
+ context,
+ SlideBottomRoute(
+ page: ProductPage(
+ text: deepLink.queryParameters['text'],
+ owner: deepLink.queryParameters['owner'],
+ image: deepLink.queryParameters['image'],
+ prodHeight: int.tryParse(deepLink.queryParameters['height']),
+ seller: deepLink.queryParameters['seller'],
+ amount: deepLink.queryParameters['amount'],
+ )));
+ }
+ }
+ }
+
+ _initLink() {
+ Future.delayed(
+ Duration(milliseconds: 300),
+ () async {
+ if (widget.initLink) await initDynamicLinks();
+ },
+ );
}
startTime() async {
diff --git a/pubspec.yaml b/pubspec.yaml
index ae956b9..a6bfdf4 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -31,6 +31,9 @@ dependencies:
google_fonts: ^1.1.0
razorpay_flutter: 1.1.0
fluttertoast: ^7.1.8
+ firebase_dynamic_links: ^0.6.3
+ esys_flutter_share: ^1.0.2
+
dependency_overrides:
flutter_svg: 0.19.0
dev_dependencies: