6/27/1
This commit is contained in:
13
.env
13
.env
@@ -1,4 +1,6 @@
|
|||||||
basicAuthCredentials=wqnmqqsjyvwv:nqrYJP@1737XrXlBl
|
basicAuthCredentials=wqnmqqsjyvwv:nqrYJP@1737XrXlBl
|
||||||
|
basicCompareFaces=zjujluqfj:nqrYjp@1737XrXlBl
|
||||||
|
basicCompareFacesURL='https://face-detect-f6924392c4c7.herokuapp.com/compare_faces'
|
||||||
accountSIDTwillo=QFx0qy456juj3839xuy2194q629q1fj0y7XrXlBl
|
accountSIDTwillo=QFx0qy456juj3839xuy2194q629q1fj0y7XrXlBl
|
||||||
serverAPI=QQQQobSrrFi:QVQ87xU7zwCvmZzZdaxuS2f23Y4mz7MzyOzr8od2br6KYyeFaTVLG3K3hx5ZaUyx7eYvAYpAVdKk-286NTRi3zs9iSOnXtXRIxswg3KecBmsl3VxJ9wO-vIpwu4Pv7dkHkXniuxMSDgWXrXlBl
|
serverAPI=QQQQobSrrFi:QVQ87xU7zwCvmZzZdaxuS2f23Y4mz7MzyOzr8od2br6KYyeFaTVLG3K3hx5ZaUyx7eYvAYpAVdKk-286NTRi3zs9iSOnXtXRIxswg3KecBmsl3VxJ9wO-vIpwu4Pv7dkHkXniuxMSDgWXrXlBl
|
||||||
mapAPIKEY=QOmqZsFsutLDCtZCRIUAZAkB5v6AMkKEPMbJGa3XrXlBl
|
mapAPIKEY=QOmqZsFsutLDCtZCRIUAZAkB5v6AMkKEPMbJGa3XrXlBl
|
||||||
@@ -12,7 +14,7 @@ chatGPTkeySeferNew=zg-Z4AJcAROgNXjgrEIU8fKC9XrxgUE4Qtrrlq1yiux0jL3dITSXrXlBl
|
|||||||
secretKey=zg_ropj_57Iiv6MFCBFq3C2n6IXlmjykpxDmW93SW3vvXh68UA9T5FORTWgWsT37StKsOPdwDdsy8qR9srMUluahs3nPHvgBa33tGk90vV5XrXlBl
|
secretKey=zg_ropj_57Iiv6MFCBFq3C2n6IXlmjykpxDmW93SW3vvXh68UA9T5FORTWgWsT37StKsOPdwDdsy8qR9srMUluahs3nPHvgBa33tGk90vV5XrXlBl
|
||||||
stripe_publishableKe=vg_ropj_57Iiv6MFCBFq3C2n6kNJnZByV6nuDtXe9IjEPOfhmpDtWmt3MLR0gQpiHcQmAFMUPrZc3QiCDjxBZLbxDC3efxWxz33bWH1ZgrsXrXlBl
|
stripe_publishableKe=vg_ropj_57Iiv6MFCBFq3C2n6kNJnZByV6nuDtXe9IjEPOfhmpDtWmt3MLR0gQpiHcQmAFMUPrZc3QiCDjxBZLbxDC3efxWxz33bWH1ZgrsXrXlBl
|
||||||
llamaKey=RR-EuyoFDUvfRDBj46fZKAtKJ3voM8Mt768cPeJV7GNdAkPTKdY8Odm9n4ggGqI5GyoXrXlBl
|
llamaKey=RR-EuyoFDUvfRDBj46fZKAtKJ3voM8Mt768cPeJV7GNdAkPTKdY8Odm9n4ggGqI5GyoXrXlBl
|
||||||
serverPHP=https://api.sefer.live/sefer/
|
serverPHP=https://api.sefer.live/sefer
|
||||||
cohere=Aulwd8y5SPWos0hJhG0toUf8gOhUUrpf5Q2TPmVGXrXlBl
|
cohere=Aulwd8y5SPWos0hJhG0toUf8gOhUUrpf5Q2TPmVGXrXlBl
|
||||||
claudeAiAPI=zg-qbc-qvo39-xWOxIGwWTOzCFBnIYSKKhfyz_KVAvrH-6_4ZEJL68G_QBH26oeTOMMoQug9KuOjjKSP_A4S3SUDlbxR9duVzoQ-MkX_UQQQXrXlBl
|
claudeAiAPI=zg-qbc-qvo39-xWOxIGwWTOzCFBnIYSKKhfyz_KVAvrH-6_4ZEJL68G_QBH26oeTOMMoQug9KuOjjKSP_A4S3SUDlbxR9duVzoQ-MkX_UQQQXrXlBl
|
||||||
payPalClientId=QALymfNI5Tzt4s-ysoz6vD4_nqX0SUtkC_qYV-Ugk5gaM_8Z-kg4L53k8Uux_4jEWXDkNpXGSWPpIzDFXrXlBl
|
payPalClientId=QALymfNI5Tzt4s-ysoz6vD4_nqX0SUtkC_qYV-Ugk5gaM_8Z-kg4L53k8Uux_4jEWXDkNpXGSWPpIzDFXrXlBl
|
||||||
@@ -25,10 +27,15 @@ agoraAppId=71880f2j636509j24y5294480y30u848XrXlBl
|
|||||||
agoraAppCertificate=j17q944u49390q758u1649448q2y6xfuXrXlBl
|
agoraAppCertificate=j17q944u49390q758u1649448q2y6xfuXrXlBl
|
||||||
usernamePayMob=37319104052XrXlBl
|
usernamePayMob=37319104052XrXlBl
|
||||||
passwordPayMob='g@nkD2#99!hD_.wXrXlBl'
|
passwordPayMob='g@nkD2#99!hD_.wXrXlBl'
|
||||||
integrationIdPayMob=0552355XrXlBl
|
integrationIdPayMob=0237730XrXlBl
|
||||||
payMobApikey='MDrGqKEWS1rVqHvEPDvPjJ7vZDBExrO7S3BEBgrlfUwTA3i5RnP5ZnvoL3M2S9rEBgrlNTdexH5pTPf7NJrvy1reZJv1Tn7zf7vTIDywjHg1C7Ley38HTDyNA3v7TPfdxJrax1rwPmPtMJyzqKEYZeghq3MuLUrFH3A1AgHcH15CZ9UaZTLOxnw0BTdzHHrBArisZerUMUUzZ1BnBeEijHvNjYLnS1BUICMhSmPhA15ifHyVqKEMHWyKLbyuIPvcH9UeL3vZyDf=XrXlBl'
|
payMobApikey='MDrGqKEWS1rVqHvEPDvPjJ7vZDBExrO7S3BEBgrlfUwTA3i5RnP5ZnvoL3M2S9rEBgrlNTdexH5pTPf7NJrvy1reZJv1Tn7zf7vTIDywjHg1C7Ley38HTDyNA3v7TPfdxJrax1rwPmPtMJyzqKEYZeghq3MuLUrFH3A1AgHcH15CZ9UaZTLOxnw0BTdzHHrBArisZerUMUUzZ1BnBeEijHvNjYLnS1BUICMhSmPhA15ifHyVqKEMHWyKLbyuIPvcH9UeL3vZyDf=XrXlBl'
|
||||||
integrationIdPayMobWallet=0552352XrXlBl
|
integrationIdPayMobWallet=0237739XrXlBl
|
||||||
ocpApimSubscriptionKey=17373j50x53u07q0830634f512j731yuXrXlBl
|
ocpApimSubscriptionKey=17373j50x53u07q0830634f512j731yuXrXlBl
|
||||||
smsPasswordEgypt="J)Vh=qb/@MXrXlBl"
|
smsPasswordEgypt="J)Vh=qb/@MXrXlBl"
|
||||||
chatGPTkeySeferNew4=zg-vlie-2l1ZlpxiLJ6wQOvbb4TnC9XrxgUEyVQIu6TID4qP4FUUqoS5XrXlBl
|
chatGPTkeySeferNew4=zg-vlie-2l1ZlpxiLJ6wQOvbb4TnC9XrxgUEyVQIu6TID4qP4FUUqoS5XrXlBl
|
||||||
anthropicAIkeySeferNew=zg-qbc-qvo39-n4VdMQ5nuJeIYhMN4PDYr7qox3-t2i1Lh7aNTDfYF-Gf8whUJZCs47EeelKn8_UcmUMmiSLaf0UJg0DvUlQrDt-76CRrkQQXrXlBl
|
anthropicAIkeySeferNew=zg-qbc-qvo39-n4VdMQ5nuJeIYhMN4PDYr7qox3-t2i1Lh7aNTDfYF-Gf8whUJZCs47EeelKn8_UcmUMmiSLaf0UJg0DvUlQrDt-76CRrkQQXrXlBl
|
||||||
|
llama3Key=kzg_uTXy3e9DBbCQ1FnMGxYwTKysx9US1burxJj4fFwOje4LZBUFKJS1XrXlBl
|
||||||
|
payMobOutClientSecrret='wcP2bUQBRYy254hjCJhNlOatefDzifNDnXRQSiu6UhhcXfZdyCyiBaUr9JQpI2mlIkKVRyoNliuBv1P8QZPLveiZrUeYBLmS6wuVhbQEJku1B5MHhgbB0AboqaOMpqBcXrXlBl'
|
||||||
|
payMobOutClient_id='gnBTH5kGzR4RGPwzEUxIKCJx9SA5zAwpXiX4vaiTXrXlBl'
|
||||||
|
payMobOutPassword='#f9vZtxHdIGvAbl5wWMQkvgZTXrXlBl'
|
||||||
|
payMobOutUserName='zjujl_qvo_fwjfgjlXrXlBl'
|
||||||
|
|||||||
@@ -55,8 +55,8 @@ android {
|
|||||||
// For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration.
|
// For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration.
|
||||||
minSdkVersion 23
|
minSdkVersion 23
|
||||||
targetSdkVersion flutter.targetSdkVersion
|
targetSdkVersion flutter.targetSdkVersion
|
||||||
versionCode 37
|
versionCode 40
|
||||||
versionName '1.5.37'
|
versionName '1.5.40'
|
||||||
// manifestPlaceholders = [mapsApiKey: 'android/app/src/main/AndroidManifest.xml']
|
// manifestPlaceholders = [mapsApiKey: 'android/app/src/main/AndroidManifest.xml']
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
org.gradle.jvmargs=-Xmx1536M
|
org.gradle.jvmargs=-Xmx4096M
|
||||||
android.useAndroidX=true
|
android.useAndroidX=true
|
||||||
android.enableJetifier=true
|
android.enableJetifier=true
|
||||||
|
|||||||
@@ -41,7 +41,7 @@
|
|||||||
<key>CFBundleSignature</key>
|
<key>CFBundleSignature</key>
|
||||||
<string>????</string>
|
<string>????</string>
|
||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
<string>36</string>
|
<string>4.3.6</string>
|
||||||
<key>FirebaseAppDelegateProxyEnabled</key>
|
<key>FirebaseAppDelegateProxyEnabled</key>
|
||||||
<string>NO</string>
|
<string>NO</string>
|
||||||
<key>GMSApiKey</key>
|
<key>GMSApiKey</key>
|
||||||
|
|||||||
@@ -4,5 +4,9 @@
|
|||||||
<dict>
|
<dict>
|
||||||
<key>aps-environment</key>
|
<key>aps-environment</key>
|
||||||
<string>development</string>
|
<string>development</string>
|
||||||
|
<key>com.apple.developer.applesignin</key>
|
||||||
|
<array>
|
||||||
|
<string>Default</string>
|
||||||
|
</array>
|
||||||
</dict>
|
</dict>
|
||||||
</plist>
|
</plist>
|
||||||
|
|||||||
@@ -10,28 +10,29 @@ class AppStyle {
|
|||||||
fontSize: 40,
|
fontSize: 40,
|
||||||
color: AppColor.accentColor,
|
color: AppColor.accentColor,
|
||||||
fontFamily: box.read(BoxName.lang) == 'ar'
|
fontFamily: box.read(BoxName.lang) == 'ar'
|
||||||
? 'mohanad'
|
// ?GoogleFonts.notoNaskhArabic().fontFamily
|
||||||
|
? GoogleFonts.notoNaskhArabic().fontFamily
|
||||||
: GoogleFonts.roboto().fontFamily);
|
: GoogleFonts.roboto().fontFamily);
|
||||||
static TextStyle headTitle2 = TextStyle(
|
static TextStyle headTitle2 = TextStyle(
|
||||||
fontWeight: FontWeight.bold,
|
fontWeight: FontWeight.bold,
|
||||||
fontSize: 26,
|
fontSize: 26,
|
||||||
color: AppColor.writeColor,
|
color: AppColor.writeColor,
|
||||||
fontFamily: box.read(BoxName.lang) == 'ar'
|
fontFamily: box.read(BoxName.lang) == 'ar'
|
||||||
? 'mohanad'
|
? GoogleFonts.notoNaskhArabic().fontFamily
|
||||||
: GoogleFonts.roboto().fontFamily);
|
: GoogleFonts.roboto().fontFamily);
|
||||||
static TextStyle title = TextStyle(
|
static TextStyle title = TextStyle(
|
||||||
fontWeight: FontWeight.normal,
|
fontWeight: FontWeight.normal,
|
||||||
fontSize: box.read(BoxName.lang) == 'ar' ? 14 : 16,
|
fontSize: box.read(BoxName.lang) == 'ar' ? 14 : 16,
|
||||||
color: AppColor.writeColor,
|
color: AppColor.writeColor,
|
||||||
fontFamily: box.read(BoxName.lang) == 'ar'
|
fontFamily: box.read(BoxName.lang) == 'ar'
|
||||||
? 'mohanad'
|
? GoogleFonts.notoNaskhArabic().fontFamily
|
||||||
: GoogleFonts.roboto().fontFamily);
|
: GoogleFonts.roboto().fontFamily);
|
||||||
static TextStyle subtitle = TextStyle(
|
static TextStyle subtitle = TextStyle(
|
||||||
fontWeight: FontWeight.bold,
|
fontWeight: FontWeight.bold,
|
||||||
fontSize: 13,
|
fontSize: 13,
|
||||||
color: AppColor.writeColor,
|
color: AppColor.writeColor,
|
||||||
fontFamily: box.read(BoxName.lang) == 'ar'
|
fontFamily: box.read(BoxName.lang) == 'ar'
|
||||||
? 'mohanad'
|
? GoogleFonts.notoNaskhArabic().fontFamily
|
||||||
: GoogleFonts.roboto().fontFamily);
|
: GoogleFonts.roboto().fontFamily);
|
||||||
static TextStyle number = const TextStyle(
|
static TextStyle number = const TextStyle(
|
||||||
fontWeight: FontWeight.bold,
|
fontWeight: FontWeight.bold,
|
||||||
@@ -53,9 +54,13 @@ class AppStyle {
|
|||||||
static BoxDecoration boxDecoration1 = const BoxDecoration(
|
static BoxDecoration boxDecoration1 = const BoxDecoration(
|
||||||
boxShadow: [
|
boxShadow: [
|
||||||
BoxShadow(
|
BoxShadow(
|
||||||
color: AppColor.accentColor, blurRadius: 5, offset: Offset(2, 4)),
|
color: Color.fromARGB(255, 237, 230, 230),
|
||||||
|
blurRadius: 5,
|
||||||
|
offset: Offset(2, 4)),
|
||||||
BoxShadow(
|
BoxShadow(
|
||||||
color: AppColor.accentColor, blurRadius: 5, offset: Offset(-2, -2))
|
color: Color.fromARGB(255, 242, 237, 237),
|
||||||
|
blurRadius: 5,
|
||||||
|
offset: Offset(-2, -2))
|
||||||
],
|
],
|
||||||
color: AppColor.secondaryColor,
|
color: AppColor.secondaryColor,
|
||||||
borderRadius: BorderRadius.all(
|
borderRadius: BorderRadius.all(
|
||||||
|
|||||||
@@ -7,28 +7,40 @@ class AuthController extends GetxController {
|
|||||||
|
|
||||||
Future<User?> signInWithApple() async {
|
Future<User?> signInWithApple() async {
|
||||||
try {
|
try {
|
||||||
|
print('Starting Apple Sign In process');
|
||||||
|
|
||||||
final appleCredential = await SignInWithApple.getAppleIDCredential(
|
final appleCredential = await SignInWithApple.getAppleIDCredential(
|
||||||
scopes: [
|
scopes: [
|
||||||
AppleIDAuthorizationScopes.email,
|
AppleIDAuthorizationScopes.email,
|
||||||
AppleIDAuthorizationScopes.fullName,
|
AppleIDAuthorizationScopes.fullName,
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
|
print('Apple ID Credential obtained');
|
||||||
|
|
||||||
final oAuthProvider = OAuthProvider('apple.com');
|
final oAuthProvider = OAuthProvider('apple.com');
|
||||||
final credential = oAuthProvider.credential(
|
final credential = oAuthProvider.credential(
|
||||||
idToken: appleCredential.identityToken,
|
idToken: appleCredential.identityToken,
|
||||||
accessToken: appleCredential.authorizationCode,
|
accessToken: appleCredential.authorizationCode,
|
||||||
);
|
);
|
||||||
|
print('OAuth credential created');
|
||||||
|
|
||||||
UserCredential userCredential =
|
UserCredential userCredential =
|
||||||
await _auth.signInWithCredential(credential);
|
await _auth.signInWithCredential(credential);
|
||||||
|
print('User signed in successfully: ${userCredential.user?.uid}');
|
||||||
|
|
||||||
return userCredential.user;
|
return userCredential.user;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
print('Error during Apple Sign In: $error');
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void signOut() async {
|
Future<void> signOut() async {
|
||||||
await _auth.signOut();
|
try {
|
||||||
|
await _auth.signOut();
|
||||||
|
print('User signed out successfully');
|
||||||
|
} catch (error) {
|
||||||
|
print('Error during sign out: $error');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ import 'dart:math';
|
|||||||
import 'package:SEFER/controller/firebase/firbase_messge.dart';
|
import 'package:SEFER/controller/firebase/firbase_messge.dart';
|
||||||
import 'package:SEFER/views/auth/sms_verfy_page.dart';
|
import 'package:SEFER/views/auth/sms_verfy_page.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
|
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:SEFER/constant/box_name.dart';
|
import 'package:SEFER/constant/box_name.dart';
|
||||||
import 'package:SEFER/constant/links.dart';
|
import 'package:SEFER/constant/links.dart';
|
||||||
@@ -25,7 +24,6 @@ class LoginController extends GetxController {
|
|||||||
TextEditingController adminNameController = TextEditingController();
|
TextEditingController adminNameController = TextEditingController();
|
||||||
bool isAgreeTerms = false;
|
bool isAgreeTerms = false;
|
||||||
bool isloading = false;
|
bool isloading = false;
|
||||||
final FlutterSecureStorage _storage = const FlutterSecureStorage();
|
|
||||||
|
|
||||||
void changeAgreeTerm() {
|
void changeAgreeTerm() {
|
||||||
isAgreeTerms = !isAgreeTerms;
|
isAgreeTerms = !isAgreeTerms;
|
||||||
@@ -74,8 +72,8 @@ class LoginController extends GetxController {
|
|||||||
box.read(BoxName.tokenFCM)) {
|
box.read(BoxName.tokenFCM)) {
|
||||||
Get.put(FirebaseMessagesController())
|
Get.put(FirebaseMessagesController())
|
||||||
.sendNotificationToAnyWithoutData(
|
.sendNotificationToAnyWithoutData(
|
||||||
'token change',
|
'token change'.tr,
|
||||||
'change device',
|
'change device'.tr,
|
||||||
jsonDecode(token)['data'][0]['token'].toString(),
|
jsonDecode(token)['data'][0]['token'].toString(),
|
||||||
);
|
);
|
||||||
Future.delayed(const Duration(seconds: 1));
|
Future.delayed(const Duration(seconds: 1));
|
||||||
@@ -83,10 +81,20 @@ class LoginController extends GetxController {
|
|||||||
'token': box.read(BoxName.tokenFCM),
|
'token': box.read(BoxName.tokenFCM),
|
||||||
'passengerID': box.read(BoxName.passengerID).toString()
|
'passengerID': box.read(BoxName.passengerID).toString()
|
||||||
});
|
});
|
||||||
Get.offAll(() => const MapPagePassenger());
|
Get.defaultDialog(
|
||||||
|
title: 'Device Change Detected'.tr,
|
||||||
|
middleText:
|
||||||
|
'You can only use one device at a time. This device will now be set as your active device.'
|
||||||
|
.tr,
|
||||||
|
textConfirm: 'OK'.tr,
|
||||||
|
confirmTextColor: Colors.white,
|
||||||
|
onConfirm: () {
|
||||||
|
Get.back();
|
||||||
|
Get.offAll(() => const MapPagePassenger());
|
||||||
|
},
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Get.offAll(() => const MapPagePassenger());
|
Get.offAll(() => const MapPagePassenger());
|
||||||
} else {
|
} else {
|
||||||
Get.offAll(() => SmsSignupEgypt());
|
Get.offAll(() => SmsSignupEgypt());
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import 'dart:async';
|
||||||
import 'dart:convert';
|
import 'dart:convert';
|
||||||
import 'dart:math';
|
import 'dart:math';
|
||||||
|
|
||||||
@@ -27,10 +28,10 @@ class RegisterController extends GetxController {
|
|||||||
TextEditingController siteController = TextEditingController();
|
TextEditingController siteController = TextEditingController();
|
||||||
TextEditingController verfyCode = TextEditingController();
|
TextEditingController verfyCode = TextEditingController();
|
||||||
TextEditingController verifyCode = TextEditingController();
|
TextEditingController verifyCode = TextEditingController();
|
||||||
|
int remainingTime = 300; // 5 minutes in seconds
|
||||||
bool isSent = false;
|
bool isSent = false;
|
||||||
bool isLoading = false;
|
bool isLoading = false;
|
||||||
|
Timer? _timer;
|
||||||
String birthDate = 'Birth Date'.tr;
|
String birthDate = 'Birth Date'.tr;
|
||||||
String gender = 'Male'.tr;
|
String gender = 'Male'.tr;
|
||||||
@override
|
@override
|
||||||
@@ -38,6 +39,17 @@ class RegisterController extends GetxController {
|
|||||||
super.onInit();
|
super.onInit();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void startTimer() {
|
||||||
|
_timer?.cancel(); // Cancel any existing timer
|
||||||
|
_timer = Timer.periodic(const Duration(seconds: 1), (timer) {
|
||||||
|
if (remainingTime > 0) {
|
||||||
|
remainingTime--;
|
||||||
|
} else {
|
||||||
|
timer.cancel();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
getBirthDate() {
|
getBirthDate() {
|
||||||
Get.defaultDialog(
|
Get.defaultDialog(
|
||||||
title: 'Select Date'.tr,
|
title: 'Select Date'.tr,
|
||||||
@@ -84,6 +96,8 @@ class RegisterController extends GetxController {
|
|||||||
await smsEgyptController.sendSmsEgypt(
|
await smsEgyptController.sendSmsEgypt(
|
||||||
phoneController.text.toString(), randomNumber.toString());
|
phoneController.text.toString(), randomNumber.toString());
|
||||||
isSent = true;
|
isSent = true;
|
||||||
|
remainingTime = 300; // Reset to 5 minutes
|
||||||
|
startTimer();
|
||||||
isLoading = false;
|
isLoading = false;
|
||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
@@ -159,4 +173,10 @@ class RegisterController extends GetxController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void onClose() {
|
||||||
|
_timer?.cancel();
|
||||||
|
super.onClose();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
15
lib/controller/home/home_page_controller.dart
Normal file
15
lib/controller/home/home_page_controller.dart
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
import 'package:get/get.dart';
|
||||||
|
|
||||||
|
import '../../constant/box_name.dart';
|
||||||
|
import '../../main.dart';
|
||||||
|
|
||||||
|
class HomePageController extends GetxController {
|
||||||
|
late bool isVibrate = true;
|
||||||
|
|
||||||
|
void changeVibrateOption(bool value) {
|
||||||
|
isVibrate = box.read(BoxName.isvibrate) ?? true;
|
||||||
|
isVibrate = value;
|
||||||
|
box.write(BoxName.isvibrate, value);
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -110,6 +110,7 @@ class MapPassengerController extends GetxController {
|
|||||||
bool isDriverInPassengerWay = false;
|
bool isDriverInPassengerWay = false;
|
||||||
bool isDriverArrivePassenger = false;
|
bool isDriverArrivePassenger = false;
|
||||||
bool startLocationFromMap = false;
|
bool startLocationFromMap = false;
|
||||||
|
bool isAnotherOreder = false;
|
||||||
bool passengerStartLocationFromMap = false;
|
bool passengerStartLocationFromMap = false;
|
||||||
bool workLocationFromMap = false;
|
bool workLocationFromMap = false;
|
||||||
bool homeLocationFromMap = false;
|
bool homeLocationFromMap = false;
|
||||||
@@ -466,6 +467,11 @@ class MapPassengerController extends GetxController {
|
|||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void changeisAnotherOreder(bool val) {
|
||||||
|
isAnotherOreder = val;
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
|
||||||
void sendSMS(String to) async {
|
void sendSMS(String to) async {
|
||||||
// Get the driver's phone number.
|
// Get the driver's phone number.
|
||||||
String driverPhone =
|
String driverPhone =
|
||||||
@@ -502,7 +508,7 @@ class MapPassengerController extends GetxController {
|
|||||||
void getDrawerMenu() {
|
void getDrawerMenu() {
|
||||||
heightMenuBool = !heightMenuBool;
|
heightMenuBool = !heightMenuBool;
|
||||||
widthMapTypeAndTraffic = heightMenuBool == true ? 0 : 50;
|
widthMapTypeAndTraffic = heightMenuBool == true ? 0 : 50;
|
||||||
heightMenu = heightMenuBool == true ? 100 : 0;
|
heightMenu = heightMenuBool == true ? 70 : 0;
|
||||||
widthMenu = heightMenuBool == true ? 110 : 0;
|
widthMenu = heightMenuBool == true ? 110 : 0;
|
||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,25 @@ class MyTranslation extends Translations {
|
|||||||
@override
|
@override
|
||||||
Map<String, Map<String, String>> get keys => {
|
Map<String, Map<String, String>> get keys => {
|
||||||
"ar": {
|
"ar": {
|
||||||
|
"Pick from map destination": "حدد وجهتك على الخريطة",
|
||||||
|
"Pick or Tap to confirm": "حدد أو انقر للتأكيد",
|
||||||
|
"Select Order Type": "حدد نوع الطلب",
|
||||||
|
"Choose who this order is for": "اختر لمن هذا الطلب",
|
||||||
|
"I want to order for myself": "أريد أن أطلب لنفسي",
|
||||||
|
"I want to order for someone else": "أريد أن أطلب لشخص آخر",
|
||||||
|
|
||||||
|
"If you want order to another person": "إذا كنت تريد الطلب لشخص آخر",
|
||||||
|
"Wehaven'tfoundanydriversyet.Considerincreasingyourtripfeetomakeyouroffermoreattractivetodrivers.":
|
||||||
|
"لم نجد أي سائقين بعد. ضع في اعتبارك زيادة رسوم رحلتك لجعل عرضك أكثر جاذبية للسائقين.",
|
||||||
|
"IncreaseYourTripFee(Optional)": "زيادة رسوم رحلتك (اختياري)",
|
||||||
|
'Vibration': "اهتزاز",
|
||||||
|
'Resend code': "إعادة إرسال الرمز",
|
||||||
|
"Sign in with Apple": "تسجيل الدخول باستخدام Apple",
|
||||||
|
"token change": "تغيير الرمز",
|
||||||
|
"change device": "تغيير الجهاز",
|
||||||
|
"Device Change Detected": "تم اكتشاف تغيير الجهاز",
|
||||||
|
"You can only use one device at a time. This device will now be set as your active device.":
|
||||||
|
"يمكنك استخدام جهاز واحد في المرة الواحدة. سيتم الآن تعيين هذا الجهاز كجهازك النشط.",
|
||||||
"Click here point": "انقر هنا", // Click here (literal translation)
|
"Click here point": "انقر هنا", // Click here (literal translation)
|
||||||
"Pick or Tap to confirm":
|
"Pick or Tap to confirm":
|
||||||
"اختر أو اضغط للتأكيد", // Choose or Tap to confirm
|
"اختر أو اضغط للتأكيد", // Choose or Tap to confirm
|
||||||
@@ -196,42 +215,39 @@ iOS [https://getapp.cc/app/6458734951]
|
|||||||
'Get to your destination quickly and easily.':
|
'Get to your destination quickly and easily.':
|
||||||
'وصول إلى وجهتك بسرعة وسهولة.',
|
'وصول إلى وجهتك بسرعة وسهولة.',
|
||||||
'Enjoy a safe and comfortable ride.': 'استمتع برحلة آمنة ومريحة.',
|
'Enjoy a safe and comfortable ride.': 'استمتع برحلة آمنة ومريحة.',
|
||||||
"Choose Language": "اخْتَر اللُّغَة",
|
"Choose Language": "اختر اللغة",
|
||||||
"Login": "تَسْجِيل الدُّخُول",
|
"Login": "تسجيل الدخول",
|
||||||
"Pay with Wallet": 'ادْفَع بِاسْتِخْدَام المَحْفَظَة',
|
"Pay with Wallet": "ادفع باستخدام المحفظة",
|
||||||
"Invalid MPIN": 'رَمْز PIN غَيْر صَحِيح',
|
"Invalid MPIN": "رمز PIN غير صحيح",
|
||||||
"Invalid OTP": 'كود التَّحَقُّق خَاطِئ',
|
"Invalid OTP": "كود التحقق خاطئ",
|
||||||
"Enter your email address":
|
"Enter your email address": "أدخل عنوان بريدك الإلكتروني",
|
||||||
"أدْخِل عُنْوَان بَرِيدِكَ الإلِكْتْرُونِي",
|
"Please enter Your Email.": "يرجى إدخال بريدك الإلكتروني.",
|
||||||
"Please enter Your Email.":
|
"Enter your phone number": "أدخل رقم هاتفك",
|
||||||
"يَرْجَى إِدْخَال بَرِيدِكَ الإلِكْتْرُونِي.",
|
"Please enter your phone number.": "يرجى إدخال رقم هاتفك.",
|
||||||
"Enter your phone number": "أدْخِل رَقْم هَاتِفِكَ",
|
"Please enter Your Password.": "يرجى إدخال كلمة المرور.",
|
||||||
"Please enter your phone number.":
|
"Submit": "إرسال",
|
||||||
"يَرْجَى إِدْخَال رَقْم هَاتِفِكَ.",
|
"if you dont have account": "إذا لم يكن لديك حساب",
|
||||||
"Please enter Your Password.": "يَرْجَى إِدْخَال كَلِمَة المُرُور.",
|
"Register": "تسجيل",
|
||||||
"Submit": "إرْسَال",
|
|
||||||
"if you dont have account": "إِذَا لَمْ يَكُن لَدَيْكَ حِسَاب",
|
|
||||||
"Register": "تَسْجِيل",
|
|
||||||
"Accept Ride's Terms & Review Privacy Notice":
|
"Accept Ride's Terms & Review Privacy Notice":
|
||||||
"قَبُول شُرُوط الاسْتِخْدَام وَمُرَاجَعَة إِشْعَار الخُصُوصِيَّة",
|
"قبول شروط الاستخدام ومراجعة إشعار الخصوصية",
|
||||||
"By selecting 'I Agree' below, I have reviewed and agree to the Terms of Use and acknowledge the Privacy Notice. I am at least 18 years of age.":
|
"By selecting 'I Agree' below, I have reviewed and agree to the Terms of Use and acknowledge the Privacy Notice. I am at least 18 years of age.":
|
||||||
"مِنْ خِلَال اخْتِيَار 'أُوَافِق' أَدْنَاهُ، قُمْتُ بِمُرَاجَعَة وَقَبُول شُرُوط الاسْتِخْدَام وَأُقِرُّ بِإِشْعَار الخُصُوصِيَّة. أَنَا عَلَى الأَقَل 18 عَامًا.",
|
"من خلال اختيار 'أوافق' أدناه، قمت بمراجعة وقبول شروط الاستخدام وأقر بإشعار الخصوصية. أنا على الأقل 18 عامًا.",
|
||||||
"I Agree": "أُوَافِق",
|
"I Agree": "أوافق",
|
||||||
"First name": "الاسْم الأَوَّل",
|
"First name": "الاسم الأول",
|
||||||
"Enter your first name": "أدْخِل اسْمَكَ الأَوَّل",
|
"Enter your first name": "أدخل اسمك الأول",
|
||||||
"Please enter your first name.": "يَرْجَى إِدْخَال اسْمِكَ الأَوَّل.",
|
"Please enter your first name.": "يرجى إدخال اسمك الأول.",
|
||||||
"Last name": "اسْم العَائِلَة",
|
"Last name": "اسم العائلة",
|
||||||
"Enter your last name": "أدْخِل اسْمَكَ الأَخِير",
|
"Enter your last name": "أدخل اسمك الأخير",
|
||||||
"Please enter your last name.": "يَرْجَى إِدْخَال اسْمِكَ الأَخِير.",
|
"Please enter your last name.": "يرجى إدخال اسمك الأخير.",
|
||||||
"City": "المَدِينَة",
|
"City": "المدينة",
|
||||||
"Please enter your City.": "يَرْجَى إِدْخَال اسْم مَدِينَتِكَ.",
|
"Please enter your City.": "يرجى إدخال اسم مدينتك.",
|
||||||
"Male": "ذَكَر",
|
"Male": "ذكر",
|
||||||
"Female": "أُنْثَى",
|
"Female": "أنثى",
|
||||||
"Verify Email": "تَحَقَّق مِنْ البَرِيد الإلِكْتْرُونِي",
|
"Verify Email": "تحقق من البريد الإلكتروني",
|
||||||
"We sent 5 digit to your Email provided":
|
"We sent 5 digit to your Email provided":
|
||||||
"لَقَدْ أَرْسَلْنَا رَمْزًا مُؤَلَّفًا مِنْ 5 أَرْقَام إِلَى بَرِيدِكَ الإلِكْتْرُونِي المُدْخَل",
|
"لقد أرسلنا رمزًا مؤلفًا من 5 أرقام إلى بريدك الإلكتروني المدخل",
|
||||||
"5 digit": "5 أَرْقَام",
|
"5 digit": "5 أرقام",
|
||||||
"Send Verification Code": "إرْسَال رَمْز التَّحَقُّق",
|
"Send Verification Code": "إرسال رمز التحقق",
|
||||||
"Your Ride Duration is ": "مُدَّة رِحْلَتِكَ ",
|
"Your Ride Duration is ": "مُدَّة رِحْلَتِكَ ",
|
||||||
"You will be thier in": "سَتَكُون هُنَاكَ فِي",
|
"You will be thier in": "سَتَكُون هُنَاكَ فِي",
|
||||||
"You trip distance is": "مَسَافَة الرِّحْلَة",
|
"You trip distance is": "مَسَافَة الرِّحْلَة",
|
||||||
@@ -664,12 +680,12 @@ iOS [https://getapp.cc/app/6458734951]
|
|||||||
"Yes": 'نَعَمْ',
|
"Yes": 'نَعَمْ',
|
||||||
"Insert Emergincy Number": "أَدْخِلِ رَقْمَ الطَّوَارِئِ",
|
"Insert Emergincy Number": "أَدْخِلِ رَقْمَ الطَّوَارِئِ",
|
||||||
"Best choice for comfort car and flexible route and stops point":
|
"Best choice for comfort car and flexible route and stops point":
|
||||||
'أَفْضَلُ خِيَارٍ لِسَيَّارَةِ رَاحَةٍ وَمَسَارٍ مُرِنٍ وَنِقَاطِ تَوَقُّفٍ',
|
"رحلة مكيفة ومسار متغير لرغبة العميل ونقاط توقف",
|
||||||
"Insert": "إِدْرَاجُ",
|
"Insert": "إِدْرَاجُ",
|
||||||
"This is for delivery or a motorcycle.":
|
"This is for delivery or a motorcycle.":
|
||||||
"هَذَا لِلتَّسْلِيمِ أَوِ الدَّرَّاجَةِ النَّارِيَّةِ",
|
"هَذَا لِلتَّسْلِيمِ أَوِ الدَّرَّاجَةِ النَّارِيَّةِ",
|
||||||
"This trip goes directly from your starting point to your destination for a fixed price. The driver must follow the planned route":
|
"This trip goes directly from your starting point to your destination for a fixed price. The driver must follow the planned route":
|
||||||
'الرِّحْلَةُ دِي مِنْ نُقْطَةِ الْبِدَايَةِ لِنُقْطَةِ النِّهَايَةِ بِسِعْرٍ ثَابِتٍ وَالسَّوَّاقُ لَازِمٌ يَمْشِي بِنَفْسِ الطَّرِيقِ.',
|
'رحلة محددة السعر والشريك السائق ملتزم بالمسار المحدد من خلال التطبيق',
|
||||||
"You can decline a request without any cost":
|
"You can decline a request without any cost":
|
||||||
"يمكنك إلغاء الطلب بدون أي تكلفة",
|
"يمكنك إلغاء الطلب بدون أي تكلفة",
|
||||||
"Perfect for adventure seekers who want to experience something new and exciting":
|
"Perfect for adventure seekers who want to experience something new and exciting":
|
||||||
|
|||||||
@@ -1,8 +1,5 @@
|
|||||||
import 'dart:convert';
|
|
||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
|
|
||||||
import 'package:SEFER/views/auth/sms_verfy_page.dart';
|
|
||||||
import 'package:animated_text_kit/animated_text_kit.dart';
|
|
||||||
import 'package:firebase_auth/firebase_auth.dart';
|
import 'package:firebase_auth/firebase_auth.dart';
|
||||||
import 'package:flutter/gestures.dart';
|
import 'package:flutter/gestures.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
@@ -16,16 +13,10 @@ import 'package:SEFER/views/widgets/elevated_btn.dart';
|
|||||||
import 'package:SEFER/views/widgets/my_scafold.dart';
|
import 'package:SEFER/views/widgets/my_scafold.dart';
|
||||||
|
|
||||||
import '../../constant/info.dart';
|
import '../../constant/info.dart';
|
||||||
import '../../constant/links.dart';
|
|
||||||
import '../../controller/auth/apple_signin_controller.dart';
|
import '../../controller/auth/apple_signin_controller.dart';
|
||||||
import '../../controller/auth/google_sign.dart';
|
import '../../controller/auth/google_sign.dart';
|
||||||
import '../../controller/auth/login_controller.dart';
|
import '../../controller/auth/login_controller.dart';
|
||||||
import '../../controller/firebase/firbase_messge.dart';
|
|
||||||
import '../../controller/functions/crud.dart';
|
|
||||||
import '../../controller/functions/toast.dart';
|
|
||||||
import '../home/profile/passenger_profile_page.dart';
|
import '../home/profile/passenger_profile_page.dart';
|
||||||
import '../widgets/mycircular.dart';
|
|
||||||
import 'register_page.dart';
|
|
||||||
|
|
||||||
class LoginPage extends StatelessWidget {
|
class LoginPage extends StatelessWidget {
|
||||||
final controller = Get.put(LoginController());
|
final controller = Get.put(LoginController());
|
||||||
@@ -88,53 +79,45 @@ class LoginPage extends StatelessWidget {
|
|||||||
kolor: AppColor.blueColor,
|
kolor: AppColor.blueColor,
|
||||||
),
|
),
|
||||||
!Platform.isAndroid
|
!Platform.isAndroid
|
||||||
? Row(
|
? GestureDetector(
|
||||||
mainAxisAlignment: MainAxisAlignment.center,
|
onTap: () async {
|
||||||
children: [
|
User? user =
|
||||||
const Icon(
|
await authController.signInWithApple();
|
||||||
Icons.apple,
|
if (user != null) {
|
||||||
size: 30,
|
box.write(BoxName.passengerID, user.uid);
|
||||||
|
box.write(BoxName.email, user.email);
|
||||||
|
await GoogleSignInHelper
|
||||||
|
.signInFromLogin();
|
||||||
|
// Navigate to another screen or perform other actions
|
||||||
|
} else {}
|
||||||
|
},
|
||||||
|
child: Container(
|
||||||
|
padding: const EdgeInsets.symmetric(
|
||||||
|
horizontal: 16, vertical: 10),
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: Colors.black,
|
||||||
|
borderRadius: BorderRadius.circular(8),
|
||||||
),
|
),
|
||||||
const SizedBox(
|
child: Row(
|
||||||
width: 8), // Adjust spacing as needed
|
mainAxisSize: MainAxisSize.min,
|
||||||
MyElevatedButton(
|
children: [
|
||||||
title: 'Sign in with Apple'.tr,
|
const Icon(
|
||||||
onPressed: () async {
|
Icons.apple,
|
||||||
try {
|
color: Colors.white,
|
||||||
User? user = await authController
|
size: 24,
|
||||||
.signInWithApple();
|
),
|
||||||
if (user != null) {
|
const SizedBox(width: 8),
|
||||||
box.write(
|
Text(
|
||||||
BoxName.driverID, user.uid);
|
'Sign in with Apple'.tr,
|
||||||
box.write(BoxName.emailDriver,
|
style: const TextStyle(
|
||||||
user.email);
|
color: Colors.white,
|
||||||
|
fontSize: 16,
|
||||||
// Provide user feedback
|
fontWeight: FontWeight.w500,
|
||||||
await GoogleSignInHelper
|
),
|
||||||
.signInFromLogin();
|
),
|
||||||
Navigator.of(context)
|
],
|
||||||
.pushReplacementNamed('/home');
|
|
||||||
Toast.show(
|
|
||||||
context,
|
|
||||||
'Signed in successfully',
|
|
||||||
AppColor.greenColor);
|
|
||||||
} else {
|
|
||||||
Toast.show(
|
|
||||||
context,
|
|
||||||
'Sign in failed. Please try again.',
|
|
||||||
AppColor.yellowColor);
|
|
||||||
}
|
|
||||||
} catch (error) {
|
|
||||||
print('Sign in error: $error');
|
|
||||||
Toast.show(
|
|
||||||
context,
|
|
||||||
'An error occurred. Please check your connection and try again.',
|
|
||||||
AppColor.redColor);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
kolor: Colors.black,
|
|
||||||
),
|
),
|
||||||
],
|
),
|
||||||
)
|
)
|
||||||
: const SizedBox(),
|
: const SizedBox(),
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -73,6 +73,40 @@ class SmsSignupEgypt extends StatelessWidget {
|
|||||||
const SizedBox(
|
const SizedBox(
|
||||||
height: 10,
|
height: 10,
|
||||||
),
|
),
|
||||||
|
if (registerController.isSent)
|
||||||
|
Obx(() => Column(
|
||||||
|
children: [
|
||||||
|
Padding(
|
||||||
|
padding: const EdgeInsets.symmetric(horizontal: 16.0),
|
||||||
|
child: registerController.remainingTime > 0
|
||||||
|
? Column(
|
||||||
|
children: [
|
||||||
|
Text(
|
||||||
|
'${(registerController.remainingTime / 60).floor()}:${(registerController.remainingTime % 60).toString().padLeft(2, '0')} remaining',
|
||||||
|
style: AppStyle.subtitle,
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
),
|
||||||
|
const SizedBox(height: 8),
|
||||||
|
LinearProgressIndicator(
|
||||||
|
value: registerController.remainingTime /
|
||||||
|
300, // Assuming 300 seconds (5 minutes) total
|
||||||
|
backgroundColor: Colors.grey[300],
|
||||||
|
valueColor: AlwaysStoppedAnimation<Color>(
|
||||||
|
Theme.of(context).primaryColor),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
: TextButton(
|
||||||
|
onPressed: () =>
|
||||||
|
registerController.sendOtpMessage(),
|
||||||
|
child: Text('Resend code'.tr),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
const SizedBox(
|
||||||
|
height:
|
||||||
|
16), // Add some space after the timer or button
|
||||||
|
],
|
||||||
|
)),
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.all(16.0),
|
padding: const EdgeInsets.all(16.0),
|
||||||
child: registerController.isSent
|
child: registerController.isSent
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import 'package:SEFER/controller/functions/tts.dart';
|
import 'package:SEFER/controller/functions/tts.dart';
|
||||||
|
import 'package:SEFER/controller/home/home_page_controller.dart';
|
||||||
import 'package:SEFER/views/widgets/elevated_btn.dart';
|
import 'package:SEFER/views/widgets/elevated_btn.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
@@ -19,6 +20,7 @@ class HomePage extends StatelessWidget {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
Get.put(HomePageController());
|
||||||
return MyScafolld(
|
return MyScafolld(
|
||||||
isleading: true,
|
isleading: true,
|
||||||
title: 'Home Page'.tr,
|
title: 'Home Page'.tr,
|
||||||
@@ -74,6 +76,25 @@ class HomePage extends StatelessWidget {
|
|||||||
),
|
),
|
||||||
onTap: () => Get.to(() => const FrequentlyQuestionsPage()),
|
onTap: () => Get.to(() => const FrequentlyQuestionsPage()),
|
||||||
),
|
),
|
||||||
|
ListTile(
|
||||||
|
leading: const Icon(Icons.vibration),
|
||||||
|
title: GetBuilder<HomePageController>(builder: (controller) {
|
||||||
|
return SwitchListTile(
|
||||||
|
title: Text(
|
||||||
|
'Vibration'.tr,
|
||||||
|
style: AppStyle.headTitle2,
|
||||||
|
),
|
||||||
|
value: controller.isVibrate,
|
||||||
|
onChanged: controller.changeVibrateOption,
|
||||||
|
activeColor: AppColor.primaryColor,
|
||||||
|
);
|
||||||
|
}),
|
||||||
|
subtitle: Text(
|
||||||
|
'You can change the Vibration for all butttons'.tr,
|
||||||
|
style: AppStyle.title,
|
||||||
|
),
|
||||||
|
onTap: () => Get.to(() => const FrequentlyQuestionsPage()),
|
||||||
|
),
|
||||||
ListTile(
|
ListTile(
|
||||||
leading: const Icon(Icons.record_voice_over_outlined),
|
leading: const Icon(Icons.record_voice_over_outlined),
|
||||||
title: Text(
|
title: Text(
|
||||||
|
|||||||
@@ -615,9 +615,13 @@ class HeaderDestination extends StatelessWidget {
|
|||||||
'🟢 ',
|
'🟢 ',
|
||||||
style: AppStyle.subtitle,
|
style: AppStyle.subtitle,
|
||||||
),
|
),
|
||||||
Text(
|
SizedBox(
|
||||||
mapPassengerController.startNameAddress,
|
height: Get.height * .06,
|
||||||
style: AppStyle.subtitle,
|
width: Get.width * .8,
|
||||||
|
child: Text(
|
||||||
|
mapPassengerController.startNameAddress,
|
||||||
|
style: AppStyle.subtitle,
|
||||||
|
),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
@@ -629,9 +633,13 @@ class HeaderDestination extends StatelessWidget {
|
|||||||
'🔴 ',
|
'🔴 ',
|
||||||
style: AppStyle.subtitle,
|
style: AppStyle.subtitle,
|
||||||
),
|
),
|
||||||
Text(
|
SizedBox(
|
||||||
mapPassengerController.endNameAddress,
|
height: Get.height * .06,
|
||||||
style: AppStyle.subtitle,
|
width: Get.width * .8,
|
||||||
|
child: Text(
|
||||||
|
mapPassengerController.endNameAddress,
|
||||||
|
style: AppStyle.subtitle,
|
||||||
|
),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -71,7 +71,8 @@ GetBuilder<MapPassengerController> formSearchPlacesDestenation() {
|
|||||||
height: 10,
|
height: 10,
|
||||||
),
|
),
|
||||||
Container(
|
Container(
|
||||||
decoration: AppStyle.boxDecoration1,
|
decoration: AppStyle.boxDecoration1
|
||||||
|
.copyWith(color: AppColor.blueColor),
|
||||||
child: InkWell(
|
child: InkWell(
|
||||||
onTap: () {
|
onTap: () {
|
||||||
controller.changeMainBottomMenuMap();
|
controller.changeMainBottomMenuMap();
|
||||||
@@ -81,8 +82,11 @@ GetBuilder<MapPassengerController> formSearchPlacesDestenation() {
|
|||||||
padding: const EdgeInsets.symmetric(
|
padding: const EdgeInsets.symmetric(
|
||||||
horizontal: 20, vertical: 4),
|
horizontal: 20, vertical: 4),
|
||||||
child: Text(
|
child: Text(
|
||||||
'Pick from map'.tr,
|
controller.isAnotherOreder
|
||||||
style: AppStyle.headTitle2,
|
? 'Pick from map destination'.tr
|
||||||
|
: 'Pick from map'.tr,
|
||||||
|
style: AppStyle.title
|
||||||
|
.copyWith(color: AppColor.secondaryColor),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
)),
|
)),
|
||||||
@@ -144,13 +148,14 @@ GetBuilder<MapPassengerController> formSearchPlacesDestenation() {
|
|||||||
child: Container(
|
child: Container(
|
||||||
width: Get.width * .25,
|
width: Get.width * .25,
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
color: AppColor.greenColor.withOpacity(.4),
|
color: AppColor.blueColor.withOpacity(.4),
|
||||||
border: Border.all()),
|
border: Border.all()),
|
||||||
child: Text(
|
child: Text(
|
||||||
' ${box.read(BoxName.addWork)}' == 'addWork'
|
' ${box.read(BoxName.addWork)}' == 'addWork'
|
||||||
? 'Add Work'.tr
|
? 'Add Work'.tr
|
||||||
: 'Work'.tr,
|
: 'To Work'.tr,
|
||||||
textAlign: TextAlign.center,
|
textAlign: TextAlign.center,
|
||||||
|
style: AppStyle.title,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
@@ -208,11 +213,12 @@ GetBuilder<MapPassengerController> formSearchPlacesDestenation() {
|
|||||||
child: Container(
|
child: Container(
|
||||||
width: Get.width * .25,
|
width: Get.width * .25,
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
color: AppColor.yellowColor.withOpacity(.4),
|
color: AppColor.blueColor.withOpacity(.4),
|
||||||
border: Border.all()),
|
border: Border.all()),
|
||||||
child: Text(
|
child: Text(
|
||||||
|
style: AppStyle.title,
|
||||||
textAlign: TextAlign.center,
|
textAlign: TextAlign.center,
|
||||||
'${box.read(BoxName.addHome) == 'addHome' ? 'Add Home' : 'Home'} '),
|
'${box.read(BoxName.addHome) == 'addHome' ? 'Add Home'.tr : "To Home".tr} '),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import 'package:flutter/cupertino.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:SEFER/constant/box_name.dart';
|
import 'package:SEFER/constant/box_name.dart';
|
||||||
@@ -12,6 +13,7 @@ import '../../../constant/colors.dart';
|
|||||||
import '../../../constant/table_names.dart';
|
import '../../../constant/table_names.dart';
|
||||||
import '../../../controller/functions/toast.dart';
|
import '../../../controller/functions/toast.dart';
|
||||||
import '../../../controller/functions/tts.dart';
|
import '../../../controller/functions/tts.dart';
|
||||||
|
import 'form_search_start.dart';
|
||||||
|
|
||||||
class MainBottomMenuMap extends StatelessWidget {
|
class MainBottomMenuMap extends StatelessWidget {
|
||||||
const MainBottomMenuMap({super.key});
|
const MainBottomMenuMap({super.key});
|
||||||
@@ -43,9 +45,28 @@ class MainBottomMenuMap extends StatelessWidget {
|
|||||||
child: Container(
|
child: Container(
|
||||||
width: Get.width * .8,
|
width: Get.width * .8,
|
||||||
height: Get.height * .1,
|
height: Get.height * .1,
|
||||||
decoration: AppStyle.boxDecoration1,
|
decoration: const BoxDecoration(
|
||||||
|
boxShadow: [
|
||||||
|
BoxShadow(
|
||||||
|
color: Color.fromARGB(
|
||||||
|
255, 237, 230, 230),
|
||||||
|
blurRadius: 5,
|
||||||
|
offset: Offset(2, 4)),
|
||||||
|
BoxShadow(
|
||||||
|
color: Color.fromARGB(
|
||||||
|
255, 242, 237, 237),
|
||||||
|
blurRadius: 5,
|
||||||
|
offset: Offset(-2, -2))
|
||||||
|
],
|
||||||
|
color: AppColor.blueColor,
|
||||||
|
borderRadius: BorderRadius.all(
|
||||||
|
Radius.elliptical(15, 30),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
// decoration: AppStyle.boxDecoration1,
|
||||||
child: DefaultTextStyle(
|
child: DefaultTextStyle(
|
||||||
style: AppStyle.title,
|
style: AppStyle.title.copyWith(
|
||||||
|
color: AppColor.secondaryColor),
|
||||||
child: Center(
|
child: Center(
|
||||||
child: controller.isPickerShown
|
child: controller.isPickerShown
|
||||||
? clickPointPosition(
|
? clickPointPosition(
|
||||||
@@ -62,6 +83,7 @@ class MainBottomMenuMap extends StatelessWidget {
|
|||||||
icon: controller.isMainBottomMenuMap
|
icon: controller.isMainBottomMenuMap
|
||||||
? const Icon(
|
? const Icon(
|
||||||
Icons.ads_click,
|
Icons.ads_click,
|
||||||
|
color: AppColor.secondaryColor,
|
||||||
size: 35,
|
size: 35,
|
||||||
)
|
)
|
||||||
: const Icon(
|
: const Icon(
|
||||||
@@ -88,10 +110,9 @@ class MainBottomMenuMap extends StatelessWidget {
|
|||||||
? const SizedBox()
|
? const SizedBox()
|
||||||
: Column(
|
: Column(
|
||||||
children: [
|
children: [
|
||||||
// controller.currentLocationToFormPlaces
|
!controller.isAnotherOreder
|
||||||
// ? const SizedBox()
|
? const SizedBox()
|
||||||
// :
|
: formSearchPlacesStart(),
|
||||||
// formSearchPlacesStart(),
|
|
||||||
formSearchPlacesDestenation(),
|
formSearchPlacesDestenation(),
|
||||||
const SizedBox(
|
const SizedBox(
|
||||||
height: 10,
|
height: 10,
|
||||||
@@ -117,16 +138,81 @@ class MainBottomMenuMap extends StatelessWidget {
|
|||||||
// controller.showBottomSheet1();
|
// controller.showBottomSheet1();
|
||||||
// }),
|
// }),
|
||||||
//todo If you want add stop click here
|
//todo If you want add stop click here
|
||||||
// TextButton(
|
|
||||||
// onPressed: () {
|
CupertinoButton(
|
||||||
// controller.changeMainBottomMenuMap();
|
child: Text(
|
||||||
// controller.changeWayPointSheet();
|
!controller.isAnotherOreder
|
||||||
// },
|
? 'I want to order for someone else'
|
||||||
// child: Text(
|
.tr
|
||||||
// "If you want add stop click here".tr,
|
: 'I want to order for myself'.tr,
|
||||||
// style: AppStyle.title,
|
),
|
||||||
// ),
|
onPressed: () {
|
||||||
// ),
|
showCupertinoModalPopup(
|
||||||
|
context: context,
|
||||||
|
builder: (BuildContext context) =>
|
||||||
|
CupertinoActionSheet(
|
||||||
|
title: Text('Select Order Type'.tr),
|
||||||
|
message: Text(
|
||||||
|
'Choose who this order is for'
|
||||||
|
.tr),
|
||||||
|
actions: <Widget>[
|
||||||
|
CupertinoActionSheetAction(
|
||||||
|
child: Row(
|
||||||
|
mainAxisAlignment:
|
||||||
|
MainAxisAlignment.center,
|
||||||
|
children: [
|
||||||
|
const Icon(
|
||||||
|
CupertinoIcons.person,
|
||||||
|
color: CupertinoColors
|
||||||
|
.activeBlue),
|
||||||
|
const SizedBox(width: 15),
|
||||||
|
Text(
|
||||||
|
'I want to order for myself'
|
||||||
|
.tr),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
onPressed: () {
|
||||||
|
controller
|
||||||
|
.changeisAnotherOreder(
|
||||||
|
false);
|
||||||
|
Navigator.pop(context);
|
||||||
|
},
|
||||||
|
),
|
||||||
|
CupertinoActionSheetAction(
|
||||||
|
child: Row(
|
||||||
|
mainAxisAlignment:
|
||||||
|
MainAxisAlignment.center,
|
||||||
|
children: [
|
||||||
|
const Icon(
|
||||||
|
CupertinoIcons.person_2,
|
||||||
|
color: CupertinoColors
|
||||||
|
.activeBlue),
|
||||||
|
const SizedBox(width: 15),
|
||||||
|
Text(
|
||||||
|
'I want to order for someone else'
|
||||||
|
.tr),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
onPressed: () {
|
||||||
|
controller
|
||||||
|
.changeisAnotherOreder(
|
||||||
|
true);
|
||||||
|
Navigator.pop(context);
|
||||||
|
},
|
||||||
|
),
|
||||||
|
],
|
||||||
|
cancelButton:
|
||||||
|
CupertinoActionSheetAction(
|
||||||
|
isDefaultAction: true,
|
||||||
|
onPressed: () {
|
||||||
|
Navigator.pop(context);
|
||||||
|
},
|
||||||
|
child: Text('Cancel'.tr),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
)
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
],
|
],
|
||||||
@@ -199,6 +285,7 @@ class MainBottomMenuMap extends StatelessWidget {
|
|||||||
onPressed: () async {
|
onPressed: () async {
|
||||||
controller.clearPolyline();
|
controller.clearPolyline();
|
||||||
controller.data = [];
|
controller.data = [];
|
||||||
|
//todo add isAnothorOrder
|
||||||
if (controller.passengerStartLocationFromMap == true) {
|
if (controller.passengerStartLocationFromMap == true) {
|
||||||
controller.newMyLocation = controller.newStartPointLocation;
|
controller.newMyLocation = controller.newStartPointLocation;
|
||||||
controller.changeMainBottomMenuMap();
|
controller.changeMainBottomMenuMap();
|
||||||
@@ -253,21 +340,24 @@ class MainBottomMenuMap extends StatelessWidget {
|
|||||||
controller.changeMainBottomMenuMap();
|
controller.changeMainBottomMenuMap();
|
||||||
controller.passengerStartLocationFromMap = true;
|
controller.passengerStartLocationFromMap = true;
|
||||||
controller.isPickerShown = true;
|
controller.isPickerShown = true;
|
||||||
await controller.mapController?.animateCamera(CameraUpdate.newLatLng(
|
if (controller.isAnotherOreder == false) {
|
||||||
LatLng(controller.passengerLocation.latitude,
|
await controller.mapController?.animateCamera(
|
||||||
controller.passengerLocation.longitude)));
|
CameraUpdate.newLatLng(LatLng(
|
||||||
Get.defaultDialog(
|
controller.passengerLocation.latitude,
|
||||||
title: 'Destination selected'.tr,
|
controller.passengerLocation.longitude)));
|
||||||
titleStyle: AppStyle.title,
|
Get.defaultDialog(
|
||||||
content: Text(
|
title: 'Destination selected'.tr,
|
||||||
'Now select start pick'.tr,
|
titleStyle: AppStyle.title,
|
||||||
style: AppStyle.title,
|
content: Text(
|
||||||
),
|
'Now select start pick'.tr,
|
||||||
confirm: MyElevatedButton(
|
style: AppStyle.title,
|
||||||
title: 'OK'.tr,
|
),
|
||||||
onPressed: () {
|
confirm: MyElevatedButton(
|
||||||
Get.back();
|
title: 'OK'.tr,
|
||||||
}));
|
onPressed: () {
|
||||||
|
Get.back();
|
||||||
|
}));
|
||||||
|
} else {}
|
||||||
}
|
}
|
||||||
|
|
||||||
controller.placesDestination = [];
|
controller.placesDestination = [];
|
||||||
@@ -289,6 +379,7 @@ class MainBottomMenuMap extends StatelessWidget {
|
|||||||
? const Icon(
|
? const Icon(
|
||||||
Icons.arrow_circle_up_rounded,
|
Icons.arrow_circle_up_rounded,
|
||||||
size: 35,
|
size: 35,
|
||||||
|
color: AppColor.secondaryColor,
|
||||||
)
|
)
|
||||||
: const Icon(
|
: const Icon(
|
||||||
Icons.arrow_circle_down_rounded,
|
Icons.arrow_circle_down_rounded,
|
||||||
@@ -300,7 +391,10 @@ class MainBottomMenuMap extends StatelessWidget {
|
|||||||
? 'Pick or Tap to confirm'.tr
|
? 'Pick or Tap to confirm'.tr
|
||||||
// ? 'Pick your ride location on the map - Tap to confirm'.tr
|
// ? 'Pick your ride location on the map - Tap to confirm'.tr
|
||||||
: "Click here point".tr,
|
: "Click here point".tr,
|
||||||
style: AppStyle.title,
|
style: AppStyle.title.copyWith(
|
||||||
|
color: AppColor.secondaryColor,
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
fontSize: 18),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
@@ -318,6 +412,7 @@ class MainBottomMenuMap extends StatelessWidget {
|
|||||||
icon: controller.isMainBottomMenuMap
|
icon: controller.isMainBottomMenuMap
|
||||||
? const Icon(
|
? const Icon(
|
||||||
Icons.ads_click,
|
Icons.ads_click,
|
||||||
|
color: AppColor.secondaryColor,
|
||||||
size: 35,
|
size: 35,
|
||||||
)
|
)
|
||||||
: const Icon(
|
: const Icon(
|
||||||
|
|||||||
@@ -37,7 +37,8 @@ class MapMenuWidget extends StatelessWidget {
|
|||||||
opacity: 1, // Adjust the opacity value as needed
|
opacity: 1, // Adjust the opacity value as needed
|
||||||
child: AnimatedContainer(
|
child: AnimatedContainer(
|
||||||
width: Get.width * .6,
|
width: Get.width * .6,
|
||||||
decoration: AppStyle.boxDecoration,
|
decoration: AppStyle.boxDecoration
|
||||||
|
.copyWith(color: AppColor.blueColor),
|
||||||
transform: Matrix4.translationValues(
|
transform: Matrix4.translationValues(
|
||||||
controller.heightMenu * .1, 1, 1),
|
controller.heightMenu * .1, 1, 1),
|
||||||
curve: Curves.easeOutCubic,
|
curve: Curves.easeOutCubic,
|
||||||
@@ -85,28 +86,11 @@ class MapMenuWidget extends StatelessWidget {
|
|||||||
),
|
),
|
||||||
Positioned(
|
Positioned(
|
||||||
right: 5,
|
right: 5,
|
||||||
top: 110,
|
top: 80,
|
||||||
child: AnimatedContainer(
|
child: AnimatedContainer(
|
||||||
duration: const Duration(milliseconds: 300),
|
duration: const Duration(milliseconds: 300),
|
||||||
decoration: const BoxDecoration(
|
decoration: AppStyle.boxDecoration1,
|
||||||
borderRadius: BorderRadius.all(Radius.circular(12)),
|
|
||||||
color: AppColor.secondaryColor,
|
|
||||||
boxShadow: [
|
|
||||||
BoxShadow(
|
|
||||||
color: AppColor.accentColor,
|
|
||||||
offset: Offset(-3, -3),
|
|
||||||
blurRadius: 0,
|
|
||||||
spreadRadius: 0,
|
|
||||||
blurStyle: BlurStyle.outer),
|
|
||||||
BoxShadow(
|
|
||||||
color: AppColor.accentColor,
|
|
||||||
offset: Offset(3, 3),
|
|
||||||
blurRadius: 0,
|
|
||||||
spreadRadius: 0,
|
|
||||||
blurStyle: BlurStyle.outer)
|
|
||||||
]),
|
|
||||||
width: controller.widthMenu,
|
width: controller.widthMenu,
|
||||||
height: Get.height * .3,
|
|
||||||
child: Column(
|
child: Column(
|
||||||
mainAxisAlignment: MainAxisAlignment.spaceAround,
|
mainAxisAlignment: MainAxisAlignment.spaceAround,
|
||||||
children: [
|
children: [
|
||||||
@@ -136,26 +120,10 @@ class MapMenuWidget extends StatelessWidget {
|
|||||||
)),
|
)),
|
||||||
Positioned(
|
Positioned(
|
||||||
left: 5,
|
left: 5,
|
||||||
top: 110,
|
top: 80,
|
||||||
child: AnimatedContainer(
|
child: AnimatedContainer(
|
||||||
duration: const Duration(milliseconds: 300),
|
duration: const Duration(milliseconds: 300),
|
||||||
decoration: const BoxDecoration(
|
decoration: AppStyle.boxDecoration1,
|
||||||
borderRadius: BorderRadius.all(Radius.circular(12)),
|
|
||||||
color: AppColor.secondaryColor,
|
|
||||||
boxShadow: [
|
|
||||||
BoxShadow(
|
|
||||||
color: AppColor.accentColor,
|
|
||||||
offset: Offset(-3, -3),
|
|
||||||
blurRadius: 0,
|
|
||||||
spreadRadius: 0,
|
|
||||||
blurStyle: BlurStyle.outer),
|
|
||||||
BoxShadow(
|
|
||||||
color: AppColor.accentColor,
|
|
||||||
offset: Offset(3, 3),
|
|
||||||
blurRadius: 0,
|
|
||||||
spreadRadius: 0,
|
|
||||||
blurStyle: BlurStyle.outer)
|
|
||||||
]),
|
|
||||||
width: controller.widthMenu,
|
width: controller.widthMenu,
|
||||||
height: Get.height * .3,
|
height: Get.height * .3,
|
||||||
child: Column(
|
child: Column(
|
||||||
@@ -225,35 +193,21 @@ class IconMainPageMap extends StatelessWidget {
|
|||||||
builder: (context, snapshot) {
|
builder: (context, snapshot) {
|
||||||
return GestureDetector(
|
return GestureDetector(
|
||||||
onTap: onTap,
|
onTap: onTap,
|
||||||
child: Padding(
|
child: SizedBox(
|
||||||
padding: const EdgeInsets.all(4),
|
height: Get.height * .1,
|
||||||
child: Container(
|
width: double.maxFinite,
|
||||||
width: double.maxFinite,
|
// decoration: AppStyle.boxDecoration,
|
||||||
decoration: const BoxDecoration(
|
child: Padding(
|
||||||
borderRadius: BorderRadius.all(Radius.circular(16)),
|
padding: const EdgeInsets.all(8.0),
|
||||||
color: AppColor.secondaryColor,
|
child: Column(
|
||||||
boxShadow: [
|
children: [
|
||||||
BoxShadow(
|
Icon(icon),
|
||||||
color: AppColor.accentColor,
|
Text(
|
||||||
offset: Offset(3, 3),
|
title.tr,
|
||||||
blurRadius: 0,
|
style: AppStyle.subtitle,
|
||||||
spreadRadius: 0,
|
|
||||||
blurStyle: BlurStyle.outer,
|
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
child: Padding(
|
|
||||||
padding: const EdgeInsets.all(8.0),
|
|
||||||
child: Column(
|
|
||||||
children: [
|
|
||||||
Icon(icon),
|
|
||||||
Text(
|
|
||||||
title.tr,
|
|
||||||
style: AppStyle.subtitle,
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
import 'package:SEFER/constant/links.dart';
|
import 'package:SEFER/constant/links.dart';
|
||||||
import 'package:SEFER/views/home/profile/complaint_page.dart';
|
import 'package:SEFER/views/home/profile/complaint_page.dart';
|
||||||
import 'package:SEFER/views/widgets/elevated_btn.dart';
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_font_icons/flutter_font_icons.dart';
|
import 'package:flutter_font_icons/flutter_font_icons.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
|
|||||||
@@ -1,19 +1,18 @@
|
|||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
|
|
||||||
import 'package:SEFER/constant/box_name.dart';
|
|
||||||
import 'package:SEFER/main.dart';
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:SEFER/constant/style.dart';
|
|
||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
import 'package:vibration/vibration.dart';
|
import 'package:vibration/vibration.dart';
|
||||||
|
import 'package:SEFER/constant/box_name.dart';
|
||||||
import '../../constant/colors.dart';
|
import 'package:SEFER/constant/colors.dart';
|
||||||
|
import 'package:SEFER/constant/style.dart';
|
||||||
|
import 'package:SEFER/main.dart';
|
||||||
|
|
||||||
class MyElevatedButton extends StatelessWidget {
|
class MyElevatedButton extends StatelessWidget {
|
||||||
final String title;
|
final String title;
|
||||||
final VoidCallback onPressed;
|
final VoidCallback onPressed;
|
||||||
final Color kolor;
|
final Color kolor;
|
||||||
final int vibrateDuration;
|
final int vibrateDuration;
|
||||||
|
|
||||||
const MyElevatedButton({
|
const MyElevatedButton({
|
||||||
Key? key,
|
Key? key,
|
||||||
required this.title,
|
required this.title,
|
||||||
@@ -24,28 +23,23 @@ class MyElevatedButton extends StatelessWidget {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
bool vibrate = box.read(BoxName.isvibrate) ?? true;
|
final bool vibrate = box.read(BoxName.isvibrate) ?? true;
|
||||||
|
|
||||||
return ElevatedButton(
|
return ElevatedButton(
|
||||||
style: ButtonStyle(
|
style: ElevatedButton.styleFrom(
|
||||||
backgroundColor: MaterialStateProperty.all(kolor),
|
backgroundColor: kolor,
|
||||||
shape: MaterialStateProperty.all(RoundedRectangleBorder(
|
shape: RoundedRectangleBorder(
|
||||||
borderRadius: BorderRadius.circular(12.0),
|
borderRadius: BorderRadius.circular(12.0),
|
||||||
)),
|
),
|
||||||
// padding:
|
|
||||||
// MaterialStateProperty.all(const EdgeInsets.symmetric(vertical: 15)),
|
|
||||||
),
|
),
|
||||||
onPressed: () async {
|
onPressed: () async {
|
||||||
// Handle haptic feedback for both iOS and Android
|
|
||||||
if (vibrate) {
|
if (vibrate) {
|
||||||
if (Platform.isIOS) {
|
if (Platform.isIOS) {
|
||||||
HapticFeedback.selectionClick();
|
HapticFeedback.selectionClick();
|
||||||
} else {
|
} else {
|
||||||
Vibration.vibrate(duration: 100);
|
await Vibration.vibrate(duration: vibrateDuration);
|
||||||
// Vibrate.vibrateWithPauses(pauses);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ensure the onPressed callback is called after haptic feedback
|
|
||||||
onPressed();
|
onPressed();
|
||||||
},
|
},
|
||||||
child: Text(
|
child: Text(
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ class IconWidgetMenu extends StatelessWidget {
|
|||||||
return InkWell(
|
return InkWell(
|
||||||
onTap: onpressed,
|
onTap: onpressed,
|
||||||
child: Padding(
|
child: Padding(
|
||||||
padding: const EdgeInsets.only(top: 25),
|
padding: const EdgeInsets.only(top: 1),
|
||||||
child: Column(
|
child: Column(
|
||||||
mainAxisAlignment: MainAxisAlignment.center,
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
children: [
|
children: [
|
||||||
@@ -29,22 +29,22 @@ class IconWidgetMenu extends StatelessWidget {
|
|||||||
decoration: const BoxDecoration(
|
decoration: const BoxDecoration(
|
||||||
color: AppColor.secondaryColor,
|
color: AppColor.secondaryColor,
|
||||||
shape: BoxShape.circle,
|
shape: BoxShape.circle,
|
||||||
boxShadow: [
|
// boxShadow: [
|
||||||
BoxShadow(
|
// BoxShadow(
|
||||||
color: AppColor.secondaryColor,
|
// color: AppColor.secondaryColor,
|
||||||
offset: Offset(-2, -2),
|
// offset: Offset(-2, -2),
|
||||||
blurRadius: 0,
|
// blurRadius: 0,
|
||||||
spreadRadius: 0,
|
// spreadRadius: 0,
|
||||||
blurStyle: BlurStyle.outer,
|
// blurStyle: BlurStyle.outer,
|
||||||
),
|
// ),
|
||||||
BoxShadow(
|
// BoxShadow(
|
||||||
color: AppColor.accentColor,
|
// color: AppColor.accentColor,
|
||||||
offset: Offset(3, 3),
|
// offset: Offset(3, 3),
|
||||||
blurRadius: 0,
|
// blurRadius: 0,
|
||||||
spreadRadius: 0,
|
// spreadRadius: 0,
|
||||||
blurStyle: BlurStyle.outer,
|
// blurStyle: BlurStyle.outer,
|
||||||
),
|
// ),
|
||||||
],
|
// ],
|
||||||
),
|
),
|
||||||
child: Center(
|
child: Center(
|
||||||
child: Icon(
|
child: Icon(
|
||||||
@@ -56,7 +56,7 @@ class IconWidgetMenu extends StatelessWidget {
|
|||||||
),
|
),
|
||||||
Text(
|
Text(
|
||||||
title,
|
title,
|
||||||
style: AppStyle.subtitle,
|
style: AppStyle.subtitle.copyWith(color: AppColor.secondaryColor),
|
||||||
)
|
)
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ class MyCircularProgressIndicator extends StatelessWidget {
|
|||||||
children: [
|
children: [
|
||||||
Align(
|
Align(
|
||||||
alignment: Alignment.center,
|
alignment: Alignment.center,
|
||||||
child: Image.asset('assets/images/logo.png'),
|
child: Image.asset('assets/images/logo.gif'),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -227,7 +227,7 @@
|
|||||||
isa = PBXProject;
|
isa = PBXProject;
|
||||||
attributes = {
|
attributes = {
|
||||||
LastSwiftUpdateCheck = 0920;
|
LastSwiftUpdateCheck = 0920;
|
||||||
LastUpgradeCheck = 1300;
|
LastUpgradeCheck = 1510;
|
||||||
ORGANIZATIONNAME = "";
|
ORGANIZATIONNAME = "";
|
||||||
TargetAttributes = {
|
TargetAttributes = {
|
||||||
331C80D4294CF70F00263BE5 = {
|
331C80D4294CF70F00263BE5 = {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<Scheme
|
<Scheme
|
||||||
LastUpgradeVersion = "1300"
|
LastUpgradeVersion = "1510"
|
||||||
version = "1.3">
|
version = "1.3">
|
||||||
<BuildAction
|
<BuildAction
|
||||||
parallelizeBuildables = "YES"
|
parallelizeBuildables = "YES"
|
||||||
|
|||||||
24
pubspec.lock
24
pubspec.lock
@@ -1092,26 +1092,26 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: leak_tracker
|
name: leak_tracker
|
||||||
sha256: "78eb209deea09858f5269f5a5b02be4049535f568c07b275096836f01ea323fa"
|
sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "10.0.0"
|
version: "10.0.4"
|
||||||
leak_tracker_flutter_testing:
|
leak_tracker_flutter_testing:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: leak_tracker_flutter_testing
|
name: leak_tracker_flutter_testing
|
||||||
sha256: b46c5e37c19120a8a01918cfaf293547f47269f7cb4b0058f21531c2465d6ef0
|
sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.1"
|
version: "3.0.3"
|
||||||
leak_tracker_testing:
|
leak_tracker_testing:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: leak_tracker_testing
|
name: leak_tracker_testing
|
||||||
sha256: a597f72a664dbd293f3bfc51f9ba69816f84dcd403cdac7066cb3f6003f3ab47
|
sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.1"
|
version: "3.0.1"
|
||||||
lints:
|
lints:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -1212,10 +1212,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: meta
|
name: meta
|
||||||
sha256: d584fa6707a52763a52446f02cc621b077888fb63b93bbcb1143a7be5a0c0c04
|
sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.11.0"
|
version: "1.12.0"
|
||||||
mime:
|
mime:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -1673,10 +1673,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: test_api
|
name: test_api
|
||||||
sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b"
|
sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.6.1"
|
version: "0.7.0"
|
||||||
timezone:
|
timezone:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -1857,10 +1857,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: vm_service
|
name: vm_service
|
||||||
sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957
|
sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "13.0.0"
|
version: "14.2.1"
|
||||||
wakelock_plus:
|
wakelock_plus:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
|||||||
Reference in New Issue
Block a user