diff --git a/.env b/.env index 29cbfd6..31cf9b8 100644 --- a/.env +++ b/.env @@ -29,4 +29,7 @@ integrationIdPayMob=0552355XrXlBl payMobApikey='MDrGqKEWS1rVqHvEPDvPjJ7vZDBExrO7S3BEBgrlfUwTA3i5RnP5ZnvoL3M2S9rEBgrlNTdexH5pTPf7NJrvy1reZJv1Tn7zf7vTIDywjHg1C7Ley38HTDyNA3v7TPfdxJrax1rwPmPtMJyzqKEYZeghq3MuLUrFH3A1AgHcH15CZ9UaZTLOxnw0BTdzHHrBArisZerUMUUzZ1BnBeEijHvNjYLnS1BUICMhSmPhA15ifHyVqKEMHWyKLbyuIPvcH9UeL3vZyDf=XrXlBl' integrationIdPayMobWallet=0552352XrXlBl Ocp-Apim-Subscription-Key=21010e54b50f41a4904708c526e102df -smsPasswordEgypt="E)Pu=an/@Z" \ No newline at end of file +smsPasswordEgypt="E)Pu=an/@Z" + +chatGPTkeySeferNew=sk-proj-6r2SrvboRE7hAIpnn8WmT3BlbkFJdPAOf7WOX8aV8CFFaiY5 +anthropicAIkeySeferNew=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 \ No newline at end of file diff --git a/android/app/build.gradle b/android/app/build.gradle index 08ed96d..0e688b2 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -55,8 +55,8 @@ android { // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. minSdkVersion 22 targetSdkVersion flutter.targetSdkVersion - versionCode 22 - versionName '1.4.6' + versionCode 23 + versionName '1.4.7' // manifestPlaceholders = [mapsApiKey: 'android/app/src/main/AndroidManifest.xml'] } diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/AgoraIrisRTC_iOS.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/AgoraIrisRTC_iOS.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/AgoraIrisRTC_iOS.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/AgoraRtcEngine_iOS.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/AgoraRtcEngine_iOS.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/AgoraRtcEngine_iOS.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/AppAuth-AppAuthCore_Privacy.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/AppAuth-AppAuthCore_Privacy.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/AppAuth-AppAuthCore_Privacy.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/AppAuth.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/AppAuth.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/AppAuth.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/FMDB-FMDB.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/FMDB-FMDB.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/FMDB-FMDB.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/FMDB.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/FMDB.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/FMDB.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/Firebase.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/Firebase.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/Firebase.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/FirebaseCore.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/FirebaseCore.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/FirebaseCore.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/FirebaseCoreInternal-FirebaseCoreInternal_Privacy.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/FirebaseCoreInternal-FirebaseCoreInternal_Privacy.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/FirebaseCoreInternal-FirebaseCoreInternal_Privacy.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/FirebaseCoreInternal.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/FirebaseCoreInternal.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/FirebaseCoreInternal.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/FirebaseInstallations-FirebaseInstallations_Privacy.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/FirebaseInstallations-FirebaseInstallations_Privacy.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/FirebaseInstallations-FirebaseInstallations_Privacy.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/FirebaseInstallations.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/FirebaseInstallations.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/FirebaseInstallations.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/FirebaseMessaging.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/FirebaseMessaging.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/FirebaseMessaging.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/Flutter.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/Flutter.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/Flutter.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/GTMAppAuth-GTMAppAuth_Privacy.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/GTMAppAuth-GTMAppAuth_Privacy.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/GTMAppAuth-GTMAppAuth_Privacy.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/GTMAppAuth.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/GTMAppAuth.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/GTMAppAuth.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/GTMSessionFetcher-GTMSessionFetcher_Core_Privacy.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/GTMSessionFetcher-GTMSessionFetcher_Core_Privacy.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/GTMSessionFetcher-GTMSessionFetcher_Core_Privacy.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/GTMSessionFetcher-GTMSessionFetcher_Full_Privacy.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/GTMSessionFetcher-GTMSessionFetcher_Full_Privacy.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/GTMSessionFetcher-GTMSessionFetcher_Full_Privacy.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/GTMSessionFetcher.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/GTMSessionFetcher.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/GTMSessionFetcher.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/GoogleDataTransport-GoogleDataTransport_Privacy.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/GoogleDataTransport-GoogleDataTransport_Privacy.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/GoogleDataTransport-GoogleDataTransport_Privacy.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/GoogleDataTransport.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/GoogleDataTransport.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/GoogleDataTransport.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/GoogleMLKit.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/GoogleMLKit.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/GoogleMLKit.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/GoogleMaps.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/GoogleMaps.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/GoogleMaps.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/GoogleSignIn-GoogleSignIn.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/GoogleSignIn-GoogleSignIn.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/GoogleSignIn-GoogleSignIn.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/GoogleSignIn.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/GoogleSignIn.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/GoogleSignIn.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/GoogleToolboxForMac-GoogleToolboxForMac_Logger_Privacy.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/GoogleToolboxForMac-GoogleToolboxForMac_Logger_Privacy.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/GoogleToolboxForMac-GoogleToolboxForMac_Logger_Privacy.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/GoogleToolboxForMac-GoogleToolboxForMac_Privacy.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/GoogleToolboxForMac-GoogleToolboxForMac_Privacy.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/GoogleToolboxForMac-GoogleToolboxForMac_Privacy.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/GoogleToolboxForMac.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/GoogleToolboxForMac.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/GoogleToolboxForMac.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/GoogleUtilities-GoogleUtilities_Privacy.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/GoogleUtilities-GoogleUtilities_Privacy.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/GoogleUtilities-GoogleUtilities_Privacy.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/GoogleUtilities.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/GoogleUtilities.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/GoogleUtilities.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/GoogleUtilitiesComponents.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/GoogleUtilitiesComponents.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/GoogleUtilitiesComponents.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/MLImage.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/MLImage.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/MLImage.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/MLKitCommon.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/MLKitCommon.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/MLKitCommon.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/MLKitTextRecognition-LatinOCRResources.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/MLKitTextRecognition-LatinOCRResources.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/MLKitTextRecognition-LatinOCRResources.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/MLKitTextRecognition.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/MLKitTextRecognition.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/MLKitTextRecognition.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/MLKitTextRecognitionCommon.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/MLKitTextRecognitionCommon.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/MLKitTextRecognitionCommon.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/MLKitVision.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/MLKitVision.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/MLKitVision.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/Pods-Runner.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/Pods-Runner.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/Pods-Runner.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/Pods-RunnerTests.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/Pods-RunnerTests.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/Pods-RunnerTests.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/PromisesObjC-FBLPromises_Privacy.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/PromisesObjC-FBLPromises_Privacy.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/PromisesObjC-FBLPromises_Privacy.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/PromisesObjC.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/PromisesObjC.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/PromisesObjC.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/Stripe-Stripe.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/Stripe-Stripe.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/Stripe-Stripe.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/Stripe.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/Stripe.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/Stripe.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/StripeApplePay.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/StripeApplePay.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/StripeApplePay.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/StripeCore-StripeCore.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/StripeCore-StripeCore.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/StripeCore-StripeCore.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/StripeCore.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/StripeCore.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/StripeCore.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/StripeFinancialConnections-StripeFinancialConnections.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/StripeFinancialConnections-StripeFinancialConnections.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/StripeFinancialConnections-StripeFinancialConnections.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/StripeFinancialConnections.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/StripeFinancialConnections.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/StripeFinancialConnections.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/StripePaymentSheet-StripePaymentSheet.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/StripePaymentSheet-StripePaymentSheet.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/StripePaymentSheet-StripePaymentSheet.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/StripePaymentSheet.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/StripePaymentSheet.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/StripePaymentSheet.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/StripePayments-Stripe3DS2.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/StripePayments-Stripe3DS2.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/StripePayments-Stripe3DS2.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/StripePayments-StripePayments.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/StripePayments-StripePayments.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/StripePayments-StripePayments.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/StripePayments.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/StripePayments.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/StripePayments.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/StripePaymentsUI-StripePaymentsUI.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/StripePaymentsUI-StripePaymentsUI.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/StripePaymentsUI-StripePaymentsUI.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/StripePaymentsUI.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/StripePaymentsUI.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/StripePaymentsUI.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/StripeUICore-StripeUICore.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/StripeUICore-StripeUICore.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/StripeUICore-StripeUICore.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/StripeUICore.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/StripeUICore.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/StripeUICore.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/TOCropViewController-TOCropViewControllerBundle.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/TOCropViewController-TOCropViewControllerBundle.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/TOCropViewController-TOCropViewControllerBundle.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/TOCropViewController.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/TOCropViewController.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/TOCropViewController.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/agora_rtc_engine.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/agora_rtc_engine.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/agora_rtc_engine.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/audio_session.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/audio_session.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/audio_session.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/background_location.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/background_location.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/background_location.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/camera_avfoundation.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/camera_avfoundation.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/camera_avfoundation.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/device_info_plus.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/device_info_plus.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/device_info_plus.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/firebase_core.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/firebase_core.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/firebase_core.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/firebase_messaging.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/firebase_messaging.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/firebase_messaging.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/flutter_local_notifications.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/flutter_local_notifications.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/flutter_local_notifications.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/flutter_secure_storage.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/flutter_secure_storage.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/flutter_secure_storage.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/flutter_tts.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/flutter_tts.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/flutter_tts.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/geolocator_apple.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/geolocator_apple.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/geolocator_apple.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/google_maps_flutter_ios.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/google_maps_flutter_ios.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/google_maps_flutter_ios.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/google_mlkit_commons.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/google_mlkit_commons.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/google_mlkit_commons.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/google_mlkit_text_recognition.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/google_mlkit_text_recognition.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/google_mlkit_text_recognition.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/google_sign_in_ios-google_sign_in_ios_privacy.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/google_sign_in_ios-google_sign_in_ios_privacy.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/google_sign_in_ios-google_sign_in_ios_privacy.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/google_sign_in_ios.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/google_sign_in_ios.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/google_sign_in_ios.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/image_cropper.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/image_cropper.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/image_cropper.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/image_picker_ios.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/image_picker_ios.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/image_picker_ios.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/iris_method_channel.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/iris_method_channel.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/iris_method_channel.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/just_audio.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/just_audio.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/just_audio.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/local_auth_ios.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/local_auth_ios.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/local_auth_ios.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/location.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/location.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/location.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/nanopb.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/nanopb.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/nanopb.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/package_info_plus.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/package_info_plus.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/package_info_plus.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/path_provider_foundation.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/path_provider_foundation.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/path_provider_foundation.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/permission_handler_apple.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/permission_handler_apple.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/permission_handler_apple.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/record_darwin.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/record_darwin.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/record_darwin.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/share.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/share.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/share.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/sqflite.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/sqflite.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/sqflite.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/stripe_ios.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/stripe_ios.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/stripe_ios.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/url_launcher_ios.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/url_launcher_ios.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/url_launcher_ios.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/vibration.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/vibration.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/vibration.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/video_player_avfoundation.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/video_player_avfoundation.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/video_player_avfoundation.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/wakelock_plus.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/wakelock_plus.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/wakelock_plus.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/webview_flutter_wkwebview-webview_flutter_wkwebview_privacy.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/webview_flutter_wkwebview-webview_flutter_wkwebview_privacy.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/webview_flutter_wkwebview-webview_flutter_wkwebview_privacy.build/dgph differ diff --git a/android/build/ios/Pods.build/Release-iphonesimulator/webview_flutter_wkwebview.build/dgph b/android/build/ios/Pods.build/Release-iphonesimulator/webview_flutter_wkwebview.build/dgph new file mode 100644 index 0000000..e791694 Binary files /dev/null and b/android/build/ios/Pods.build/Release-iphonesimulator/webview_flutter_wkwebview.build/dgph differ diff --git a/assets/images/1.png b/assets/images/1.png new file mode 100644 index 0000000..290e187 Binary files /dev/null and b/assets/images/1.png differ diff --git a/assets/images/2.png b/assets/images/2.png index 7567e84..7c4d8d3 100644 Binary files a/assets/images/2.png and b/assets/images/2.png differ diff --git a/assets/images/3.png b/assets/images/3.png new file mode 100644 index 0000000..81c974f Binary files /dev/null and b/assets/images/3.png differ diff --git a/assets/images/4.png b/assets/images/4.png new file mode 100644 index 0000000..72c8a89 Binary files /dev/null and b/assets/images/4.png differ diff --git a/assets/images/5.png b/assets/images/5.png new file mode 100644 index 0000000..aa6a06f Binary files /dev/null and b/assets/images/5.png differ diff --git a/lib/controller/functions/crud.dart b/lib/controller/functions/crud.dart index a8f1824..77aeec2 100644 --- a/lib/controller/functions/crud.dart +++ b/lib/controller/functions/crud.dart @@ -106,77 +106,32 @@ class CRUD { Future.delayed(const Duration(seconds: 2)); var extractedString = await arabicTextExtractByVisionAndAI(imagePath: imagePath); - // print('extractedString'); - var json = jsonDecode(extractedString); // print(extractedString); - // print(json); - var textValues = getAllTextValuesWithLineNumbers(json); - // List textValues = getAllTextValues(json); - - print('extractedData'); + var json = jsonDecode(extractedString); + var textValues = extractTextFromLines(json); print(textValues); - await AI().geminiAiExtraction(prompt, textValues); + // await Get.put(AI()).geminiAiExtraction(prompt, textValues); + await Get.put(AI()).anthropicAI(textValues, prompt, imagePath); } - Map>> getAllTextValuesWithLineNumbers( - Map json) { - Map>> output = {}; - int lineNumber = 1; + String extractTextFromLines(Map jsonData) { + final readResult = jsonData['readResult']; + final blocks = readResult['blocks']; - if (json.containsKey('regions')) { - List regions = json['regions']; - for (Map region in regions) { - if (region.containsKey('lines')) { - List lines = region['lines']; - List> linesWithText = []; - for (Map line in lines) { - if (line.containsKey('words')) { - List words = line['words']; - String lineText = ""; - for (Map word in words) { - if (word.containsKey('text')) { - lineText += word['text'] + " "; - } - } - lineText = lineText.trim(); - linesWithText.add( - {"line_number": lineNumber.toString(), "text": lineText}); - lineNumber++; - } - } - output["region_${region.hashCode}"] = linesWithText; - } + final StringBuffer buffer = StringBuffer(); + + for (final block in blocks) { + final lines = block['lines']; + for (final line in lines) { + final text = line['text']; + buffer.write(text); + buffer.write('\n'); } } - return output; + return buffer.toString().trim(); } - // List getAllTextValues(Map json) { - // List textValues = []; - - // if (json.containsKey('regions')) { - // List regions = json['regions']; - // for (Map region in regions) { - // if (region.containsKey('lines')) { - // List lines = region['lines']; - // for (Map line in lines) { - // if (line.containsKey('words')) { - // List words = line['words']; - // for (Map word in words) { - // if (word.containsKey('text')) { - // textValues.add(word['text']); - // } - // } - // } - // } - // } - // } - // } - - // return textValues; - // } - Future arabicTextExtractByVisionAndAI({ required String imagePath, }) async { @@ -184,16 +139,14 @@ class CRUD { 'Content-Type': 'application/json', 'Ocp-Apim-Subscription-Key': '21010e54b50f41a4904708c526e102df' }; - // var url = Uri.parse( - // 'https://ocrhamza.cognitiveservices.azure.com/vision/v2.1/ocr?language=ar', - // ); + String imagePathFull = '${AppLink.server}card_image/$imagePath-${box.read(BoxName.driverID)}.jpg'; - var request = http.Request( - 'POST', - Uri.parse( - 'https://ocrhamza.cognitiveservices.azure.com/vision/v2.1/ocr?language=ar')); + var request = http.Request('POST', Uri.parse( + // 'https://ocrhamza.cognitiveservices.azure.com/vision/v2.1/ocr?language=ar')); + // 'https://eastus.api.cognitive.microsoft.com/vision/v3.2/ocr' + 'https://eastus.api.cognitive.microsoft.com/computervision/imageanalysis:analyze?features=caption,read&model-version=latest&language=en&api-version=2024-02-01')); request.body = json.encode({"url": imagePathFull}); request.headers.addAll(headers); diff --git a/lib/controller/functions/gemeni.dart b/lib/controller/functions/gemeni.dart index 65fcea1..b9e47af 100644 --- a/lib/controller/functions/gemeni.dart +++ b/lib/controller/functions/gemeni.dart @@ -1,6 +1,6 @@ import 'dart:convert'; -import 'dart:developer'; import 'dart:io'; +import 'package:SEFER/controller/functions/crud.dart'; import 'package:get/get.dart'; import 'package:image_cropper/image_cropper.dart'; import 'package:image_picker/image_picker.dart'; @@ -10,13 +10,20 @@ import 'package:path_provider/path_provider.dart'; import '../../constant/api_key.dart'; import '../../constant/colors.dart'; +import 'upload_image.dart'; class AI extends GetxController { final picker = ImagePicker(); Map responseMap = {}; Map responseCarLicenseMap = {}; Map responseBackCarLicenseMap = {}; - Map responseIdCardeMap = {}; + Map responseIdCardMap = {}; + Map responseIdCardDriverEgyptBack = {}; + Map responseIdCardDriverEgyptFront = {}; + Map responseIdEgyptFront = {}; + Map responseIdEgyptBack = {}; + Map responseIdEgyptDriverLicense = {}; + String? responseIdCardDriverEgypt1; bool isloading = false; var image; CroppedFile? croppedFile; @@ -68,6 +75,24 @@ class AI extends GetxController { } } + bool isLoading = false; + Future allMethodForAI(String prompt, linkPHP, imagePath) async { + isLoading = true; + update(); + await ImageController().choosImage(linkPHP, imagePath); + Future.delayed(const Duration(seconds: 2)); + var extractedString = + await CRUD().arabicTextExtractByVisionAndAI(imagePath: imagePath); + // print(extractedString); + var json = jsonDecode(extractedString); + var textValues = CRUD().extractTextFromLines(json); + print(textValues); + // await Get.put(AI()).geminiAiExtraction(prompt, textValues); + await Get.put(AI()).anthropicAI(textValues, prompt, imagePath); + isLoading = false; + update(); + } + Future generateContent() async { await pickImage(); if (image != null) { @@ -158,42 +183,102 @@ class AI extends GetxController { } } + Future anthropicAI( + String payload, String prompt, String idType) async { + var messagesData = [ + { + "role": "user", + "content": [ + {"type": "text", "text": "$payload $prompt"} + ] + } + ]; + + var requestBody = jsonEncode({ + "model": "claude-3-haiku-20240307", + "max_tokens": 1024, + "temperature": 0, + "system": "Json output only without any additional ", + "messages": messagesData, + }); + + print('requestBody'); + print(requestBody); + + final response = await http.post( + Uri.parse('https://api.anthropic.com/v1/messages'), + headers: { + 'x-api-key': + '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', + 'anthropic-version': '2023-06-01', + 'content-type': 'application/json' + }, + body: requestBody, + ); + + if (response.statusCode == 200) { + var responseData = jsonDecode(utf8.decode(response.bodyBytes)); + // Process the responseData as needed + print(utf8.decode(response.bodyBytes)); + if (idType == 'car_back') { + responseIdCardDriverEgyptBack = + jsonDecode(responseData['content'][0]['text']); + print(responseIdCardDriverEgyptBack); + } else if (idType == 'car_front') { + responseIdCardDriverEgyptFront = + jsonDecode(responseData['content'][0]['text']); + print(responseIdCardDriverEgyptFront); + } else if (idType == 'id_front') { + responseIdEgyptFront = jsonDecode(responseData['content'][0]['text']); + print(responseIdEgyptFront); + } else if (idType == 'id_back') { + responseIdEgyptBack = jsonDecode(responseData['content'][0]['text']); + print(responseIdEgyptBack); + } else if (idType == 'driver_license') { + responseIdEgyptDriverLicense = + jsonDecode(responseData['content'][0]['text']); + print(responseIdEgyptDriverLicense); + } + + update(); + return responseData.toString(); + } + return responseIdCardDriverEgyptBack.toString(); + } + Future geminiAiExtraction(String prompt, payload) async { var requestBody = jsonEncode({ - 'contents': [ + "contents": [ { - 'parts': [ - // { - // 'inlineData': { - // 'mimeType': 'image/jpeg', - // 'data': imageData, - // }, - // }, - { - 'text': - "Extract the desired information from the following passage as json decoded like $prompt .and look for this instruction first name in line 3or 2 ,fullname in line 4 from it written left to right but you modify it rtl,address in line 5 it written left to right but you modify it rtl and 6,dob,nationalid in the last line as just in this:\n\n$payload" - }, - ], - }, + "parts": [ + {"text": "$payload $prompt"} + ] + } ], - 'generationConfig': { - 'temperature': 0.4, - 'topK': 32, - 'topP': 1, - 'maxOutputTokens': 4096, - 'stopSequences': [], + "generationConfig": { + "temperature": 1, + "topK": 64, + "topP": 0.95, + "maxOutputTokens": 8192, + "stopSequences": [] }, - 'safety_settings': [ - {"category": "HARM_CATEGORY_HARASSMENT", "threshold": "BLOCK_NONE"}, - {"category": "HARM_CATEGORY_HATE_SPEECH", "threshold": "BLOCK_NONE"}, + "safetySettings": [ + { + "category": "HARM_CATEGORY_HARASSMENT", + "threshold": "BLOCK_MEDIUM_AND_ABOVE" + }, + { + "category": "HARM_CATEGORY_HATE_SPEECH", + "threshold": "BLOCK_MEDIUM_AND_ABOVE" + }, { "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT", - "threshold": "BLOCK_NONE" + "threshold": "BLOCK_MEDIUM_AND_ABOVE" }, { "category": "HARM_CATEGORY_DANGEROUS_CONTENT", - "threshold": "BLOCK_NONE" - }, + "threshold": "BLOCK_MEDIUM_AND_ABOVE" + } ] }); // print(requestBody); @@ -201,7 +286,8 @@ class AI extends GetxController { final response = await http.post( Uri.parse( // 'https://generativelanguage.googleapis.com/v1beta/models/gemini-pro-vision:generateContent?key=${AK.geminiApi}'), - 'https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-pro-latest:generateContent?key=AIzaSyCyoLcSkDzK5_SMe00nhut56SSXWPR074w'), + // 'https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-pro-latest:generateContent?key=${AK.geminiApi}'), + 'https://generativelanguage.googleapis.com/v1beta/models/gemini-1.0-pro:generateContent?key=${AK.geminiApi}'), headers: {'Content-Type': 'application/json'}, body: requestBody, ); @@ -222,7 +308,10 @@ class AI extends GetxController { if (jsonString != null) { // Convert the JSON object to a String jsonString = jsonEncode(json.decode(jsonString)); - print(jsonString); + + responseIdCardDriverEgyptBack = jsonDecode(jsonString); + print(responseIdCardDriverEgyptBack); + update(); } else { print("JSON string not found"); } diff --git a/lib/controller/functions/location_background_controller.dart b/lib/controller/functions/location_background_controller.dart index 326f519..72ec1c7 100644 --- a/lib/controller/functions/location_background_controller.dart +++ b/lib/controller/functions/location_background_controller.dart @@ -21,13 +21,14 @@ class LocationBackgroundController extends GetxController { var status = await Permission.locationAlways.status; print('Initial status: $status'); - if (status.isDenied || status.isRestricted) { + if (status == PermissionStatus.denied || + status == PermissionStatus.restricted) { // Request permission status = await Permission.locationAlways.request(); print('Requested status: $status'); } - - if (status.isPermanentlyDenied) { + status = await Permission.locationAlways.status; + if (!status.isGranted) { // Open app settings if permission is permanently denied openAppSettings(); box.write(BoxName.locationPermission, 'true'); diff --git a/lib/controller/home/splash_screen_controlle.dart b/lib/controller/home/splash_screen_controlle.dart index b4f1978..266ddaa 100644 --- a/lib/controller/home/splash_screen_controlle.dart +++ b/lib/controller/home/splash_screen_controlle.dart @@ -1,5 +1,7 @@ import 'dart:async'; +import 'package:SEFER/controller/functions/gemeni.dart'; +import 'package:SEFER/views/auth/captin/register_captin.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:SEFER/views/auth/login_page.dart'; @@ -48,7 +50,7 @@ class SplashScreenController extends GetxController box.read(BoxName.onBoarding) == null ? Get.off(() => OnBoardingPage()) : box.read(BoxName.emailDriver) != null - ? Get.off(() => HomeCaptain()) + ? Get.off(() => RegisterCaptin()) : Get.off(() => LoginCaptin()); }); } diff --git a/lib/controller/local/translations.dart b/lib/controller/local/translations.dart index 361dfce..a7eefee 100644 --- a/lib/controller/local/translations.dart +++ b/lib/controller/local/translations.dart @@ -4,9 +4,16 @@ class MyTranslation extends Translations { @override Map> get keys => { "ar": { - 'Welcome to Sefer!': '', - 'Get to your destination quickly and easily.': '', - 'Enjoy a safe and comfortable ride.': '', + 'Capture an Image of Your Driver’s License': + 'التقط صورة لرخصة قيادتك', + 'Sign in with Google for easier email and name entry': + 'سجل دخولك باستخدام جوجل لتسجيل بريدك الإلكتروني واسمك بسهولة', + 'You will choose allow all the time to be ready receive orders': + 'ستختار السماح طوال الوقت لتكون جاهزًا لاستقبال الطلبات', + 'Welcome to Sefer!': 'مرحبا بكم في سفر!', + 'Get to your destination quickly and easily.': + 'وصول إلى وجهتك بسرعة وسهولة.', + 'Enjoy a safe and comfortable ride.': 'استمتع برحلة آمنة ومريحة.', "Choose Language": "اخْتَر اللُّغَة", "Login": "تَسْجِيل الدُّخُول", "Pay with Wallet": 'ادْفَع بِاسْتِخْدَام المَحْفَظَة', diff --git a/lib/views/auth/captin/ai_page.dart b/lib/views/auth/captin/ai_page.dart index 6699974..b36697c 100644 --- a/lib/views/auth/captin/ai_page.dart +++ b/lib/views/auth/captin/ai_page.dart @@ -18,40 +18,532 @@ class AiPage extends StatelessWidget { ScanDocumentsByApi scanDocumentsByApi = Get.put(ScanDocumentsByApi()); RegisterCaptainController registerCaptainController = Get.put(RegisterCaptainController()); - AI contentController = Get.put(AI()); + @override Widget build(BuildContext context) { + Get.put(AI()); + String text = ''; return MyScafolld( title: 'Documents check'.tr, body: [ - Padding( - padding: const EdgeInsets.all(8.0), - child: Column( - children: [ - Container( - width: Get.width, - height: Get.height * .3, - decoration: AppStyle.boxDecoration1, - child: Center( - child: InkWell( - onTap: () async { - await CRUD().allMethodForAI( - 'firstName,fullName,address,dob,nationalNo,', - AppLink.uploadEgypt, - 'idFront'); //egypt - }, - child: Text( - 'Take Picture Of ID Card'.tr, - style: AppStyle.title, - ), + GetBuilder(builder: (controller) { + return controller.isLoading + ? const MyCircularProgressIndicator() + : Padding( + padding: const EdgeInsets.all(8.0), + child: ListView( + children: [ + egyptDriverLicense(), + egyptCarLicenceFront(), + egyptCarLicenceBack(), + egyptDriverIDFront(), + egyptDriverIDBack(), + ], + ), + ); + }), + ], + isleading: true); + } + + GetBuilder egyptDriverLicense() { + return GetBuilder( + builder: (ai) { + if (ai.responseIdEgyptDriverLicense.isNotEmpty) { + final expiryDate = ai.responseIdEgyptDriverLicense['expiry_date']; + + // Check if the expiry date is before today + final today = DateTime.now(); + + // Try parsing the expiry date. If it fails, set it to null. + final expiryDateTime = DateTime.tryParse(expiryDate); + final isExpired = + expiryDateTime != null && expiryDateTime.isBefore(today); + + return Card( + elevation: 4.0, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(16.0), + ), + child: Padding( + padding: const EdgeInsets.all(16.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text('Driver\'s License'.tr, style: AppStyle.headTitle2), + const SizedBox(height: 8.0), + const Divider(color: AppColor.accentColor), + const SizedBox(height: 8.0), + Text( + '${'License Type'.tr}: ${ai.responseIdEgyptDriverLicense['license_type']}', + style: AppStyle.title, + ), + const SizedBox(height: 8.0), + Text( + '${'National Number'.tr}: ${ai.responseIdEgyptDriverLicense['national_number']}', + style: AppStyle.title.copyWith( + color: ai.responseIdEgyptDriverLicense[ + 'national_number'] == + ai.responseIdEgyptBack['nationalID'] + ? AppColor.greenColor + : AppColor.redColor), + ), + const SizedBox(height: 8.0), + Text( + '${'Name (Arabic)'.tr}: ${ai.responseIdEgyptDriverLicense['name_arabic']}', + ), + const SizedBox(height: 8.0), + Text( + '${'Name (English)'.tr}: ${ai.responseIdEgyptDriverLicense['name_english']}', + ), + const SizedBox(height: 8.0), + Text( + '${'Address'.tr}: ${ai.responseIdEgyptDriverLicense['address']}', + ), + const SizedBox(height: 8.0), + Text( + '${'Issue Date'.tr}: ${ai.responseIdEgyptDriverLicense['issue_date']}', + ), + const SizedBox(height: 8.0), + Text( + '${'Expiry Date'.tr}: ${ai.responseIdEgyptDriverLicense['expiry_date']}', + style: AppStyle.title.copyWith( + color: + !isExpired ? AppColor.greenColor : AppColor.redColor, ), ), - ) + const SizedBox(height: 8.0), + Text( + '${'License Categories'.tr}: ${ai.responseIdEgyptDriverLicense['license_categories']}', + ), + ], + ), + ), + ); + } + return Card( + child: InkWell( + onTap: () async { + await ai.allMethodForAI( + '''Write a JSON object from the following information extracted from the provided Arabic text:license_type,national_number,name_arabic,name_english,address,issue_date,expiry_date,license_categories.and (date formate year-month-day in latin numbers) ''', + AppLink.uploadEgypt, + 'driver_license'); //egypt + }, + child: Column( + children: [ + Image.asset( + 'assets/images/5.png', + height: Get.height * .25, + width: double.maxFinite, + fit: BoxFit.fitHeight, + ), + Text( + 'Capture an Image of Your Driver License'.tr, + style: AppStyle.title, + ), ], ), ), - ], - isleading: true); + ); + }, + ); + } + + GetBuilder egyptDriverIDBack() { + return GetBuilder( + builder: (ai) { + if (ai.responseIdEgyptBack.isNotEmpty) { + final taxExpiryDate = ai.responseIdEgyptBack['expirationDate']; + + // Check if the tax expiry date is before today + final today = DateTime.now(); + + // Try parsing the tax expiry date. If it fails, set it to null. + final taxExpiryDateTime = DateTime.tryParse(taxExpiryDate); + final isExpired = + taxExpiryDateTime != null && taxExpiryDateTime.isBefore(today); + + return Card( + elevation: 4.0, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(16.0), + ), + child: Padding( + padding: const EdgeInsets.all(16.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text('ID Documents Back'.tr, style: AppStyle.headTitle2), + const SizedBox(height: 8.0), + const Divider(color: AppColor.accentColor), + const SizedBox(height: 8.0), + // Assuming these keys exist in ai.responseIdEgyptFront + Text( + '${'National ID'.tr}: ${ai.responseIdEgyptBack['nationalID']}', + style: AppStyle.title), + + const SizedBox(height: 8.0), + Text( + '${'Occupation'.tr}: ${ai.responseIdEgyptBack['occupation']}', // Assuming 'occupation' exists + ), + const SizedBox(height: 8.0), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + '${'Issue Date'.tr}: ${ai.responseIdEgyptBack['issueDate']}', // Assuming 'issueDate' exists + ), + Text( + '${'Gender'.tr}: ${ai.responseIdEgyptBack['gender']}', // Assuming 'gender' exists + ), + ], + ), + const SizedBox(height: 8.0), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + '${'Religion'.tr}: ${ai.responseIdEgyptBack['religion']}', // Assuming 'religion' exists + ), + Text( + '${'Marital Status'.tr}: ${ai.responseIdEgyptBack['maritalStatus']}', // Assuming 'maritalStatus' exists + ), + ], + ), + const SizedBox(height: 8.0), + Text( + '${'Full Name (Marital)'.tr}: ${ai.responseIdEgyptBack['fullNameMaritial']}', // Assuming 'fullNameMaritial' exists + ), + const SizedBox(height: 8.0), + Text( + '${'Expiration Date'.tr}: ${ai.responseIdEgyptBack['expirationDate']}', // Assuming 'expirationDate' exists + style: AppStyle.title.copyWith( + color: !isExpired + ? AppColor.greenColor + : AppColor.redColor), + ), + ], + ), + ), + ); + } + return Card( + child: InkWell( + onTap: () async { + await ai.allMethodForAI( + '''Write a JSON from the following information extracted from the provided Arabic text:nationalID,issueDate,occupation,gender,religion,maritalStatus,fullNameMaritial if(أعزب)=none ,expirationDate.and (date formate year-month-day in latin numbers) ''', + AppLink.uploadEgypt, + 'id_back'); //egypt + }, + child: Column( + children: [ + Image.asset( + 'assets/images/2.png', + height: Get.height * .25, + width: double.maxFinite, + fit: BoxFit.fitHeight, + ), + Text( + 'Capture an Image of Your ID Document Back'.tr, + style: AppStyle.title, + ), + ], + ), + ), + ); + }, + ); + } + + GetBuilder egyptDriverIDFront() { + return GetBuilder( + builder: (ai) { + if (ai.responseIdEgyptFront.isNotEmpty) { + return Card( + elevation: 4.0, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(16.0), + ), + child: Padding( + padding: const EdgeInsets.all(16.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text('ID Documents Front'.tr, style: AppStyle.headTitle2), + const SizedBox(height: 8.0), + const Divider(color: AppColor.accentColor), + const SizedBox(height: 8.0), + // Removed Make, Model, etc. as they are not available + + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + '${'First Name'.tr}: ${ai.responseIdEgyptFront['first_name']}', + ), + Text( + '${'CardID'.tr}: ${ai.responseIdEgyptFront['card_id']}', + ), + ], + ), + const SizedBox(height: 8.0), + Text( + '${'Full Name'.tr}: ${ai.responseIdEgyptFront['full_name']}', + ), + const SizedBox(height: 8.0), + Text( + '${'Address'.tr}: ${ai.responseIdEgyptFront['address']}', + ), + const SizedBox(height: 8.0), + Text( + '${'National Number'.tr}: ${ai.responseIdEgyptFront['national_number']}', + ), + const SizedBox(height: 8.0), + + // Removed Inspection Date as it's not available + ], + ), + ), + ); + } + return Card( + child: InkWell( + onTap: () async { + await ai.allMethodForAI( + '''Write a JSON object from the following information extracted from the provided Arabic text:first_name: The word next to "بطاقة تحقيق الشخصية" (National Identification Card).full_name: The full name on the next line after the first name.address: The complete address spanning the next two lines.national_number: The Arabic numeral representing the National ID number before the last line.card_id: The card ID in English on the last line ''', + AppLink.uploadEgypt, + 'id_front'); //egypt + }, + child: Column( + children: [ + Image.asset( + 'assets/images/1.png', + height: Get.height * .25, + width: double.maxFinite, + fit: BoxFit.fitHeight, + ), + Text( + 'Capture an Image of Your ID Document front'.tr, + style: AppStyle.title, + ), + ], + ), + ), + ); + }, + ); + } + + GetBuilder egyptCarLicenceFront() { + return GetBuilder( + builder: (ai) { + if (ai.responseIdCardDriverEgyptFront.isNotEmpty) { + // No need to access ai.responseIdCardDriverEgyptBack anymore + final licenseExpiryDate = DateTime.parse( + ai.responseIdCardDriverEgyptFront['LicenseExpirationDate']); + + // Check if license has expired + final today = DateTime.now(); + final isLicenseExpired = licenseExpiryDate.isBefore(today); + + return Card( + elevation: 4.0, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(16.0), + ), + child: Padding( + padding: const EdgeInsets.all(16.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text('Vehicle Details Front'.tr, style: AppStyle.headTitle2), + const SizedBox(height: 8.0), + const Divider(color: AppColor.accentColor), + const SizedBox(height: 8.0), + // Removed Make, Model, etc. as they are not available + + Text( + '${'Plate Number'.tr}: ${ai.responseIdCardDriverEgyptFront['car_plate']}', + ), + const SizedBox(height: 8.0), + Text( + '${'Owner Name'.tr}: ${ai.responseIdCardDriverEgyptFront['owner']}', + ), + const SizedBox(height: 8.0), + Text( + '${'Address'.tr}: ${ai.responseIdCardDriverEgyptFront['address']}', + ), + const SizedBox(height: 8.0), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + '${'License Expiry Date'.tr}: ${licenseExpiryDate.toString().substring(0, 10)}', + style: TextStyle( + color: isLicenseExpired ? Colors.red : Colors.green, + ), + ), + // Removed Fuel as it's not available + ], + ), + // Removed Inspection Date as it's not available + ], + ), + ), + ); + } + return Card( + child: InkWell( + onTap: () async { + ai.allMethodForAI( + 'extract all fields as json for keys[LicenseExpirationDate,car_plate,owner,address] replace | by space,and date formate year-month-day', + AppLink.uploadEgypt, + 'car_front'); + }, + child: Column( + children: [ + Image.asset( + 'assets/images/3.png', + height: Get.height * .25, + width: double.maxFinite, + fit: BoxFit.fitHeight, + ), + Text( + 'Capture an Image of Your car license front '.tr, + style: AppStyle.title, + ), + ], + ), + ), + ); + }, + ); + } + + GetBuilder egyptCarLicenceBack() { + return GetBuilder( + builder: (ai) { + if (ai.responseIdCardDriverEgyptBack.isNotEmpty) { + // print(ai.responseIdCardDriverEgyptBack); + + // Get the tax expiry date from the response + final taxExpiryDate = ai.responseIdCardDriverEgyptBack['tax_expiry']; + + // Get the inspection date from the response + final inspectionDate = + ai.responseIdCardDriverEgyptBack['inspection_date']; + + // Check if the tax expiry date is before today + final today = DateTime.now(); + + // Try parsing the tax expiry date. If it fails, set it to null. + final taxExpiryDateTime = DateTime.tryParse(taxExpiryDate); + final isExpired = + taxExpiryDateTime != null && taxExpiryDateTime.isBefore(today); + + // Check if the inspection date is before today + final inspectionDateTime = DateTime(int.parse(inspectionDate), 1, 1); + final isInspectionExpired = inspectionDateTime.isBefore(today); + + return Card( + elevation: 4.0, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(16.0), + ), + child: Padding( + padding: const EdgeInsets.all(16.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text('Vehicle Details Back'.tr, style: AppStyle.headTitle2), + const SizedBox(height: 8.0), + const Divider(color: AppColor.accentColor), + const SizedBox(height: 8.0), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + '${'Make'.tr}: ${ai.responseIdCardDriverEgyptBack['make']}'), + Text( + '${'Model'.tr}: ${ai.responseIdCardDriverEgyptBack['model']}'), + ], + ), + const SizedBox(height: 8.0), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + '${'Year'.tr}: ${ai.responseIdCardDriverEgyptBack['year']}'), + Text( + '${'Chassis'.tr}: ${ai.responseIdCardDriverEgyptBack['chassis']}'), + ], + ), + const SizedBox(height: 8.0), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + '${'Color'.tr}: ${ai.responseIdCardDriverEgyptBack['color']}'), + Text( + '${'Displacement'.tr}: ${ai.responseIdCardDriverEgyptBack['displacement']} cc'), + ], + ), + const SizedBox(height: 8.0), + Text( + '${'Fuel'.tr}: ${ai.responseIdCardDriverEgyptBack['fuel']}'), + const SizedBox(height: 8.0), + Text( + '${'Tax Expiry Date'.tr}: ${taxExpiryDateTime != null ? taxExpiryDate : 'N/A'}', + style: TextStyle( + color: isExpired ? Colors.red : Colors.green, + ), + ), + const SizedBox(height: 8.0), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + '${'Inspection Date'.tr}: $inspectionDate', + style: TextStyle( + color: + isInspectionExpired ? Colors.red : Colors.green, + ), + ), + // Text( + // '${'Cylinders'.tr}: ${ai.responseIdCardDriverEgypt['cylinders']}'), + ], + ), + ], + ), + ), + ); + } + return Card( + child: InkWell( + onTap: () async { + ai.allMethodForAI( + 'this extracted car license analyze it to get Json just without any text for keys[make, year, chassis, model, engine, displacement, cylinders, fuel, color, inspection_date,assurnceNumber, tax_expiry,make date format year-month-day', + AppLink.uploadEgypt, + 'car_back'); + }, + child: Column( + children: [ + Image.asset( + 'assets/images/4.png', + height: Get.height * .25, + width: double.maxFinite, + fit: BoxFit.fitHeight, + ), + Text( + 'Capture an Image of Your car license back'.tr, + style: AppStyle.title, + ), + ], + ), + ), + ); + }, + ); } GetBuilder egyptDriverLicenseWidget() { @@ -79,7 +571,8 @@ class AiPage extends StatelessWidget { child: contentController.responseMap.isEmpty ? Center( child: Text( - 'Take Picture Of ID Card'.tr, + 'Capture an Image of Your Driver’s License' + .tr, style: AppStyle.title, ), ) diff --git a/lib/views/auth/captin/cards/egypt_card.dart b/lib/views/auth/captin/cards/egypt_card.dart new file mode 100644 index 0000000..204a9cb --- /dev/null +++ b/lib/views/auth/captin/cards/egypt_card.dart @@ -0,0 +1,24 @@ +import 'package:SEFER/controller/functions/gemeni.dart'; +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; + +class EgyptCard extends StatelessWidget { + const EgyptCard({super.key}); + + @override + Widget build(BuildContext context) { + Get.put(AI()); + return Scaffold( + appBar: AppBar( + title: const Text('Egypt Card'), + ), + body: GetBuilder(builder: (controller) { + return Center( + child: Container( + child: Text( + controller.responseIdCardDriverEgyptBack['firstName'].toString()), + )); + }), + ); + } +} diff --git a/lib/views/auth/captin/cards/gemini_egypt.dart b/lib/views/auth/captin/cards/gemini_egypt.dart new file mode 100644 index 0000000..827f8f0 --- /dev/null +++ b/lib/views/auth/captin/cards/gemini_egypt.dart @@ -0,0 +1,93 @@ +import 'dart:convert'; +import 'package:get/get.dart'; +import 'package:http/http.dart' as http; + +class GeminiEgypt extends GetxController { + Map responseIdCardDriverEgypt = {}; + String? responseIdCardDriverEgypt1; + + Future geminiAiExtraction(String prompt, payload) async { + var requestBody = jsonEncode({ + 'contents': [ + { + 'parts': [ + // { + // 'inlineData': { + // 'mimeType': 'image/jpeg', + // 'data': imageData, + // }, + // }, + { + 'text': """ + $payload + + $prompt ,and make dates format like year-month-day""" + }, + ], + }, + ], + 'generationConfig': { + 'temperature': 0.4, + 'topK': 32, + 'topP': 1, + 'maxOutputTokens': 4096, + 'stopSequences': [], + }, + 'safety_settings': [ + {"category": "HARM_CATEGORY_HARASSMENT", "threshold": "BLOCK_NONE"}, + {"category": "HARM_CATEGORY_HATE_SPEECH", "threshold": "BLOCK_NONE"}, + { + "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT", + "threshold": "BLOCK_NONE" + }, + { + "category": "HARM_CATEGORY_DANGEROUS_CONTENT", + "threshold": "BLOCK_NONE" + }, + ] + }); + // print(requestBody); + + final response = await http.post( + Uri.parse( + // 'https://generativelanguage.googleapis.com/v1beta/models/gemini-pro-vision:generateContent?key=${AK.geminiApi}'), + 'https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-pro-latest:generateContent?key=AIzaSyCyoLcSkDzK5_SMe00nhut56SSXWPR074w'), + headers: {'Content-Type': 'application/json'}, + body: requestBody, + ); + + if (response.statusCode == 200) { + var responseData = jsonDecode(response.body); + // Process the responseData as needed + // print(responseData); + + var result = responseData['candidates'][0]['content']['parts'][0]['text']; + // print(jsonEncode(result)); + // print((result)); + // print(result['dob']); + RegExp regex = RegExp(r"```json([^`]*)```"); + String? jsonString = + regex.firstMatch(responseData.toString())?.group(1)?.trim(); + + if (jsonString != null) { + // Convert the JSON object to a String + jsonString = jsonEncode(json.decode(jsonString)); + // print(jsonString); + responseIdCardDriverEgypt1 = jsonString; + + // print(jsonDecode(responseIdCardDriverEgypt1!)); + responseIdCardDriverEgypt = jsonDecode(responseIdCardDriverEgypt1!); + print(responseIdCardDriverEgypt); + update(); + return responseIdCardDriverEgypt; + } else { + print("JSON string not found"); + } + + // Rest of your code... + } else { + print('Request failed with status: ${response.statusCode}'); + print('Request failed with status: ${response.body}'); + } + } +} diff --git a/lib/views/auth/captin/login_captin.dart b/lib/views/auth/captin/login_captin.dart index d9cf547..a26a043 100644 --- a/lib/views/auth/captin/login_captin.dart +++ b/lib/views/auth/captin/login_captin.dart @@ -333,6 +333,13 @@ class LoginCaptin extends StatelessWidget { textAlign: TextAlign.center, style: AppStyle.title, ), + Text( + 'You will choose allow all the time to be ready receive orders' + .tr, + textAlign: TextAlign.center, + style: AppStyle.title + .copyWith(color: AppColor.greenColor), + ), MyElevatedButton( title: 'Grant Location'.tr, onPressed: () async { diff --git a/lib/views/auth/captin/register_captin.dart b/lib/views/auth/captin/register_captin.dart index 11929b0..8aada66 100644 --- a/lib/views/auth/captin/register_captin.dart +++ b/lib/views/auth/captin/register_captin.dart @@ -1,3 +1,4 @@ +import 'package:SEFER/constant/style.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:SEFER/controller/auth/captin/register_captin_controller.dart'; @@ -153,13 +154,47 @@ class RegisterCaptin extends StatelessWidget { // ), // ), // ) + Image.asset( + 'assets/images/on1.png', + fit: BoxFit.cover, + height: double.maxFinite, + width: double.maxFinite, + ), Center( - child: MyElevatedButton( - title: 'Sign In by Google'.tr, - onPressed: () async { - await GoogleSignInHelper.signIn(); - }, - kolor: AppColor.blueColor, + child: Container( + decoration: AppStyle.boxDecoration1, + height: Get.height * .7, + width: Get.width * .9, + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: [ + Image.asset( + 'assets/images/logo.gif', + height: Get.width * .3, + width: Get.width * .3, + fit: BoxFit.fill, + ), + Container( + decoration: AppStyle.boxDecoration1, + height: Get.height * .3, + width: Get.width * .8, + child: Center( + child: Text( + 'Sign in with Google for easier email and name entry'.tr, + textAlign: TextAlign.center, + style: AppStyle.title, + ), + ), + ), + MyElevatedButton( + title: 'Sign In by Google'.tr, + onPressed: () async { + await GoogleSignInHelper.signIn(); + }, + kolor: AppColor.blueColor, + ), + ], + ), )) ], isleading: true);