diff --git a/assets/langs/ar-SA.json b/assets/langs/ar-SA.json index 8cc2cba5..a30e45ad 100644 --- a/assets/langs/ar-SA.json +++ b/assets/langs/ar-SA.json @@ -101,7 +101,7 @@ "onlinePaymentSubtitle": "الدفع", "cancelNocaps": "إلغاء", "setReminder": "تذكير", - "nationalIdNumber": "رقم الهوية الوطنية", + "nationalIdNumber": "رقم الهوية / الإقام", "medicalFileNumber": "رقم الملف الطبي", "loginregister": "تسجيل الدخول / التسجيل", "poweredBy": "مدعوم من", @@ -114,7 +114,7 @@ "yes": "نعم", "no": "لا", "logintyperadio": "اختر من الخيارات أدناه لتسجيل الدخول إلى ملفك الطبي.", - "registernow": "سجل الآن", + "registernow": "تسجيل", "nationalID": "أدخل رقم الهوية", "nationalId": "الهوية الوطنية", "fileNo": "رقم الملف", @@ -125,7 +125,7 @@ "profileInfo": "يرجى إدخال معلومات الملف الشخصي", "submit": "تحديث", "forgotDesc": "أدخل رقم الهاتف المحمول لاستلام رقم الملف الطبي عبر الرسائل القصيرة", - "dob": "تاريخ الميلاد:", + "dob": "تاريخ الميلاد", "hijriDate": "الت��ريخ الهجري", "gregorianDate": "التاريخ الميلادي", "verifyLoginWith": "يرجى اختيار واحدة من الخيارات التالية للتحقق", @@ -815,10 +815,10 @@ "enterEmailDesc": "أدخل عنوان بريدك الإلكتروني لإكمال عملية إنشاء ملف طبي", "enterPhoneDesc": "أدخل رقم هاتفك لتلقي رمز التحقق ", "pleaseChooseOption": "الرجاء اختيار من الخيارات أدناه لتلقي رمز التحقق OTP", - "prepareToElevate": "هل أنت مستعد لتحسين صحتك ورفاهيتك؟", + "prepareToElevate": "رعايتك الصحية تبدأ من هنا", "iAcceptTermsConditions": "أوافق على الشروط والأحكام", - "alreadyHaveAccount": "هل لديك حساب بالفعل؟", - "loginNow": "تسجيل الدخول الآن", + "alreadyHaveAccount": "لديك حساب؟", + "loginNow": "تسجيل الدخول", "notice": "إشعار", "oR": "أو", "sendOTPWHATSAPP": "واتساب", @@ -859,8 +859,8 @@ "didntReceiveIt": "لم تستلمه؟", "resendOTP": "إعادة إرسال", "resendIn": "إعادة الإرسال في", - "pleaseEnterAnationalID": "يرجى إدخال رقم الهوية الوطنية", - "pleaseEnterAFileNumber": "يرجى إدخال رقم الملف", + "pleaseEnterAnationalID": "تسجيل الدخول برقم الهوية او الاقامة", + "pleaseEnterAFileNumber": "يرجى إدخال / رقم الملف", "pleaseEnterAValidEmail": "يرجى إدخال بريد إلكتروني صالح", "pleaseEnterFullName": "يرجى إدخال الاسم الكامل", "pleaseAcceptTermsConditions": "يرجى قبول الشروط والأحكام", @@ -1682,10 +1682,10 @@ "favouriteList": "قائمة المفضلة", "later": "لاحقاً", "cancelAppointmentConfirmMessage": "هل أنت متأكد من رغبتك في إلغاء هذا الموعد؟", - "acknowledged": "حسنا", + "acknowledged": "إغلاق", "searchLabResults": "بحث نتائج المختبر", "callForAssistance": "اتصل للحصول على المساعدة الفورية", - "oneWaySubtitle": "نقل من الموقع إلى المستشفى", + "oneWaySubtitle": "نقل م ن الموقع إلى المستشفى", "twoWaySubtitle": "نقل من الموقع إلى المستشفى والعودة مرة أخرى", "toHospitalSubtitle": "نقل من موقعك الحالي إلى المستشفى", "fromHospitalSubtitle": "نقل من المستشفى إلى منزلك", @@ -1749,5 +1749,6 @@ "m": "متر", "inch": "انش", "updateEmailAddressTitle": "تحديث البريد الالكتروني: ", - "enterNewNewContactNumber": "الرجاء اضافة رقم اتصال في حالة الطواريء: " + "enterNewNewContactNumber": "الرجاء اضافة رقم اتصال في حالة الطواريء: ", + "nationalIdFileNumber": "رقم الهوية / الإقامة / الملف" } diff --git a/assets/langs/en-US.json b/assets/langs/en-US.json index 75a7bcab..8bd5a2ad 100644 --- a/assets/langs/en-US.json +++ b/assets/langs/en-US.json @@ -99,7 +99,7 @@ "onlinePaymentSubtitle": "Payment", "cancelNocaps": "Cancel", "setReminder": "Set Reminder", - "nationalIdNumber": "National ID Number", + "nationalIdNumber": "National ID / Iqama", "medicalFileNumber": "Medical File Number", "loginregister": "Login / Register", "poweredBy": "Powered by", @@ -112,7 +112,7 @@ "yes": "Yes", "no": "No", "logintyperadio": " Choose from the below options to login to your medical file.", - "registernow": "Register Now", + "registernow": "Register", "nationalID": "Enter the Identification Number", "nationalId": "National ID", "fileNo": "File Number", @@ -123,7 +123,7 @@ "profileInfo": "Please enter profile information", "submit": "Submit", "forgotDesc": "Enter the mobile number to receive the Medical File Number via SMS", - "dob": "Birth Date:", + "dob": "Birth Date", "hijriDate": "Hijri Date", "gregorianDate": "Gregorian Date", "verifyLoginWith": "Please choose one of the following options to verify", @@ -806,7 +806,7 @@ "readInstructions": "Read Instructions", "searchLabReport": "Search Lab Report", "prescriptionDeliveryError": "This clinic doesn't support refill", - "prepareToElevate": "Prepared to elevate your health and well-being?", + "prepareToElevate": "Your wellness journey starts here.", "iAcceptTermsConditions": "I Accept the Terms and Conditions", "alreadyHaveAccount": "Already have an account?", "loginNow": "Login Now", @@ -849,7 +849,7 @@ "didntReceiveIt": "Didn't receive it?", "resendOTP": "Resend", "resendIn": "resend in", - "pleaseEnterAnationalID": "Please enter a national ID", + "pleaseEnterAnationalID": "ID or Iqama number is required", "pleaseEnterAFileNumber": "Please enter a file number", "pleaseEnterAValidEmail": "Please enter a valid email", "pleaseEnterFullName": "Please enter full name", @@ -998,7 +998,7 @@ "processingCheckIn": "Processing Check-In...", "bookingWaitingAppointment": "Booking Waiting Appointment, Please wait...", "enterValidIDorIqama": "Please enter a valid national ID or file number", - "selectAppointment": "Select Appointment", + "selectAppointment": "Select Axppointment", "rebookSameDoctor": "Rebook with same doctor", "queueing": "Queueing", "inQueue": "In Queue", @@ -1738,5 +1738,6 @@ "m": "m", "inch": "in", "updateEmailAddressTitle": "Enter the new email address to be updated: ", - "enterNewNewContactNumber": "Enter the new emergency contact number to be updated: " + "enterNewNewContactNumber": "Enter the new emergency contact number to be updated: ", + "nationalIdFileNumber": "National ID/File Number" } diff --git a/ios/Podfile.lock b/ios/Podfile.lock deleted file mode 100644 index deb3a53f..00000000 --- a/ios/Podfile.lock +++ /dev/null @@ -1,626 +0,0 @@ -PODS: - - amazon_payfort (1.1.4): - - Flutter - - PayFortSDK - - audio_session (0.0.1): - - Flutter - - barcode_scan2 (0.0.1): - - Flutter - - SwiftProtobuf (~> 1.33) - - connectivity_plus (0.0.1): - - Flutter - - CryptoSwift (1.8.4) - - device_calendar (0.0.1): - - Flutter - - device_calendar_plus_ios (0.0.1): - - Flutter - - device_info_plus (0.0.1): - - Flutter - - DKImagePickerController/Core (4.3.9): - - DKImagePickerController/ImageDataManager - - DKImagePickerController/Resource - - DKImagePickerController/ImageDataManager (4.3.9) - - DKImagePickerController/PhotoGallery (4.3.9): - - DKImagePickerController/Core - - DKPhotoGallery - - DKImagePickerController/Resource (4.3.9) - - DKPhotoGallery (0.0.19): - - DKPhotoGallery/Core (= 0.0.19) - - DKPhotoGallery/Model (= 0.0.19) - - DKPhotoGallery/Preview (= 0.0.19) - - DKPhotoGallery/Resource (= 0.0.19) - - SDWebImage - - SwiftyGif - - DKPhotoGallery/Core (0.0.19): - - DKPhotoGallery/Model - - DKPhotoGallery/Preview - - SDWebImage - - SwiftyGif - - DKPhotoGallery/Model (0.0.19): - - SDWebImage - - SwiftyGif - - DKPhotoGallery/Preview (0.0.19): - - DKPhotoGallery/Model - - DKPhotoGallery/Resource - - SDWebImage - - SwiftyGif - - DKPhotoGallery/Resource (0.0.19): - - SDWebImage - - SwiftyGif - - file_picker (0.0.1): - - DKImagePickerController/PhotoGallery - - Flutter - - Firebase/Analytics (11.15.0): - - Firebase/Core - - Firebase/Core (11.15.0): - - Firebase/CoreOnly - - FirebaseAnalytics (~> 11.15.0) - - Firebase/CoreOnly (11.15.0): - - FirebaseCore (~> 11.15.0) - - Firebase/Crashlytics (11.15.0): - - Firebase/CoreOnly - - FirebaseCrashlytics (~> 11.15.0) - - Firebase/Messaging (11.15.0): - - Firebase/CoreOnly - - FirebaseMessaging (~> 11.15.0) - - firebase_analytics (11.6.0): - - Firebase/Analytics (= 11.15.0) - - firebase_core - - Flutter - - firebase_core (3.15.2): - - Firebase/CoreOnly (= 11.15.0) - - Flutter - - firebase_crashlytics (4.3.10): - - Firebase/Crashlytics (= 11.15.0) - - firebase_core - - Flutter - - firebase_messaging (15.2.10): - - Firebase/Messaging (= 11.15.0) - - firebase_core - - Flutter - - FirebaseAnalytics (11.15.0): - - FirebaseAnalytics/Default (= 11.15.0) - - FirebaseCore (~> 11.15.0) - - FirebaseInstallations (~> 11.0) - - GoogleUtilities/AppDelegateSwizzler (~> 8.1) - - GoogleUtilities/MethodSwizzler (~> 8.1) - - GoogleUtilities/Network (~> 8.1) - - "GoogleUtilities/NSData+zlib (~> 8.1)" - - nanopb (~> 3.30910.0) - - FirebaseAnalytics/Default (11.15.0): - - FirebaseCore (~> 11.15.0) - - FirebaseInstallations (~> 11.0) - - GoogleAppMeasurement/Default (= 11.15.0) - - GoogleUtilities/AppDelegateSwizzler (~> 8.1) - - GoogleUtilities/MethodSwizzler (~> 8.1) - - GoogleUtilities/Network (~> 8.1) - - "GoogleUtilities/NSData+zlib (~> 8.1)" - - nanopb (~> 3.30910.0) - - FirebaseCore (11.15.0): - - FirebaseCoreInternal (~> 11.15.0) - - GoogleUtilities/Environment (~> 8.1) - - GoogleUtilities/Logger (~> 8.1) - - FirebaseCoreExtension (11.15.0): - - FirebaseCore (~> 11.15.0) - - FirebaseCoreInternal (11.15.0): - - "GoogleUtilities/NSData+zlib (~> 8.1)" - - FirebaseCrashlytics (11.15.0): - - FirebaseCore (~> 11.15.0) - - FirebaseInstallations (~> 11.0) - - FirebaseRemoteConfigInterop (~> 11.0) - - FirebaseSessions (~> 11.0) - - GoogleDataTransport (~> 10.0) - - GoogleUtilities/Environment (~> 8.1) - - nanopb (~> 3.30910.0) - - PromisesObjC (~> 2.4) - - FirebaseInstallations (11.15.0): - - FirebaseCore (~> 11.15.0) - - GoogleUtilities/Environment (~> 8.1) - - GoogleUtilities/UserDefaults (~> 8.1) - - PromisesObjC (~> 2.4) - - FirebaseMessaging (11.15.0): - - FirebaseCore (~> 11.15.0) - - FirebaseInstallations (~> 11.0) - - GoogleDataTransport (~> 10.0) - - GoogleUtilities/AppDelegateSwizzler (~> 8.1) - - GoogleUtilities/Environment (~> 8.1) - - GoogleUtilities/Reachability (~> 8.1) - - GoogleUtilities/UserDefaults (~> 8.1) - - nanopb (~> 3.30910.0) - - FirebaseRemoteConfigInterop (11.15.0) - - FirebaseSessions (11.15.0): - - FirebaseCore (~> 11.15.0) - - FirebaseCoreExtension (~> 11.15.0) - - FirebaseInstallations (~> 11.0) - - GoogleDataTransport (~> 10.0) - - GoogleUtilities/Environment (~> 8.1) - - GoogleUtilities/UserDefaults (~> 8.1) - - nanopb (~> 3.30910.0) - - PromisesSwift (~> 2.1) - - FLAnimatedImage (1.0.17) - - Flutter (1.0.0) - - flutter_callkit_incoming (0.0.1): - - CryptoSwift - - Flutter - - flutter_image_compress_common (1.0.0): - - Flutter - - Mantle - - SDWebImage - - SDWebImageWebPCoder - - flutter_inappwebview_ios (0.0.1): - - Flutter - - flutter_inappwebview_ios/Core (= 0.0.1) - - OrderedSet (~> 6.0.3) - - flutter_inappwebview_ios/Core (0.0.1): - - Flutter - - OrderedSet (~> 6.0.3) - - flutter_ios_voip_kit_karmm (0.8.0): - - Flutter - - flutter_local_notifications (0.0.1): - - Flutter - - flutter_nfc_kit (3.6.0): - - Flutter - - flutter_zoom_videosdk (0.0.1): - - Flutter - - ZoomVideoSDK/CptShare (= 2.1.10) - - ZoomVideoSDK/zm_annoter_dynamic (= 2.1.10) - - ZoomVideoSDK/zoomcml (= 2.1.10) - - ZoomVideoSDK/ZoomVideoSDK (= 2.1.10) - - fluttertoast (0.0.2): - - Flutter - - geolocator_apple (1.2.0): - - Flutter - - FlutterMacOS - - Google-Maps-iOS-Utils (5.0.0): - - GoogleMaps (~> 8.0) - - google_maps_flutter_ios (0.0.1): - - Flutter - - Google-Maps-iOS-Utils (< 7.0, >= 5.0) - - GoogleMaps (< 11.0, >= 8.4) - - GoogleAdsOnDeviceConversion (2.1.0): - - GoogleUtilities/Logger (~> 8.1) - - GoogleUtilities/Network (~> 8.1) - - nanopb (~> 3.30910.0) - - GoogleAppMeasurement/Core (11.15.0): - - GoogleUtilities/AppDelegateSwizzler (~> 8.1) - - GoogleUtilities/MethodSwizzler (~> 8.1) - - GoogleUtilities/Network (~> 8.1) - - "GoogleUtilities/NSData+zlib (~> 8.1)" - - nanopb (~> 3.30910.0) - - GoogleAppMeasurement/Default (11.15.0): - - GoogleAdsOnDeviceConversion (= 2.1.0) - - GoogleAppMeasurement/Core (= 11.15.0) - - GoogleAppMeasurement/IdentitySupport (= 11.15.0) - - GoogleUtilities/AppDelegateSwizzler (~> 8.1) - - GoogleUtilities/MethodSwizzler (~> 8.1) - - GoogleUtilities/Network (~> 8.1) - - "GoogleUtilities/NSData+zlib (~> 8.1)" - - nanopb (~> 3.30910.0) - - GoogleAppMeasurement/IdentitySupport (11.15.0): - - GoogleAppMeasurement/Core (= 11.15.0) - - GoogleUtilities/AppDelegateSwizzler (~> 8.1) - - GoogleUtilities/MethodSwizzler (~> 8.1) - - GoogleUtilities/Network (~> 8.1) - - "GoogleUtilities/NSData+zlib (~> 8.1)" - - nanopb (~> 3.30910.0) - - GoogleDataTransport (10.1.0): - - nanopb (~> 3.30910.0) - - PromisesObjC (~> 2.4) - - GoogleMaps (8.4.0): - - GoogleMaps/Maps (= 8.4.0) - - GoogleMaps/Base (8.4.0) - - GoogleMaps/Maps (8.4.0): - - GoogleMaps/Base - - GoogleUtilities/AppDelegateSwizzler (8.1.0): - - GoogleUtilities/Environment - - GoogleUtilities/Logger - - GoogleUtilities/Network - - GoogleUtilities/Privacy - - GoogleUtilities/Environment (8.1.0): - - GoogleUtilities/Privacy - - GoogleUtilities/Logger (8.1.0): - - GoogleUtilities/Environment - - GoogleUtilities/Privacy - - GoogleUtilities/MethodSwizzler (8.1.0): - - GoogleUtilities/Logger - - GoogleUtilities/Privacy - - GoogleUtilities/Network (8.1.0): - - GoogleUtilities/Logger - - "GoogleUtilities/NSData+zlib" - - GoogleUtilities/Privacy - - GoogleUtilities/Reachability - - "GoogleUtilities/NSData+zlib (8.1.0)": - - GoogleUtilities/Privacy - - GoogleUtilities/Privacy (8.1.0) - - GoogleUtilities/Reachability (8.1.0): - - GoogleUtilities/Logger - - GoogleUtilities/Privacy - - GoogleUtilities/UserDefaults (8.1.0): - - GoogleUtilities/Logger - - GoogleUtilities/Privacy - - health (13.1.4): - - Flutter - - image_picker_ios (0.0.1): - - Flutter - - in_app_review (2.0.0): - - Flutter - - just_audio (0.0.1): - - Flutter - - FlutterMacOS - - libwebp (1.5.0): - - libwebp/demux (= 1.5.0) - - libwebp/mux (= 1.5.0) - - libwebp/sharpyuv (= 1.5.0) - - libwebp/webp (= 1.5.0) - - libwebp/demux (1.5.0): - - libwebp/webp - - libwebp/mux (1.5.0): - - libwebp/demux - - libwebp/sharpyuv (1.5.0) - - libwebp/webp (1.5.0): - - libwebp/sharpyuv - - local_auth_darwin (0.0.1): - - Flutter - - FlutterMacOS - - location (0.0.1): - - Flutter - - manage_calendar_events (0.0.1): - - Flutter - - Mantle (2.2.0): - - Mantle/extobjc (= 2.2.0) - - Mantle/extobjc (2.2.0) - - map_launcher (0.0.1): - - Flutter - - MapboxCommon (23.11.0) - - MapboxCoreMaps (10.19.1): - - MapboxCommon (~> 23.11) - - MapboxCoreNavigation (2.19.0): - - MapboxDirections (~> 2.14) - - MapboxNavigationNative (< 207.0.0, >= 206.0.1) - - MapboxDirections (2.14.3): - - Polyline (~> 5.0) - - Turf (~> 2.8.0) - - MapboxMaps (10.19.0): - - MapboxCommon (= 23.11.0) - - MapboxCoreMaps (= 10.19.1) - - MapboxMobileEvents (= 2.0.0) - - Turf (= 2.8.0) - - MapboxMobileEvents (2.0.0) - - MapboxNavigation (2.19.0): - - MapboxCoreNavigation (= 2.19.0) - - MapboxMaps (~> 10.18) - - MapboxSpeech (~> 2.0) - - Solar-dev (~> 3.0) - - MapboxNavigationNative (206.2.2): - - MapboxCommon (~> 23.10) - - MapboxSpeech (2.1.1) - - nanopb (3.30910.0): - - nanopb/decode (= 3.30910.0) - - nanopb/encode (= 3.30910.0) - - nanopb/decode (3.30910.0) - - nanopb/encode (3.30910.0) - - network_info_plus (0.0.1): - - Flutter - - open_filex (0.0.2): - - Flutter - - OrderedSet (6.0.3) - - package_info_plus (0.4.5): - - Flutter - - path_provider_foundation (0.0.1): - - Flutter - - FlutterMacOS - - PayFortSDK (3.2.1) - - permission_handler_apple (9.3.0): - - Flutter - - Polyline (5.1.0) - - PromisesObjC (2.4.0) - - PromisesSwift (2.4.0): - - PromisesObjC (= 2.4.0) - - SDWebImage (5.21.5): - - SDWebImage/Core (= 5.21.5) - - SDWebImage/Core (5.21.5) - - SDWebImageWebPCoder (0.15.0): - - libwebp (~> 1.0) - - SDWebImage/Core (~> 5.17) - - share_plus (0.0.1): - - Flutter - - shared_preferences_foundation (0.0.1): - - Flutter - - FlutterMacOS - - Solar-dev (3.0.1) - - sqflite_darwin (0.0.4): - - Flutter - - FlutterMacOS - - SwiftProtobuf (1.33.3) - - SwiftyGif (5.4.5) - - Turf (2.8.0) - - url_launcher_ios (0.0.1): - - Flutter - - video_player_avfoundation (0.0.1): - - Flutter - - FlutterMacOS - - wakelock_plus (0.0.1): - - Flutter - - webview_flutter_wkwebview (0.0.1): - - Flutter - - FlutterMacOS - - ZoomVideoSDK/CptShare (2.1.10) - - ZoomVideoSDK/zm_annoter_dynamic (2.1.10) - - ZoomVideoSDK/zoomcml (2.1.10) - - ZoomVideoSDK/ZoomVideoSDK (2.1.10) - -DEPENDENCIES: - - amazon_payfort (from `.symlinks/plugins/amazon_payfort/ios`) - - audio_session (from `.symlinks/plugins/audio_session/ios`) - - barcode_scan2 (from `.symlinks/plugins/barcode_scan2/ios`) - - connectivity_plus (from `.symlinks/plugins/connectivity_plus/ios`) - - device_calendar (from `.symlinks/plugins/device_calendar/ios`) - - device_calendar_plus_ios (from `.symlinks/plugins/device_calendar_plus_ios/ios`) - - device_info_plus (from `.symlinks/plugins/device_info_plus/ios`) - - file_picker (from `.symlinks/plugins/file_picker/ios`) - - firebase_analytics (from `.symlinks/plugins/firebase_analytics/ios`) - - firebase_core (from `.symlinks/plugins/firebase_core/ios`) - - firebase_crashlytics (from `.symlinks/plugins/firebase_crashlytics/ios`) - - firebase_messaging (from `.symlinks/plugins/firebase_messaging/ios`) - - FLAnimatedImage - - Flutter (from `Flutter`) - - flutter_callkit_incoming (from `.symlinks/plugins/flutter_callkit_incoming/ios`) - - flutter_image_compress_common (from `.symlinks/plugins/flutter_image_compress_common/ios`) - - flutter_inappwebview_ios (from `.symlinks/plugins/flutter_inappwebview_ios/ios`) - - flutter_ios_voip_kit_karmm (from `.symlinks/plugins/flutter_ios_voip_kit_karmm/ios`) - - flutter_local_notifications (from `.symlinks/plugins/flutter_local_notifications/ios`) - - flutter_nfc_kit (from `.symlinks/plugins/flutter_nfc_kit/ios`) - - flutter_zoom_videosdk (from `.symlinks/plugins/flutter_zoom_videosdk/ios`) - - fluttertoast (from `.symlinks/plugins/fluttertoast/ios`) - - geolocator_apple (from `.symlinks/plugins/geolocator_apple/darwin`) - - google_maps_flutter_ios (from `.symlinks/plugins/google_maps_flutter_ios/ios`) - - health (from `.symlinks/plugins/health/ios`) - - image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`) - - in_app_review (from `.symlinks/plugins/in_app_review/ios`) - - just_audio (from `.symlinks/plugins/just_audio/darwin`) - - local_auth_darwin (from `.symlinks/plugins/local_auth_darwin/darwin`) - - location (from `.symlinks/plugins/location/ios`) - - manage_calendar_events (from `.symlinks/plugins/manage_calendar_events/ios`) - - map_launcher (from `.symlinks/plugins/map_launcher/ios`) - - MapboxMaps (= 10.19.0) - - MapboxNavigation (= 2.19.0) - - network_info_plus (from `.symlinks/plugins/network_info_plus/ios`) - - open_filex (from `.symlinks/plugins/open_filex/ios`) - - package_info_plus (from `.symlinks/plugins/package_info_plus/ios`) - - path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`) - - permission_handler_apple (from `.symlinks/plugins/permission_handler_apple/ios`) - - share_plus (from `.symlinks/plugins/share_plus/ios`) - - shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`) - - sqflite_darwin (from `.symlinks/plugins/sqflite_darwin/darwin`) - - url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`) - - video_player_avfoundation (from `.symlinks/plugins/video_player_avfoundation/darwin`) - - wakelock_plus (from `.symlinks/plugins/wakelock_plus/ios`) - - webview_flutter_wkwebview (from `.symlinks/plugins/webview_flutter_wkwebview/darwin`) - -SPEC REPOS: - trunk: - - CryptoSwift - - DKImagePickerController - - DKPhotoGallery - - Firebase - - FirebaseAnalytics - - FirebaseCore - - FirebaseCoreExtension - - FirebaseCoreInternal - - FirebaseCrashlytics - - FirebaseInstallations - - FirebaseMessaging - - FirebaseRemoteConfigInterop - - FirebaseSessions - - FLAnimatedImage - - Google-Maps-iOS-Utils - - GoogleAdsOnDeviceConversion - - GoogleAppMeasurement - - GoogleDataTransport - - GoogleMaps - - GoogleUtilities - - libwebp - - Mantle - - MapboxCommon - - MapboxCoreMaps - - MapboxCoreNavigation - - MapboxDirections - - MapboxMaps - - MapboxMobileEvents - - MapboxNavigation - - MapboxNavigationNative - - MapboxSpeech - - nanopb - - OrderedSet - - PayFortSDK - - Polyline - - PromisesObjC - - PromisesSwift - - SDWebImage - - SDWebImageWebPCoder - - Solar-dev - - SwiftProtobuf - - SwiftyGif - - Turf - - ZoomVideoSDK - -EXTERNAL SOURCES: - amazon_payfort: - :path: ".symlinks/plugins/amazon_payfort/ios" - audio_session: - :path: ".symlinks/plugins/audio_session/ios" - barcode_scan2: - :path: ".symlinks/plugins/barcode_scan2/ios" - connectivity_plus: - :path: ".symlinks/plugins/connectivity_plus/ios" - device_calendar: - :path: ".symlinks/plugins/device_calendar/ios" - device_calendar_plus_ios: - :path: ".symlinks/plugins/device_calendar_plus_ios/ios" - device_info_plus: - :path: ".symlinks/plugins/device_info_plus/ios" - file_picker: - :path: ".symlinks/plugins/file_picker/ios" - firebase_analytics: - :path: ".symlinks/plugins/firebase_analytics/ios" - firebase_core: - :path: ".symlinks/plugins/firebase_core/ios" - firebase_crashlytics: - :path: ".symlinks/plugins/firebase_crashlytics/ios" - firebase_messaging: - :path: ".symlinks/plugins/firebase_messaging/ios" - Flutter: - :path: Flutter - flutter_callkit_incoming: - :path: ".symlinks/plugins/flutter_callkit_incoming/ios" - flutter_image_compress_common: - :path: ".symlinks/plugins/flutter_image_compress_common/ios" - flutter_inappwebview_ios: - :path: ".symlinks/plugins/flutter_inappwebview_ios/ios" - flutter_ios_voip_kit_karmm: - :path: ".symlinks/plugins/flutter_ios_voip_kit_karmm/ios" - flutter_local_notifications: - :path: ".symlinks/plugins/flutter_local_notifications/ios" - flutter_nfc_kit: - :path: ".symlinks/plugins/flutter_nfc_kit/ios" - flutter_zoom_videosdk: - :path: ".symlinks/plugins/flutter_zoom_videosdk/ios" - fluttertoast: - :path: ".symlinks/plugins/fluttertoast/ios" - geolocator_apple: - :path: ".symlinks/plugins/geolocator_apple/darwin" - google_maps_flutter_ios: - :path: ".symlinks/plugins/google_maps_flutter_ios/ios" - health: - :path: ".symlinks/plugins/health/ios" - image_picker_ios: - :path: ".symlinks/plugins/image_picker_ios/ios" - in_app_review: - :path: ".symlinks/plugins/in_app_review/ios" - just_audio: - :path: ".symlinks/plugins/just_audio/darwin" - local_auth_darwin: - :path: ".symlinks/plugins/local_auth_darwin/darwin" - location: - :path: ".symlinks/plugins/location/ios" - manage_calendar_events: - :path: ".symlinks/plugins/manage_calendar_events/ios" - map_launcher: - :path: ".symlinks/plugins/map_launcher/ios" - network_info_plus: - :path: ".symlinks/plugins/network_info_plus/ios" - open_filex: - :path: ".symlinks/plugins/open_filex/ios" - package_info_plus: - :path: ".symlinks/plugins/package_info_plus/ios" - path_provider_foundation: - :path: ".symlinks/plugins/path_provider_foundation/darwin" - permission_handler_apple: - :path: ".symlinks/plugins/permission_handler_apple/ios" - share_plus: - :path: ".symlinks/plugins/share_plus/ios" - shared_preferences_foundation: - :path: ".symlinks/plugins/shared_preferences_foundation/darwin" - sqflite_darwin: - :path: ".symlinks/plugins/sqflite_darwin/darwin" - url_launcher_ios: - :path: ".symlinks/plugins/url_launcher_ios/ios" - video_player_avfoundation: - :path: ".symlinks/plugins/video_player_avfoundation/darwin" - wakelock_plus: - :path: ".symlinks/plugins/wakelock_plus/ios" - webview_flutter_wkwebview: - :path: ".symlinks/plugins/webview_flutter_wkwebview/darwin" - -SPEC CHECKSUMS: - amazon_payfort: 782d287860ac8962baf4e0a2a0fb2f81fdf27204 - audio_session: 19e9480dbdd4e5f6c4543826b2e8b0e4ab6145fe - barcode_scan2: 050b7b327e85954c8918715d42e83c5a35c3ed89 - connectivity_plus: 2a701ffec2c0ae28a48cf7540e279787e77c447d - CryptoSwift: e64e11850ede528a02a0f3e768cec8e9d92ecb90 - device_calendar: 9cb33f88a02e19652ec7b8b122ca778f751b1f7b - device_calendar_plus_ios: 34dca387f44fad29b840096a840f94edc55af858 - device_info_plus: bf2e3232933866d73fe290f2942f2156cdd10342 - DKImagePickerController: 946cec48c7873164274ecc4624d19e3da4c1ef3c - DKPhotoGallery: b3834fecb755ee09a593d7c9e389d8b5d6deed60 - file_picker: b159e0c068aef54932bb15dc9fd1571818edaf49 - Firebase: d99ac19b909cd2c548339c2241ecd0d1599ab02e - firebase_analytics: bf93e20703c95030404d6ddbb1adf05bf5c3885b - firebase_core: 99a37263b3c27536063a7b601d9e2a49400a433c - firebase_crashlytics: 986773c0c7ea4c3f5a4ead141b58522fcd9dfdb1 - firebase_messaging: bf6697c61f31c7cc0f654131212ff04c0115c2c7 - FirebaseAnalytics: 6433dfd311ba78084fc93bdfc145e8cb75740eae - FirebaseCore: efb3893e5b94f32b86e331e3bd6dadf18b66568e - FirebaseCoreExtension: edbd30474b5ccf04e5f001470bdf6ea616af2435 - FirebaseCoreInternal: 9afa45b1159304c963da48addb78275ef701c6b4 - FirebaseCrashlytics: e09d0bc19aa54a51e45b8039c836ef73f32c039a - FirebaseInstallations: 317270fec08a5d418fdbc8429282238cab3ac843 - FirebaseMessaging: 3b26e2cee503815e01c3701236b020aa9b576f09 - FirebaseRemoteConfigInterop: 1c6135e8a094cc6368949f5faeeca7ee8948b8aa - FirebaseSessions: b9a92c1c51bbb81e78fc3142cda6d925d700f8e7 - FLAnimatedImage: bbf914596368867157cc71b38a8ec834b3eeb32b - Flutter: cabc95a1d2626b1b06e7179b784ebcf0c0cde467 - flutter_callkit_incoming: 417dd1b46541cdd5d855ad795ccbe97d1c18155e - flutter_image_compress_common: ec1d45c362c9d30a3f6a0426c297f47c52007e3e - flutter_inappwebview_ios: 6f63631e2c62a7c350263b13fa5427aedefe81d4 - flutter_ios_voip_kit_karmm: 7ea37381a8841c92d186edf1f4604df5cc437579 - flutter_local_notifications: ff50f8405aaa0ccdc7dcfb9022ca192e8ad9688f - flutter_nfc_kit: 3985c93f749b9cb4747479205c2f10bd2f877a11 - flutter_zoom_videosdk: 7ddc97d617b85aeace252165d2b5fc5638678c38 - fluttertoast: 21eecd6935e7064cc1fcb733a4c5a428f3f24f0f - geolocator_apple: 66b711889fd333205763b83c9dcf0a57a28c7afd - Google-Maps-iOS-Utils: 66d6de12be1ce6d3742a54661e7a79cb317a9321 - google_maps_flutter_ios: ffdd933832966673a1f57f5effd014dc8d4d43a2 - GoogleAdsOnDeviceConversion: 2be6297a4f048459e0ae17fad9bfd2844e10cf64 - GoogleAppMeasurement: 700dce7541804bec33db590a5c496b663fbe2539 - GoogleDataTransport: aae35b7ea0c09004c3797d53c8c41f66f219d6a7 - GoogleMaps: 8939898920281c649150e0af74aa291c60f2e77d - GoogleUtilities: 00c88b9a86066ef77f0da2fab05f65d7768ed8e1 - health: 9cd70a5c9d9ec559a12d639a1471091c0cbb6b48 - image_picker_ios: 4f2f91b01abdb52842a8e277617df877e40f905b - in_app_review: 436034b18594851a7328d7f1c2ed5ec235b79cfc - just_audio: a42c63806f16995daf5b219ae1d679deb76e6a79 - libwebp: 02b23773aedb6ff1fd38cec7a77b81414c6842a8 - local_auth_darwin: 63c73d6d28cc3e239be2b6aa460ea6e317cd5100 - location: d5cf8598915965547c3f36761ae9cc4f4e87d22e - manage_calendar_events: 9b2889799340398027b3e3f5c4891d41599ec257 - Mantle: c5aa8794a29a022dfbbfc9799af95f477a69b62d - map_launcher: 8a4e484aaddff55680a7da9bc9e25f512067fb87 - MapboxCommon: 119f3759f7dc9457f0695848108ab323eb643cb4 - MapboxCoreMaps: ca17f67baced23f8c952166ac6314c35bad3f66c - MapboxCoreNavigation: 3be9990fae3ed732a101001746d0e3b4234ec023 - MapboxDirections: d9ad8452e8927d95ed21e35f733834dbca7e0eb1 - MapboxMaps: b7f29ec7c33f7dc6d2947c1148edce6db81db9a7 - MapboxMobileEvents: d044b9edbe0ec7df60f6c2c9634fe9a7f449266b - MapboxNavigation: da9cf3d773ed5b0fa0fb388fccdaa117ee681f31 - MapboxNavigationNative: 629e359f3d2590acd1ebbacaaf99e1a80ee57e42 - MapboxSpeech: cd25ef99c3a3d2e0da72620ff558276ea5991a77 - nanopb: fad817b59e0457d11a5dfbde799381cd727c1275 - network_info_plus: 6613d9d7cdeb0e6f366ed4dbe4b3c51c52d567a9 - open_filex: 6e26e659846ec990262224a12ef1c528bb4edbe4 - OrderedSet: e539b66b644ff081c73a262d24ad552a69be3a94 - package_info_plus: c0502532a26c7662a62a356cebe2692ec5fe4ec4 - path_provider_foundation: 0b743cbb62d8e47eab856f09262bb8c1ddcfe6ba - PayFortSDK: 233eabe9a45601fdbeac67fa6e5aae46ed8faf82 - permission_handler_apple: 9878588469a2b0d0fc1e048d9f43605f92e6cec2 - Polyline: 2a1f29f87f8d9b7de868940f4f76deb8c678a5b1 - PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47 - PromisesSwift: 9d77319bbe72ebf6d872900551f7eeba9bce2851 - SDWebImage: e9c98383c7572d713c1a0d7dd2783b10599b9838 - SDWebImageWebPCoder: 0e06e365080397465cc73a7a9b472d8a3bd0f377 - share_plus: 8b6f8b3447e494cca5317c8c3073de39b3600d1f - shared_preferences_foundation: 5086985c1d43c5ba4d5e69a4e8083a389e2909e6 - Solar-dev: 4612dc9878b9fed2667d23b327f1d4e54e16e8d0 - sqflite_darwin: 5a7236e3b501866c1c9befc6771dfd73ffb8702d - SwiftProtobuf: e1b437c8e31a4c5577b643249a0bb62ed4f02153 - SwiftyGif: 706c60cf65fa2bc5ee0313beece843c8eb8194d4 - Turf: aa2ede4298009639d10db36aba1a7ebaad072a5e - url_launcher_ios: bb13df5870e8c4234ca12609d04010a21be43dfa - video_player_avfoundation: 7993f492ae0bd77edaea24d9dc051d8bb2cd7c86 - wakelock_plus: 76957ab028e12bfa4e66813c99e46637f367fc7e - webview_flutter_wkwebview: 29eb20d43355b48fe7d07113835b9128f84e3af4 - ZoomVideoSDK: 94e939820e57a075c5e712559f927017da0de06a - -PODFILE CHECKSUM: 8235407385ddd5904afc2563d65406117a51993e - -COCOAPODS: 1.16.2 diff --git a/lib/core/utils/calender_utils_new.dart b/lib/core/utils/calender_utils_new.dart index 347c2ebc..bbf69119 100644 --- a/lib/core/utils/calender_utils_new.dart +++ b/lib/core/utils/calender_utils_new.dart @@ -16,33 +16,64 @@ class CalenderUtilsNew { final DeviceCalendar calender = DeviceCalendar.instance; List writableCalender = []; - CalenderUtilsNew._instance() { - getCalenders(); - } + /// Completer to ensure getCalenders() only runs once at a time + Completer? _calendarInitCompleter; + + CalenderUtilsNew._instance(); static final CalenderUtilsNew instance = CalenderUtilsNew._instance(); - Future getCalenders() async { + /// Ensures calendars are loaded exactly once. Safe to call multiple times — + /// subsequent calls await the same future. + Future ensureCalendarsLoaded() async { + if (writableCalender.isNotEmpty) return; + if (_calendarInitCompleter != null) { + // Already in progress — just wait for it + return _calendarInitCompleter!.future; + } + _calendarInitCompleter = Completer(); + try { + await _loadCalendars(); + _calendarInitCompleter!.complete(); + } catch (e) { + _calendarInitCompleter!.completeError(e); + _calendarInitCompleter = null; // Allow retry on failure + rethrow; + } + } + + Future _loadCalendars() async { + print("the get calenders is called"); CalendarPermissionStatus result = await DeviceCalendar.instance.hasPermissions(); if (result != CalendarPermissionStatus.granted) { await DeviceCalendar.instance.requestPermissions(); - showCommonBottomSheetWithoutHeight( - title: LocaleKeys.notice.tr(context: GetIt.instance().navigatorKey.currentContext!), - GetIt.instance().navigatorKey.currentContext!, - child: Utils.getWarningWidget( - loadingText: LocaleKeys.calendarPermissionAlert.tr(), - isShowActionButtons: true, - onCancelTap: () { - GetIt.instance().pop(); - }, - onConfirmTap: () async { - GetIt.instance().pop(); - openAppSettings(); - }), - callBackFunc: () {}, - isFullScreen: false, - isCloseButtonVisible: true, - ); + result = await DeviceCalendar.instance.hasPermissions(); + // if (result != CalendarPermissionStatus.granted) { + // print("the permission is not granted"); + // showCommonBottomSheetWithoutHeight( + // title: LocaleKeys.notice.tr(context: GetIt + // .instance() + // .navigatorKey + // .currentContext!), + // GetIt + // .instance() + // .navigatorKey + // .currentContext!, + // child: Utils.getWarningWidget( + // loadingText: LocaleKeys.calendarPermissionAlert.tr(), + // isShowActionButtons: true, + // onCancelTap: () { + // GetIt.instance().pop(); + // }, + // onConfirmTap: () async { + // GetIt.instance().pop(); + // openAppSettings(); + // }), + // callBackFunc: () {}, + // isFullScreen: false, + // isCloseButtonVisible: true, + // ); + // } } var calenders = await calender.listCalendars(); calenders.forEach((calender) { @@ -53,14 +84,12 @@ class CalenderUtilsNew { } FutureOr createOrUpdateEvent({required String title, required String description, required String location, DateTime? scheduleDateTime, String? eventId, int? reminderMinutes}) async { - if (writableCalender.isEmpty) { - await getCalenders(); - } + await ensureCalendarsLoaded(); var writableCalendars = writableCalender.first; String eventResult = ""; - CalendarPermissionStatus result = await DeviceCalendar.instance.hasPermissions(); - if (result != CalendarPermissionStatus.granted) await DeviceCalendar.instance.requestPermissions(); - print(result); + // CalendarPermissionStatus result = await DeviceCalendar.instance.hasPermissions(); + // if (result != CalendarPermissionStatus.granted) await DeviceCalendar.instance.requestPermissions(); + // print(result); // String eventId = await getEventIdIfEventExist(title!.split("#").last); // if (eventId.isEmpty) { @@ -146,9 +175,7 @@ class CalenderUtilsNew { } FutureOr checkIfEventExist(String admissionId) async { - if (writableCalender.isEmpty) { - await getCalenders(); - } + await ensureCalendarsLoaded(); List events = await getEvents(); if (events.isEmpty) return false; for (var event in events) { @@ -161,7 +188,7 @@ class CalenderUtilsNew { FutureOr getEventIdIfEventExist(String admissionId) async { if (writableCalender.isEmpty) { - await getCalenders(); + await ensureCalendarsLoaded(); } List events = await getEvents(); if (events.isEmpty) return ""; @@ -174,7 +201,7 @@ class CalenderUtilsNew { FutureOr checkAndRemove({required String id}) async { if (writableCalender.isEmpty) { - await getCalenders(); + await ensureCalendarsLoaded(); } List events = await getEvents(); if (events.isEmpty) return false; @@ -191,7 +218,7 @@ class CalenderUtilsNew { FutureOr checkAndRemoveMultipleItems({required String id}) async { if (writableCalender.isEmpty) { - await getCalenders(); + await ensureCalendarsLoaded(); } List events = await getEvents(); if (events.isEmpty) return false; diff --git a/lib/features/my_appointments/my_appointments_repo.dart b/lib/features/my_appointments/my_appointments_repo.dart index d4669767..541e8878 100644 --- a/lib/features/my_appointments/my_appointments_repo.dart +++ b/lib/features/my_appointments/my_appointments_repo.dart @@ -847,7 +847,7 @@ class MyAppointmentsRepoImp implements MyAppointmentsRepo { // final queueList = list.map((item) => PatientQueueDetails.fromJson(item as Map)).toList().cast(); final queueList = PatientQueueDetails.fromJson(queueData); - queueList.patientQueueData!.isClinicConfigured = 1; + // queueList.patientQueueData!.isClinicConfigured = 1; apiResponse = GenericApiModel( messageStatus: messageStatus, diff --git a/lib/generated/locale_keys.g.dart b/lib/generated/locale_keys.g.dart index 058100e4..71b99520 100644 --- a/lib/generated/locale_keys.g.dart +++ b/lib/generated/locale_keys.g.dart @@ -1740,5 +1740,6 @@ abstract class LocaleKeys { static const inch = 'inch'; static const updateEmailAddressTitle = 'updateEmailAddressTitle'; static const enterNewNewContactNumber = 'enterNewNewContactNumber'; + static const nationalIdFileNumber = 'nationalIdFileNumber'; } diff --git a/lib/presentation/appointments/appointment_details_page.dart b/lib/presentation/appointments/appointment_details_page.dart index 40ef4644..66d2b151 100644 --- a/lib/presentation/appointments/appointment_details_page.dart +++ b/lib/presentation/appointments/appointment_details_page.dart @@ -103,14 +103,14 @@ class _AppointmentDetailsPageState extends State { } // // Check if reminder exists in calendar and update the flag - // await _checkAndUpdateReminderStatus(); } }); // Initialize countdown timer for payment after first frame to ensure context is available - WidgetsBinding.instance.addPostFrameCallback((_) { + WidgetsBinding.instance.addPostFrameCallback((_) async { if (mounted) { _startCountdownTimer(); + // await _checkAndUpdateReminderStatus(); } }); } @@ -373,6 +373,7 @@ class _AppointmentDetailsPageState extends State { ? null : Column( children: [ + SizedBox(height: 16.w), Divider(height: 1, color: AppColors.dividerColor), SizedBox(height: 16.w), @@ -412,6 +413,145 @@ class _AppointmentDetailsPageState extends State { ], ), ), + SizedBox(height: 16.h), + Row( + mainAxisSize: MainAxisSize.max, + children: [ + Utils.buildSvgWithAssets(icon: AppAssets.prescription_reminder_icon, width: 40.w, height: 40.h, applyThemeColor: false), + SizedBox(width: 8.w), + Column( + crossAxisAlignment: CrossAxisAlignment.start, + spacing: 4.h, + children: [ + LocaleKeys.setReminder.tr(context: context).toText13(isBold: true), + LocaleKeys.notifyMeBeforeAppointment.tr(context: context).toText11(color: AppColors.textColorLight, isBold: true), + ], + ), + const Spacer(), + BellAnimatedSwitch( + key: _bellSwitchKey, + width: 48.w, + height: 30.h, + initialValue: widget.patientAppointmentHistoryResponseModel.hasReminder ?? false, + activeColor: AppColors.successColor.withOpacity(0.2), + inactiveColor: AppColors.lightGrayBGColor, + activeCircleColor: AppColors.successColor, + inactiveCircleColor: AppColors.greyTextColor, + activeIconColor: AppColors.bgGreenColor, + inactiveIconColor: AppColors.greyTextColor, + activeIcon: Utils.buildSvgWithAssets(icon: AppAssets.bell, iconColor: AppColors.whiteColor, width: 12.w, height: 12.h), + inactiveIcon: Utils.buildSvgWithAssets(icon: AppAssets.bell, iconColor: AppColors.whiteColor, width: 12.w, height: 12.h), + onChanged: (newValue) async { + CalenderUtilsNew calender = CalenderUtilsNew.instance; + bool isEventAddedOrRemoved = false; + if (newValue == true) { + DateTime startDate = DateTime.now(); + DateTime endDate = DateUtil.convertStringToDate(widget.patientAppointmentHistoryResponseModel.appointmentDate); + + // Show reminder bottom sheet and check if permission was granted + bool permissionGranted = await BottomSheetUtils().showReminderBottomSheet( + context, + endDate, + widget.patientAppointmentHistoryResponseModel.doctorNameObj ?? "", + "${widget.patientAppointmentHistoryResponseModel.appointmentNo}" ?? "", + "", + "", + title: "Appointment with ${widget.patientAppointmentHistoryResponseModel.doctorNameObj}", + description: + "${widget.patientAppointmentHistoryResponseModel.doctorNameObj} will be having an appointment on ${widget.patientAppointmentHistoryResponseModel.appointmentDate}", + onSuccess: () { + setState(() { + myAppointmentsViewModel.setAppointmentReminder(newValue, widget.patientAppointmentHistoryResponseModel); + }); + }, + isMultiAllowed: true, + onMultiDateSuccess: (int selectedIndex) async { + isEventAddedOrRemoved = await calender.createOrUpdateEvent( + title: + "Appointment Reminder with ${widget.patientAppointmentHistoryResponseModel.doctorNameObj} on ${DateUtil.convertStringToDate(widget.patientAppointmentHistoryResponseModel.appointmentDate)}, Appointment #${widget.patientAppointmentHistoryResponseModel.appointmentNo}", + description: + "Appointment Reminder with ${widget.patientAppointmentHistoryResponseModel.doctorNameObj} in ${widget.patientAppointmentHistoryResponseModel.projectName}", + scheduleDateTime: DateUtil.convertStringToDate(widget.patientAppointmentHistoryResponseModel.appointmentDate), + eventId: "${widget.patientAppointmentHistoryResponseModel.appointmentNo}", + location: '', + reminderMinutes: selectedIndex); + setState(() { + myAppointmentsViewModel.setAppointmentReminder(isEventAddedOrRemoved, widget.patientAppointmentHistoryResponseModel); + }); + }, + ); + + // If permission was not granted, revert the switch back to OFF + if (!permissionGranted) { + _bellSwitchKey.currentState?.setSwitchValue(false); + } + } else { + isEventAddedOrRemoved = await calender.checkAndRemove( + id: "${widget.patientAppointmentHistoryResponseModel.appointmentNo}", + ); + setState(() { + myAppointmentsViewModel.setAppointmentReminder(!isEventAddedOrRemoved, widget.patientAppointmentHistoryResponseModel); + }); + } + }, + ) + + // Switch( + // activeThumbColor: AppColors.successColor, + // // activeTrackColor: AppColors.successColor.withValues(alpha: .15), + // value: widget.patientAppointmentHistoryResponseModel.hasReminder!, + // onChanged: (newValue) async { + // CalenderUtilsNew calender = CalenderUtilsNew.instance; + // bool isEventAddedOrRemoved = false; + // if(newValue == true){ + // DateTime startDate = DateTime.now(); + // DateTime endDate = DateUtil.convertStringToDate(widget + // .patientAppointmentHistoryResponseModel.appointmentDate); + // BottomSheetUtils().showReminderBottomSheet( + // context, + // endDate, + // widget.patientAppointmentHistoryResponseModel.doctorNameObj??"", + // "${widget.patientAppointmentHistoryResponseModel.appointmentNo}"??"", + // "", + // "", + // title: "Appointment with ${widget.patientAppointmentHistoryResponseModel.doctorNameObj}", + // description: + // "${widget.patientAppointmentHistoryResponseModel.doctorNameObj} will be having an appointment on ${widget.patientAppointmentHistoryResponseModel.appointmentDate}", + // onSuccess: () { + // setState(() { + // myAppointmentsViewModel.setAppointmentReminder(newValue, widget.patientAppointmentHistoryResponseModel); + // }); + // }, + // isMultiAllowed: true, + // onMultiDateSuccess: (int selectedIndex) async { + // isEventAddedOrRemoved = await calender.createOrUpdateEvent( + // title: + // "Appointment Reminder with ${widget.patientAppointmentHistoryResponseModel.doctorNameObj} on ${DateUtil.convertStringToDate(widget.patientAppointmentHistoryResponseModel.appointmentDate)}, Appointment #${widget.patientAppointmentHistoryResponseModel.appointmentNo}", + // description: + // "Appointment Reminder with ${widget.patientAppointmentHistoryResponseModel.doctorNameObj} in ${widget.patientAppointmentHistoryResponseModel.projectName}", + // scheduleDateTime: DateUtil.convertStringToDate(widget + // .patientAppointmentHistoryResponseModel.appointmentDate), + // eventId: "${widget.patientAppointmentHistoryResponseModel.appointmentNo}", + // location: '', + // reminderMinutes: selectedIndex + // ); + // setState(() { + // myAppointmentsViewModel.setAppointmentReminder(isEventAddedOrRemoved, widget.patientAppointmentHistoryResponseModel); + // }); + // }, + // ); + // }else { + // isEventAddedOrRemoved = await calender.checkAndRemove( id:"${widget.patientAppointmentHistoryResponseModel.appointmentNo}", ); + // setState(() { + // myAppointmentsViewModel.setAppointmentReminder(!isEventAddedOrRemoved, widget.patientAppointmentHistoryResponseModel); + // }); + // } + // + // + // }, + // ), + ], + ).paddingSymmetrical(16.w, 0) ], ), ), @@ -583,148 +723,148 @@ class _AppointmentDetailsPageState extends State { ); }), SizedBox(height: 16.h), - Container( - decoration: RoundedRectangleBorder().toSmoothCornerDecoration( - color: AppColors.whiteColor, - borderRadius: 20.r, - hasShadow: false, - ), - child: Row( - mainAxisSize: MainAxisSize.max, - children: [ - Utils.buildSvgWithAssets(icon: AppAssets.prescription_reminder_icon, width: 35.h, height: 35.h, applyThemeColor: false), - SizedBox(width: 8.h), - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - LocaleKeys.setReminder.tr(context: context).toText13(isBold: true), - LocaleKeys.notifyMeBeforeAppointment.tr(context: context).toText11(color: AppColors.textColorLight, isBold: true), - ], - ), - const Spacer(), - BellAnimatedSwitch( - key: _bellSwitchKey, - initialValue: widget.patientAppointmentHistoryResponseModel.hasReminder ?? false, - activeColor: AppColors.successColor.withOpacity(0.2), - inactiveColor: AppColors.lightGrayBGColor, - activeCircleColor: AppColors.successColor, - inactiveCircleColor: AppColors.greyTextColor, - activeIconColor: AppColors.bgGreenColor, - inactiveIconColor: AppColors.greyTextColor, - activeIcon: Utils.buildSvgWithAssets(icon: AppAssets.bell, iconColor: AppColors.whiteColor, width: 15.w, height: 15.h), - inactiveIcon: Utils.buildSvgWithAssets(icon: AppAssets.bell, iconColor: AppColors.whiteColor, width: 15.w, height: 15.h), - onChanged: (newValue) async { - CalenderUtilsNew calender = CalenderUtilsNew.instance; - bool isEventAddedOrRemoved = false; - if (newValue == true) { - DateTime startDate = DateTime.now(); - DateTime endDate = DateUtil.convertStringToDate(widget.patientAppointmentHistoryResponseModel.appointmentDate); - - // Show reminder bottom sheet and check if permission was granted - bool permissionGranted = await BottomSheetUtils().showReminderBottomSheet( - context, - endDate, - widget.patientAppointmentHistoryResponseModel.doctorNameObj ?? "", - "${widget.patientAppointmentHistoryResponseModel.appointmentNo}" ?? "", - "", - "", - title: "Appointment with ${widget.patientAppointmentHistoryResponseModel.doctorNameObj}", - description: - "${widget.patientAppointmentHistoryResponseModel.doctorNameObj} will be having an appointment on ${widget.patientAppointmentHistoryResponseModel.appointmentDate}", - onSuccess: () { - setState(() { - myAppointmentsViewModel.setAppointmentReminder(newValue, widget.patientAppointmentHistoryResponseModel); - }); - }, - isMultiAllowed: true, - onMultiDateSuccess: (int selectedIndex) async { - isEventAddedOrRemoved = await calender.createOrUpdateEvent( - title: - "Appointment Reminder with ${widget.patientAppointmentHistoryResponseModel.doctorNameObj} on ${DateUtil.convertStringToDate(widget.patientAppointmentHistoryResponseModel.appointmentDate)}, Appointment #${widget.patientAppointmentHistoryResponseModel.appointmentNo}", - description: - "Appointment Reminder with ${widget.patientAppointmentHistoryResponseModel.doctorNameObj} in ${widget.patientAppointmentHistoryResponseModel.projectName}", - scheduleDateTime: DateUtil.convertStringToDate(widget.patientAppointmentHistoryResponseModel.appointmentDate), - eventId: "${widget.patientAppointmentHistoryResponseModel.appointmentNo}", - location: '', - reminderMinutes: selectedIndex); - setState(() { - myAppointmentsViewModel.setAppointmentReminder(isEventAddedOrRemoved, widget.patientAppointmentHistoryResponseModel); - }); - }, - ); - - // If permission was not granted, revert the switch back to OFF - if (!permissionGranted) { - _bellSwitchKey.currentState?.setSwitchValue(false); - } - } else { - isEventAddedOrRemoved = await calender.checkAndRemove( - id: "${widget.patientAppointmentHistoryResponseModel.appointmentNo}", - ); - setState(() { - myAppointmentsViewModel.setAppointmentReminder(!isEventAddedOrRemoved, widget.patientAppointmentHistoryResponseModel); - }); - } - }, - ) - - // Switch( - // activeThumbColor: AppColors.successColor, - // // activeTrackColor: AppColors.successColor.withValues(alpha: .15), - // value: widget.patientAppointmentHistoryResponseModel.hasReminder!, - // onChanged: (newValue) async { - // CalenderUtilsNew calender = CalenderUtilsNew.instance; - // bool isEventAddedOrRemoved = false; - // if(newValue == true){ - // DateTime startDate = DateTime.now(); - // DateTime endDate = DateUtil.convertStringToDate(widget - // .patientAppointmentHistoryResponseModel.appointmentDate); - // BottomSheetUtils().showReminderBottomSheet( - // context, - // endDate, - // widget.patientAppointmentHistoryResponseModel.doctorNameObj??"", - // "${widget.patientAppointmentHistoryResponseModel.appointmentNo}"??"", - // "", - // "", - // title: "Appointment with ${widget.patientAppointmentHistoryResponseModel.doctorNameObj}", - // description: - // "${widget.patientAppointmentHistoryResponseModel.doctorNameObj} will be having an appointment on ${widget.patientAppointmentHistoryResponseModel.appointmentDate}", - // onSuccess: () { - // setState(() { - // myAppointmentsViewModel.setAppointmentReminder(newValue, widget.patientAppointmentHistoryResponseModel); - // }); - // }, - // isMultiAllowed: true, - // onMultiDateSuccess: (int selectedIndex) async { - // isEventAddedOrRemoved = await calender.createOrUpdateEvent( - // title: - // "Appointment Reminder with ${widget.patientAppointmentHistoryResponseModel.doctorNameObj} on ${DateUtil.convertStringToDate(widget.patientAppointmentHistoryResponseModel.appointmentDate)}, Appointment #${widget.patientAppointmentHistoryResponseModel.appointmentNo}", - // description: - // "Appointment Reminder with ${widget.patientAppointmentHistoryResponseModel.doctorNameObj} in ${widget.patientAppointmentHistoryResponseModel.projectName}", - // scheduleDateTime: DateUtil.convertStringToDate(widget - // .patientAppointmentHistoryResponseModel.appointmentDate), - // eventId: "${widget.patientAppointmentHistoryResponseModel.appointmentNo}", - // location: '', - // reminderMinutes: selectedIndex - // ); - // setState(() { - // myAppointmentsViewModel.setAppointmentReminder(isEventAddedOrRemoved, widget.patientAppointmentHistoryResponseModel); - // }); - // }, - // ); - // }else { - // isEventAddedOrRemoved = await calender.checkAndRemove( id:"${widget.patientAppointmentHistoryResponseModel.appointmentNo}", ); - // setState(() { - // myAppointmentsViewModel.setAppointmentReminder(!isEventAddedOrRemoved, widget.patientAppointmentHistoryResponseModel); - // }); - // } - // - // - // }, - // ), - ], - ).paddingSymmetrical(16.h, 16.h), - ), + // Container( + // decoration: RoundedRectangleBorder().toSmoothCornerDecoration( + // color: AppColors.whiteColor, + // borderRadius: 20.r, + // hasShadow: false, + // ), + // child: Row( + // mainAxisSize: MainAxisSize.max, + // children: [ + // Utils.buildSvgWithAssets(icon: AppAssets.prescription_reminder_icon, width: 35.h, height: 35.h, applyThemeColor: false), + // SizedBox(width: 8.h), + // Column( + // crossAxisAlignment: CrossAxisAlignment.start, + // children: [ + // LocaleKeys.setReminder.tr(context: context).toText13(isBold: true), + // LocaleKeys.notifyMeBeforeAppointment.tr(context: context).toText11(color: AppColors.textColorLight, isBold: true), + // ], + // ), + // const Spacer(), + // BellAnimatedSwitch( + // key: _bellSwitchKey, + // initialValue: widget.patientAppointmentHistoryResponseModel.hasReminder ?? false, + // activeColor: AppColors.successColor.withOpacity(0.2), + // inactiveColor: AppColors.lightGrayBGColor, + // activeCircleColor: AppColors.successColor, + // inactiveCircleColor: AppColors.greyTextColor, + // activeIconColor: AppColors.bgGreenColor, + // inactiveIconColor: AppColors.greyTextColor, + // activeIcon: Utils.buildSvgWithAssets(icon: AppAssets.bell, iconColor: AppColors.whiteColor, width: 15.w, height: 15.h), + // inactiveIcon: Utils.buildSvgWithAssets(icon: AppAssets.bell, iconColor: AppColors.whiteColor, width: 15.w, height: 15.h), + // onChanged: (newValue) async { + // CalenderUtilsNew calender = CalenderUtilsNew.instance; + // bool isEventAddedOrRemoved = false; + // if (newValue == true) { + // DateTime startDate = DateTime.now(); + // DateTime endDate = DateUtil.convertStringToDate(widget.patientAppointmentHistoryResponseModel.appointmentDate); + // + // // Show reminder bottom sheet and check if permission was granted + // bool permissionGranted = await BottomSheetUtils().showReminderBottomSheet( + // context, + // endDate, + // widget.patientAppointmentHistoryResponseModel.doctorNameObj ?? "", + // "${widget.patientAppointmentHistoryResponseModel.appointmentNo}" ?? "", + // "", + // "", + // title: "Appointment with ${widget.patientAppointmentHistoryResponseModel.doctorNameObj}", + // description: + // "${widget.patientAppointmentHistoryResponseModel.doctorNameObj} will be having an appointment on ${widget.patientAppointmentHistoryResponseModel.appointmentDate}", + // onSuccess: () { + // setState(() { + // myAppointmentsViewModel.setAppointmentReminder(newValue, widget.patientAppointmentHistoryResponseModel); + // }); + // }, + // isMultiAllowed: true, + // onMultiDateSuccess: (int selectedIndex) async { + // isEventAddedOrRemoved = await calender.createOrUpdateEvent( + // title: + // "Appointment Reminder with ${widget.patientAppointmentHistoryResponseModel.doctorNameObj} on ${DateUtil.convertStringToDate(widget.patientAppointmentHistoryResponseModel.appointmentDate)}, Appointment #${widget.patientAppointmentHistoryResponseModel.appointmentNo}", + // description: + // "Appointment Reminder with ${widget.patientAppointmentHistoryResponseModel.doctorNameObj} in ${widget.patientAppointmentHistoryResponseModel.projectName}", + // scheduleDateTime: DateUtil.convertStringToDate(widget.patientAppointmentHistoryResponseModel.appointmentDate), + // eventId: "${widget.patientAppointmentHistoryResponseModel.appointmentNo}", + // location: '', + // reminderMinutes: selectedIndex); + // setState(() { + // myAppointmentsViewModel.setAppointmentReminder(isEventAddedOrRemoved, widget.patientAppointmentHistoryResponseModel); + // }); + // }, + // ); + // + // // If permission was not granted, revert the switch back to OFF + // if (!permissionGranted) { + // _bellSwitchKey.currentState?.setSwitchValue(false); + // } + // } else { + // isEventAddedOrRemoved = await calender.checkAndRemove( + // id: "${widget.patientAppointmentHistoryResponseModel.appointmentNo}", + // ); + // setState(() { + // myAppointmentsViewModel.setAppointmentReminder(!isEventAddedOrRemoved, widget.patientAppointmentHistoryResponseModel); + // }); + // } + // }, + // ) + // + // // Switch( + // // activeThumbColor: AppColors.successColor, + // // // activeTrackColor: AppColors.successColor.withValues(alpha: .15), + // // value: widget.patientAppointmentHistoryResponseModel.hasReminder!, + // // onChanged: (newValue) async { + // // CalenderUtilsNew calender = CalenderUtilsNew.instance; + // // bool isEventAddedOrRemoved = false; + // // if(newValue == true){ + // // DateTime startDate = DateTime.now(); + // // DateTime endDate = DateUtil.convertStringToDate(widget + // // .patientAppointmentHistoryResponseModel.appointmentDate); + // // BottomSheetUtils().showReminderBottomSheet( + // // context, + // // endDate, + // // widget.patientAppointmentHistoryResponseModel.doctorNameObj??"", + // // "${widget.patientAppointmentHistoryResponseModel.appointmentNo}"??"", + // // "", + // // "", + // // title: "Appointment with ${widget.patientAppointmentHistoryResponseModel.doctorNameObj}", + // // description: + // // "${widget.patientAppointmentHistoryResponseModel.doctorNameObj} will be having an appointment on ${widget.patientAppointmentHistoryResponseModel.appointmentDate}", + // // onSuccess: () { + // // setState(() { + // // myAppointmentsViewModel.setAppointmentReminder(newValue, widget.patientAppointmentHistoryResponseModel); + // // }); + // // }, + // // isMultiAllowed: true, + // // onMultiDateSuccess: (int selectedIndex) async { + // // isEventAddedOrRemoved = await calender.createOrUpdateEvent( + // // title: + // // "Appointment Reminder with ${widget.patientAppointmentHistoryResponseModel.doctorNameObj} on ${DateUtil.convertStringToDate(widget.patientAppointmentHistoryResponseModel.appointmentDate)}, Appointment #${widget.patientAppointmentHistoryResponseModel.appointmentNo}", + // // description: + // // "Appointment Reminder with ${widget.patientAppointmentHistoryResponseModel.doctorNameObj} in ${widget.patientAppointmentHistoryResponseModel.projectName}", + // // scheduleDateTime: DateUtil.convertStringToDate(widget + // // .patientAppointmentHistoryResponseModel.appointmentDate), + // // eventId: "${widget.patientAppointmentHistoryResponseModel.appointmentNo}", + // // location: '', + // // reminderMinutes: selectedIndex + // // ); + // // setState(() { + // // myAppointmentsViewModel.setAppointmentReminder(isEventAddedOrRemoved, widget.patientAppointmentHistoryResponseModel); + // // }); + // // }, + // // ); + // // }else { + // // isEventAddedOrRemoved = await calender.checkAndRemove( id:"${widget.patientAppointmentHistoryResponseModel.appointmentNo}", ); + // // setState(() { + // // myAppointmentsViewModel.setAppointmentReminder(!isEventAddedOrRemoved, widget.patientAppointmentHistoryResponseModel); + // // }); + // // } + // // + // // + // // }, + // // ), + // ], + // ).paddingSymmetrical(16.h, 16.h), + // ), SizedBox(height: 16.h), ], ) diff --git a/lib/presentation/appointments/widgets/appointment_doctor_card.dart b/lib/presentation/appointments/widgets/appointment_doctor_card.dart index 593746cb..0e4e2aeb 100644 --- a/lib/presentation/appointments/widgets/appointment_doctor_card.dart +++ b/lib/presentation/appointments/widgets/appointment_doctor_card.dart @@ -150,7 +150,8 @@ class AppointmentDoctorCard extends StatelessWidget { ], ), ), - patientAppointmentHistoryResponseModel.isLiveCareAppointment! || patientAppointmentHistoryResponseModel.isClinicReBookingAllowed! ==false + + patientAppointmentHistoryResponseModel.isLiveCareAppointment! || patientAppointmentHistoryResponseModel.isClinicReBookingAllowed! || patientAppointmentHistoryResponseModel.isActiveDoctor! == false ? SizedBox.shrink() : Utils.buildSvgWithAssets(icon: AppAssets.doctor_profile_icon, width: 20.h, height: 20.h, fit: BoxFit.scaleDown).onPress(() async { DoctorsListResponseModel selectedDoctor = DoctorsListResponseModel(); diff --git a/lib/presentation/authentication/login.dart b/lib/presentation/authentication/login.dart index b2979235..bbb6b4eb 100644 --- a/lib/presentation/authentication/login.dart +++ b/lib/presentation/authentication/login.dart @@ -75,7 +75,7 @@ class LoginScreenState extends State { SizedBox(height: 32.h), Localizations.override(context: context, locale: Locale('en', 'US'), child: Container()), // Force English locale for this widget TextInputWidget( - labelText: "${LocaleKeys.nationalId.tr(context: context)} / ${LocaleKeys.fileNo.tr(context: context)}", + labelText: "${LocaleKeys.nationalIdFileNumber.tr(context: context)}", hintText: "xxxxxxxxx", controller: authVm.nationalIdController, focusNode: _nationalIdFocusNode, diff --git a/lib/presentation/book_appointment/widgets/bell_switch.dart b/lib/presentation/book_appointment/widgets/bell_switch.dart index ea3746a0..c002e59a 100644 --- a/lib/presentation/book_appointment/widgets/bell_switch.dart +++ b/lib/presentation/book_appointment/widgets/bell_switch.dart @@ -27,8 +27,8 @@ class BellAnimatedSwitch extends StatefulWidget { this.inactiveCircleColor, this.activeIcon, this.inactiveIcon, - this.width = 70, - this.height = 40, + this.width = 48, + this.height = 30, this.animationDuration = const Duration(milliseconds: 300), }); diff --git a/pubspec.lock b/pubspec.lock index 8395a120..f8ccd5ee 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -237,35 +237,31 @@ packages: device_calendar_plus: dependency: "direct main" description: - name: device_calendar_plus - sha256: d11a70d98eb123e8eb09fdcfaf220ca4f1aa65a1512e12092f176f4b54983507 - url: "https://pub.dev" - source: hosted - version: "0.3.3" + path: "package/device_calendar_plus" + relative: true + source: path + version: "0.3.1" device_calendar_plus_android: dependency: transitive description: - name: device_calendar_plus_android - sha256: a341ef29fa0251251287d63c1d009dfd35c1459dc6a129fd5e03f5ac92d8d7ff - url: "https://pub.dev" - source: hosted - version: "0.3.3" + path: "package/device_calendar_plus/package/device_calendar_plus_android" + relative: true + source: path + version: "0.3.1" device_calendar_plus_ios: dependency: transitive description: - name: device_calendar_plus_ios - sha256: "3b2f84ce1ed002be8460e214a3229e66748bbaad4077603f2c734d67c42033ff" - url: "https://pub.dev" - source: hosted - version: "0.3.3" + path: "package/device_calendar_plus/package/device_calendar_plus_ios" + relative: true + source: path + version: "0.3.1" device_calendar_plus_platform_interface: dependency: transitive description: - name: device_calendar_plus_platform_interface - sha256: "0ce7511c094ca256831a48e16efe8f1e97e7bd00a5ff3936296ffd650a1d76b5" - url: "https://pub.dev" - source: hosted - version: "0.3.3" + path: "package/device_calendar_plus/package/device_calendar_plus_platform_interface" + relative: true + source: path + version: "0.3.1" device_info_plus: dependency: "direct main" description: @@ -519,6 +515,54 @@ packages: url: "https://pub.dev" source: hosted version: "0.20.5" + flutter_image_compress: + dependency: "direct main" + description: + name: flutter_image_compress + sha256: "51d23be39efc2185e72e290042a0da41aed70b14ef97db362a6b5368d0523b27" + url: "https://pub.dev" + source: hosted + version: "2.4.0" + flutter_image_compress_common: + dependency: transitive + description: + name: flutter_image_compress_common + sha256: c5c5d50c15e97dd7dc72ff96bd7077b9f791932f2076c5c5b6c43f2c88607bfb + url: "https://pub.dev" + source: hosted + version: "1.0.6" + flutter_image_compress_macos: + dependency: transitive + description: + name: flutter_image_compress_macos + sha256: "20019719b71b743aba0ef874ed29c50747461e5e8438980dfa5c2031898f7337" + url: "https://pub.dev" + source: hosted + version: "1.0.3" + flutter_image_compress_ohos: + dependency: transitive + description: + name: flutter_image_compress_ohos + sha256: e76b92bbc830ee08f5b05962fc78a532011fcd2041f620b5400a593e96da3f51 + url: "https://pub.dev" + source: hosted + version: "0.0.3" + flutter_image_compress_platform_interface: + dependency: transitive + description: + name: flutter_image_compress_platform_interface + sha256: "579cb3947fd4309103afe6442a01ca01e1e6f93dc53bb4cbd090e8ce34a41889" + url: "https://pub.dev" + source: hosted + version: "1.0.5" + flutter_image_compress_web: + dependency: transitive + description: + name: flutter_image_compress_web + sha256: b9b141ac7c686a2ce7bb9a98176321e1182c9074650e47bb140741a44b6f5a96 + url: "https://pub.dev" + source: hosted + version: "0.1.5" flutter_inappwebview: dependency: "direct main" description: @@ -679,10 +723,9 @@ packages: flutter_swiper_view: dependency: "direct main" description: - name: flutter_swiper_view - sha256: "2a165b259e8a4c49d4da5626b967ed42a73dac2d075bd9e266ad8d23b9f01879" - url: "https://pub.dev" - source: hosted + path: "package/flutter_swiper_view" + relative: true + source: path version: "1.1.8" flutter_test: dependency: "direct dev" @@ -993,12 +1036,11 @@ packages: huawei_map: dependency: "direct main" description: - path: flutter-hms-map - ref: HEAD - resolved-ref: "9a16541e4016e3bf58a2571e6aa658a4751af399" - url: "https://github.com/fleoparra/hms-flutter-plugin.git" - source: git - version: "6.11.2+303" + name: huawei_map + sha256: "03bd37d565874281be10e7649d09990d88bc5bf724f45051f8cfaca7620fc273" + url: "https://pub.dev" + source: hosted + version: "6.12.0+301" image_picker: dependency: "direct main" description: @@ -1063,6 +1105,22 @@ packages: url: "https://pub.dev" source: hosted version: "0.2.2" + in_app_review: + dependency: "direct main" + description: + name: in_app_review + sha256: ab26ac54dbd802896af78c670b265eaeab7ecddd6af4d0751e9604b60574817f + url: "https://pub.dev" + source: hosted + version: "2.0.11" + in_app_review_platform_interface: + dependency: transitive + description: + name: in_app_review_platform_interface + sha256: fed2c755f2125caa9ae10495a3c163aa7fab5af3585a9c62ef4a6920c5b45f10 + url: "https://pub.dev" + source: hosted + version: "2.0.5" in_app_update: dependency: "direct main" description: @@ -1283,10 +1341,10 @@ packages: dependency: transitive description: name: meta - sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c + sha256: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394" url: "https://pub.dev" source: hosted - version: "1.16.0" + version: "1.17.0" mime: dependency: transitive description: @@ -1816,10 +1874,10 @@ packages: dependency: transitive description: name: test_api - sha256: "522f00f556e73044315fa4585ec3270f1808a4b186c936e612cab0b565ff1e00" + sha256: ab2726c1a94d3176a45960b6234466ec367179b87dd74f1611adb1f3b5fb9d55 url: "https://pub.dev" source: hosted - version: "0.7.6" + version: "0.7.7" time: dependency: transitive description: