diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 1775312c..7344fd3d 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -144,6 +144,9 @@ android:theme="@style/LaunchTheme" android:windowSoftInputMode="adjustResize" tools:node="merge"> + diff --git a/ios/Podfile b/ios/Podfile index 8706dcdb..87d62e9b 100644 --- a/ios/Podfile +++ b/ios/Podfile @@ -3,7 +3,7 @@ platform :ios, '14.0' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' -# use_frameworks! :linkage => :static +use_frameworks! :linkage => :static project 'Runner', { 'Debug' => :debug, 'Profile' => :release, diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index 63df2a6d..c70c2123 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -8,22 +8,21 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 17AB294D2D8707DE001C125B /* Penguin.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 17AB29452D86D210001C125B /* Penguin.xcframework */; }; + 17AB294E2D8707DE001C125B /* Penguin.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 17AB29452D86D210001C125B /* Penguin.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 17AB29502D8707DF001C125B /* PenguinINRenderer.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 17AB29442D86D210001C125B /* PenguinINRenderer.xcframework */; }; + 17AB29512D8707DF001C125B /* PenguinINRenderer.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 17AB29442D86D210001C125B /* PenguinINRenderer.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 17AB29522D8707E2001C125B /* PenNavUI.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 17AB29432D86D210001C125B /* PenNavUI.xcframework */; }; + 17AB29532D8707E2001C125B /* PenNavUI.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 17AB29432D86D210001C125B /* PenNavUI.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 29631B9E2C96C7F600DF5916 /* PenguinNavigator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29631B9D2C96C7F600DF5916 /* PenguinNavigator.swift */; }; 301C79AE27200D9F0016307B /* OpenTokRemoteVideoFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 301C79AD27200D9F0016307B /* OpenTokRemoteVideoFactory.swift */; }; 301C79B027200DED0016307B /* OpenTokLocalVideoFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 301C79AF27200DED0016307B /* OpenTokLocalVideoFactory.swift */; }; 306FE6C8271D790C002D6EFC /* OpenTokPlatformBridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 306FE6C7271D790C002D6EFC /* OpenTokPlatformBridge.swift */; }; 306FE6CB271D8B73002D6EFC /* OpenTok.swift in Sources */ = {isa = PBXBuildFile; fileRef = 306FE6CA271D8B73002D6EFC /* OpenTok.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 55DE18989C1F69DC483B9FB6 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C56AF9B31AA04A5292EEA39F /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 762D738E274E42650063CE73 /* ring_30Sec.caf in Resources */ = {isa = PBXBuildFile; fileRef = 762D738C274E42650063CE73 /* ring_30Sec.caf */; }; 762D738F274E42650063CE73 /* ring_30Sec.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = 762D738D274E42650063CE73 /* ring_30Sec.mp3 */; }; - 7651B82F2D3E9CA40066B33A /* PenguinINRenderer.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7651B82C2D3E9CA40066B33A /* PenguinINRenderer.xcframework */; }; - 7651B8302D3E9CA40066B33A /* PenguinINRenderer.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 7651B82C2D3E9CA40066B33A /* PenguinINRenderer.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 7651B8312D3E9CA40066B33A /* Penguin.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7651B82D2D3E9CA40066B33A /* Penguin.xcframework */; }; - 7651B8322D3E9CA40066B33A /* Penguin.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 7651B82D2D3E9CA40066B33A /* Penguin.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 7651B8332D3E9CA40066B33A /* PenNavUI.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7651B82E2D3E9CA40066B33A /* PenNavUI.xcframework */; }; - 7651B8342D3E9CA40066B33A /* PenNavUI.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 7651B82E2D3E9CA40066B33A /* PenNavUI.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 76815B27275F381C00E66E94 /* HealthKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 76815B26275F381C00E66E94 /* HealthKit.framework */; }; 76962ECE28AE5C10004EAE09 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 76962ECD28AE5C10004EAE09 /* GoogleService-Info.plist */; }; 76D71B672C6B7F9C00DAFB84 /* HMGPenguinInPlatformBridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76D71B662C6B7F9C00DAFB84 /* HMGPenguinInPlatformBridge.swift */; }; @@ -52,18 +51,19 @@ E9C8C136256BACDA00EFFB62 /* HMG_Guest.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9C8C135256BACDA00EFFB62 /* HMG_Guest.swift */; }; E9E27168256E3A4000F49B69 /* LocalizedFromFlutter.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9E27167256E3A4000F49B69 /* LocalizedFromFlutter.swift */; }; E9F7623B25922BCE00FB5CCF /* FlutterConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9F7623A25922BCE00FB5CCF /* FlutterConstants.swift */; }; + F74B5001ECD140A97800DC22 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C56AF9B31AA04A5292EEA39F /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXCopyFilesBuildPhase section */ - 7651B8352D3E9CA50066B33A /* Embed Frameworks */ = { + 17AB294F2D8707DE001C125B /* Embed Frameworks */ = { isa = PBXCopyFilesBuildPhase; - buildActionMask = 12; + buildActionMask = 2147483647; dstPath = ""; dstSubfolderSpec = 10; files = ( - 7651B8322D3E9CA40066B33A /* Penguin.xcframework in Embed Frameworks */, - 7651B8302D3E9CA40066B33A /* PenguinINRenderer.xcframework in Embed Frameworks */, - 7651B8342D3E9CA40066B33A /* PenNavUI.xcframework in Embed Frameworks */, + 17AB29512D8707DF001C125B /* PenguinINRenderer.xcframework in Embed Frameworks */, + 17AB294E2D8707DE001C125B /* Penguin.xcframework in Embed Frameworks */, + 17AB29532D8707E2001C125B /* PenNavUI.xcframework in Embed Frameworks */, ); name = "Embed Frameworks"; runOnlyForDeploymentPostprocessing = 0; @@ -74,6 +74,9 @@ 02C0468611167F0E858967A9 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 17AB29432D86D210001C125B /* PenNavUI.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = PenNavUI.xcframework; path = Frameworks/PenNavUI.xcframework; sourceTree = ""; }; + 17AB29442D86D210001C125B /* PenguinINRenderer.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = PenguinINRenderer.xcframework; path = Frameworks/PenguinINRenderer.xcframework; sourceTree = ""; }; + 17AB29452D86D210001C125B /* Penguin.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = Penguin.xcframework; path = Frameworks/Penguin.xcframework; sourceTree = ""; }; 29631B9D2C96C7F600DF5916 /* PenguinNavigator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PenguinNavigator.swift; sourceTree = ""; }; 301C79AD27200D9F0016307B /* OpenTokRemoteVideoFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OpenTokRemoteVideoFactory.swift; sourceTree = ""; }; 301C79AF27200DED0016307B /* OpenTokLocalVideoFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OpenTokLocalVideoFactory.swift; sourceTree = ""; }; @@ -84,12 +87,6 @@ 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 762D738C274E42650063CE73 /* ring_30Sec.caf */ = {isa = PBXFileReference; lastKnownFileType = file; name = ring_30Sec.caf; path = ../../assets/sounds/ring_30Sec.caf; sourceTree = ""; }; 762D738D274E42650063CE73 /* ring_30Sec.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; name = ring_30Sec.mp3; path = ../../assets/sounds/ring_30Sec.mp3; sourceTree = ""; }; - 7643E4042BE0D0B400BD2F25 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/Main_Custom.strings; sourceTree = ""; }; - 7643E4052BE0D0B400BD2F25 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/Main.strings; sourceTree = ""; }; - 7643E4062BE0D0B400BD2F25 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/LaunchScreen.strings; sourceTree = ""; }; - 7651B82C2D3E9CA40066B33A /* PenguinINRenderer.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = PenguinINRenderer.xcframework; path = Frameworks/PenguinINRenderer.xcframework; sourceTree = ""; }; - 7651B82D2D3E9CA40066B33A /* Penguin.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = Penguin.xcframework; path = Frameworks/Penguin.xcframework; sourceTree = ""; }; - 7651B82E2D3E9CA40066B33A /* PenNavUI.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = PenNavUI.xcframework; path = Frameworks/PenNavUI.xcframework; sourceTree = ""; }; 76815B26275F381C00E66E94 /* HealthKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = HealthKit.framework; path = System/Library/Frameworks/HealthKit.framework; sourceTree = SDKROOT; }; 76962ECD28AE5C10004EAE09 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; 76D71B662C6B7F9C00DAFB84 /* HMGPenguinInPlatformBridge.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HMGPenguinInPlatformBridge.swift; sourceTree = ""; }; @@ -134,13 +131,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 7651B8312D3E9CA40066B33A /* Penguin.xcframework in Frameworks */, 76F2556127F1FFED0062C1CD /* PassKit.framework in Frameworks */, 76815B27275F381C00E66E94 /* HealthKit.framework in Frameworks */, E9620805255C2ED100D3A35D /* NetworkExtension.framework in Frameworks */, - 7651B8332D3E9CA40066B33A /* PenNavUI.xcframework in Frameworks */, - 7651B82F2D3E9CA40066B33A /* PenguinINRenderer.xcframework in Frameworks */, - 55DE18989C1F69DC483B9FB6 /* Pods_Runner.framework in Frameworks */, + F74B5001ECD140A97800DC22 /* Pods_Runner.framework in Frameworks */, + 17AB29522D8707E2001C125B /* PenNavUI.xcframework in Frameworks */, + 17AB294D2D8707DE001C125B /* Penguin.xcframework in Frameworks */, + 17AB29502D8707DF001C125B /* PenguinINRenderer.xcframework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -160,9 +157,9 @@ 555EAAA626EFB641859EF0BE /* Frameworks */ = { isa = PBXGroup; children = ( - 7651B82D2D3E9CA40066B33A /* Penguin.xcframework */, - 7651B82C2D3E9CA40066B33A /* PenguinINRenderer.xcframework */, - 7651B82E2D3E9CA40066B33A /* PenNavUI.xcframework */, + 17AB29452D86D210001C125B /* Penguin.xcframework */, + 17AB29442D86D210001C125B /* PenguinINRenderer.xcframework */, + 17AB29432D86D210001C125B /* PenNavUI.xcframework */, 76F2556027F1FFED0062C1CD /* PassKit.framework */, 76815B26275F381C00E66E94 /* HealthKit.framework */, E9620804255C2ED100D3A35D /* NetworkExtension.framework */, @@ -298,7 +295,7 @@ 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, - 7651B8352D3E9CA50066B33A /* Embed Frameworks */, + 17AB294F2D8707DE001C125B /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, 191312D8478950EB12CBDD28 /* [CP] Embed Pods Frameworks */, 4CC68CB45B720A365C7CF7DC /* [CP] Copy Pods Resources */, @@ -334,7 +331,6 @@ knownRegions = ( en, Base, - ar, ); mainGroup = 97C146E51CF9000F007C117D; productRefGroup = 97C146EF1CF9000F007C117D /* Products */; @@ -496,7 +492,6 @@ isa = PBXVariantGroup; children = ( 97C146FB1CF9000F007C117D /* Base */, - 7643E4052BE0D0B400BD2F25 /* ar */, ); name = Main.storyboard; sourceTree = ""; @@ -505,7 +500,6 @@ isa = PBXVariantGroup; children = ( 97C147001CF9000F007C117D /* Base */, - 7643E4062BE0D0B400BD2F25 /* ar */, ); name = LaunchScreen.storyboard; sourceTree = ""; @@ -514,7 +508,6 @@ isa = PBXVariantGroup; children = ( E91B53A2256AAD8200E96549 /* Base */, - 7643E4042BE0D0B400BD2F25 /* ar */, ); name = Main_Custom.storyboard; sourceTree = ""; diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist index a67c0647..91a4aedb 100644 --- a/ios/Runner/Info.plist +++ b/ios/Runner/Info.plist @@ -122,5 +122,7 @@ MBXAccessToken pk.eyJ1IjoicndhaWQiLCJhIjoiY2x5cGo4aHNjMGNsbTJyc2djempobGQxaSJ9.RCaC6WrUt4A4YnZNfxnONQ + FlutterDeepLinkingEnabled + diff --git a/ios/Runner/Runner.entitlements b/ios/Runner/Runner.entitlements index 44ce1b68..244f5e17 100644 --- a/ios/Runner/Runner.entitlements +++ b/ios/Runner/Runner.entitlements @@ -4,6 +4,11 @@ aps-environment development + com.apple.developer.associated-domains + + applinks:www.hmg.com + webcredentials:example.com + com.apple.developer.healthkit com.apple.developer.healthkit.access @@ -26,5 +31,9 @@ $(TeamIdentifierPrefix)* + com.apple.developer.associated-domains + + applinks:hmg.com + diff --git a/lib/config/config.dart b/lib/config/config.dart index 7faa9202..f296cca9 100644 --- a/lib/config/config.dart +++ b/lib/config/config.dart @@ -708,6 +708,7 @@ var applePayMerchantId = "merchant.com.hmgwebservices"; class AppGlobal { static var context; + static var projectViewModelContext; AppSharedPreferences sharedPref = AppSharedPreferences(); diff --git a/lib/main.dart b/lib/main.dart index cd2aab7a..03ac65fc 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,5 +1,7 @@ +import 'dart:async'; import 'dart:io'; +import 'package:app_links/app_links.dart'; import 'package:diplomaticquarterapp/config/config.dart'; import 'package:diplomaticquarterapp/core/viewModels/PharmacyPagesViewModel.dart'; import 'package:diplomaticquarterapp/core/viewModels/dashboard_view_model.dart'; @@ -10,12 +12,11 @@ import 'package:diplomaticquarterapp/services/robo_search/event_provider.dart'; import 'package:diplomaticquarterapp/services/robo_search/search_provider.dart'; import 'package:diplomaticquarterapp/theme/theme_notifier.dart'; import 'package:diplomaticquarterapp/theme/theme_value.dart'; +import 'package:diplomaticquarterapp/uitl/DeepLinkHandler.dart'; import 'package:diplomaticquarterapp/uitl/PlatformBridge.dart'; import 'package:diplomaticquarterapp/uitl/navigation_service.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:firebase_core/firebase_core.dart'; -import 'package:firebase_crashlytics/firebase_crashlytics.dart'; -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:provider/provider.dart'; @@ -59,7 +60,7 @@ class MyHttpOverrides extends HttpOverrides { class _MyApp extends State { // late AppUpdateInfo _updateInfo; - + StreamSubscription? _linkSubscription; final GlobalKey navigatorKey = GlobalKey(); //0537503378 @@ -92,9 +93,30 @@ class _MyApp extends State { // if (Platform.isAndroid) checkForUpdate(); ThemeNotifier(defaultTheme()); + initDeepLinks(); super.initState(); } + void dispose() { + _linkSubscription?.cancel(); + + super.dispose(); + } + + Future initDeepLinks() async { + // Handle links + _linkSubscription = AppLinks().uriLinkStream.listen((uri) { + debugPrint('onAppLink: $uri'); + openAppLink(uri); + }); + } + + void openAppLink(Uri uri) { + print("the uri is $uri"); + DeepLinkHandler.instance.handleDeepLinkAndNavigation( + locator().navigatorKey.currentState, uri, context); + } + @override Widget build(BuildContext context) { PlatformBridge.init(context); @@ -151,7 +173,8 @@ class _MyApp extends State { ], child: Consumer( builder: (context, projectProvider, child) => MaterialApp( - builder: (_, mchild) { + builder: (context, mchild) { + AppGlobal.projectViewModelContext = context; return MediaQuery( data: MediaQuery.of(context).copyWith( textScaler: TextScaler.linear(1.0), diff --git a/lib/pages/landing/widgets/services_view.dart b/lib/pages/landing/widgets/services_view.dart index 8ca7f76b..fa0134bc 100644 --- a/lib/pages/landing/widgets/services_view.dart +++ b/lib/pages/landing/widgets/services_view.dart @@ -41,10 +41,8 @@ import 'package:diplomaticquarterapp/uitl/penguin_method_channel.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/uitl/utils.dart'; import 'package:diplomaticquarterapp/uitl/utils_new.dart'; -import 'package:diplomaticquarterapp/vital_signs/vital_sign.dart'; import 'package:diplomaticquarterapp/widgets/dialogs/covid_consent_dialog.dart'; import 'package:diplomaticquarterapp/widgets/dialogs/location_selection_dialog.dart'; -import 'package:diplomaticquarterapp/widgets/dialogs/radio_selection_dialog.dart'; import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; @@ -220,7 +218,7 @@ class ServicesView extends StatelessWidget { ].request().whenComplete(() { PenguinMethodChannel().launch("penguin", projectViewModel.isArabic ? "ar" : "en", projectViewModel.authenticatedUserObject.user.patientID.toString()); }); - } // + } } handleHomePageServices(HmgServices hmgServices, BuildContext context) { diff --git a/lib/uitl/DeepLinkHandler.dart b/lib/uitl/DeepLinkHandler.dart new file mode 100644 index 00000000..9f46242b --- /dev/null +++ b/lib/uitl/DeepLinkHandler.dart @@ -0,0 +1,100 @@ +import 'package:diplomaticquarterapp/config/shared_pref_kay.dart'; +import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart'; +import 'package:diplomaticquarterapp/uitl/penguin_method_channel.dart'; +import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart'; +import 'package:flutter/material.dart'; +import 'package:permission_handler/permission_handler.dart'; +import 'package:provider/provider.dart'; + +import '../pages/BookAppointment/Search.dart'; +import 'app-permissions.dart'; + +enum DeepLinkNavigation { + APPOINTMENT("/appointment", false), + LIVE_CARE("/livecare", true), + NAVIGATE("/navigate", false); + + final String name; + final bool isLoginRequired; + + const DeepLinkNavigation(this.name, this.isLoginRequired); +} + +class DeepLinkHandler { + final projectID = "projectID"; + final clinicId = "clinicId"; + + DeepLinkNavigation? navigationType; + Uri? uri; + + DeepLinkHandler._(); + + static final DeepLinkHandler _instance = DeepLinkHandler._(); + + static DeepLinkHandler get instance => _instance; + + void handleDeepLinkAndNavigation( + NavigatorState? currentState, Uri uri, BuildContext context) async { + var url = uri.toString().replaceFirst( + "https://hmg.com/Pages/PageNotFoundError.aspx?requestUrl=", ""); + + uri = Uri.parse(url); + this.uri = uri; + print( + "the uri contains ${uri.path.toLowerCase() == DeepLinkNavigation.NAVIGATE.name}"); + print("the uri.path ${uri.path}"); + if (uri.path.toLowerCase() == DeepLinkNavigation.NAVIGATE.name) { + await Future.delayed(Duration(seconds: 1)); + navigationType = DeepLinkNavigation.NAVIGATE; + var queryParam = uri.queryParameters; + print("the query params are $queryParam"); + initPenguinSDK( + queryParam[projectID] ?? "", queryParam[clinicId] ?? "", context); + removeDeepLinkData(); + return; + } + if (uri.path.toLowerCase() == DeepLinkNavigation.APPOINTMENT.name) { + navigationType = DeepLinkNavigation.NAVIGATE; + currentState?.push(FadePage(page: Search())); + removeDeepLinkData(); + return; + } + if (uri.path.toLowerCase() == DeepLinkNavigation.LIVE_CARE.name) { + var viewModel = Provider.of(context); + if (viewModel.isLogin) { + currentState?.push(FadePage(page: Search())); + removeDeepLinkData(); + return; + } else {} + } + } + + void removeDeepLinkData() { + navigationType = null; + uri = null; + } + + initPenguinSDK( + String projectId, String clinicID, BuildContext context) async { + AppSharedPreferences sharedPref = AppSharedPreferences(); + NavigationClinicDetails data = NavigationClinicDetails(); + data.clinicId = clinicID; + + data.projectId = projectId; + final bool permited = await AppPermission.askPenguinPermissions(); + if (!permited) { + Map statuses = await [ + Permission.location, + Permission.bluetooth, + Permission.bluetoothConnect, + Permission.bluetoothScan, + Permission.activityRecognition, + ].request().whenComplete(() async { + final currentLanguage = + await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar'); + PenguinMethodChannel() + .launch("penguin", currentLanguage, "null", details: data); + }); + } + } +} diff --git a/lib/widgets/avatar/large_avatar.dart b/lib/widgets/avatar/large_avatar.dart index c08820ce..e7919aa4 100644 --- a/lib/widgets/avatar/large_avatar.dart +++ b/lib/widgets/avatar/large_avatar.dart @@ -17,6 +17,7 @@ class LargeAvatar extends StatelessWidget { LargeAvatar({Key? key, this.name, this.url, this.disableProfileView = false, this.radius = 70.0, this.width = 70, this.height = 60, this.onTap, this.isAppointmentAvatar = false}) : super(key: key); final String? name; + final Color red = Colors.red; final String? url; final bool disableProfileView; final bool isAppointmentAvatar; diff --git a/pubspec.yaml b/pubspec.yaml index e6c2caca..53ad9d77 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,7 +1,7 @@ name: diplomaticquarterapp description: A new Flutter application. -version: 4.6.009+1 +version: 4.6.085+4050085 environment: sdk: ">=3.0.0 <3.13.0" @@ -189,7 +189,9 @@ dependencies: firebase_crashlytics: ^3.0.0 cloudflare_turnstile: ^2.0.1 + app_links: ^6.4.0 device_info_plus: ^10.1.2 +# app_links: ^6.4.0 # vital_sign_camera: # path: ./packages/vital_sign_camera