fix issues

fatima
Fatimah Alshammari 4 years ago
parent 44f2868790
commit 84b83b672d

@ -79,6 +79,15 @@ class UserApiClent {
return await ApiClient().postJsonForResponse(ApiConsts.Login_V2_OTPVerify, postParams); return await ApiClient().postJsonForResponse(ApiConsts.Login_V2_OTPVerify, postParams);
} }
Future<Response> RefreshToken(String token, String refreshToken) async {
var postParams = {
"token": token,
"refreshToken": refreshToken
};
String t = AppState().getUser.data!.accessToken ?? "";
return await ApiClient().postJsonForResponse(ApiConsts.RefreshToken, postParams, token: t);
}
Future<Country> getAllCountries() async { Future<Country> getAllCountries() async {
var postParams = {}; var postParams = {};
return await ApiClient().getJsonForObject((json) => Country.fromJson(json), ApiConsts.GetAllCountry); return await ApiClient().getJsonForObject((json) => Country.fromJson(json), ApiConsts.GetAllCountry);

@ -5,7 +5,7 @@ class ApiConsts {
static String BasicOTP = baseUrlServices + "api/Register/BasicOTP"; static String BasicOTP = baseUrlServices + "api/Register/BasicOTP";
static String BasicVerify = baseUrlServices + "api/Register/BasicVerify"; static String BasicVerify = baseUrlServices + "api/Register/BasicVerify";
static String BasicComplete = baseUrlServices + "api/Register/BasicComplete"; static String BasicComplete = baseUrlServices + "api/Register/BasicComplete";
static String RefreshToken = baseUrlServices + "api/Account/RefreshToken";
//User //User
static String Login_V1 = baseUrlServices + "api/Account/Login_V1"; static String Login_V1 = baseUrlServices + "api/Account/Login_V1";

@ -16,7 +16,7 @@ class CodegenLoader extends AssetLoader{
static const Map<String,dynamic> ar_SA = { static const Map<String,dynamic> ar_SA = {
"firstTimeLogIn": "تسجيل الدخول لأول مره", "firstTimeLogIn": "تسجيل الدخول لأول مره",
"signUp": "تسجيل دخول", "signUp": "التسجيل",
"changeMobile": "تغيير رقم الجوال", "changeMobile": "تغيير رقم الجوال",
"notifications": "الاشعارات", "notifications": "الاشعارات",
"general": "عام", "general": "عام",
@ -26,6 +26,7 @@ class CodegenLoader extends AssetLoader{
"retrievePassword": "استرجاع كلمة المرور", "retrievePassword": "استرجاع كلمة المرور",
"changeEmail": "تغيير الايميل", "changeEmail": "تغيير الايميل",
"verify": "تحقق", "verify": "تحقق",
"verified": "تم التحقق",
"signOut": "تسجيل خروج", "signOut": "تسجيل خروج",
"enterEmail": "ادخل الايميل", "enterEmail": "ادخل الايميل",
"enterNewEmail": "ادخل ايميل جديد", "enterNewEmail": "ادخل ايميل جديد",
@ -107,7 +108,17 @@ class CodegenLoader extends AssetLoader{
"completeProfile1": "اكمل الملف الشخصي 1/3", "completeProfile1": "اكمل الملف الشخصي 1/3",
"completeProfile2": "اكمل الملف الشخصي 2/3", "completeProfile2": "اكمل الملف الشخصي 2/3",
"completeProfile3": "اكمل الملف الشخصي 3/3", "completeProfile3": "اكمل الملف الشخصي 3/3",
"userInformation": "User Information", "userInformation": "معلومات المتسخدم",
"faceRecognition": "تحقق مع بصمة الوجه",
"fingerPrint": "تحقق مع بصمة الاصبع",
"whatsapp": "تحقق مع Whatsapp",
"SMS": "رسائل قصيره",
"selectRole": "حدد الدور",
"userRoleOrTitle": "عنوان المستخدم",
"codeSentToEmail": "تم ارسال الرمز للايميل",
"number": "موبايل",
"arabic": "عربي",
"english": "English",
"provider": "Provider", "provider": "Provider",
"title": "Hello", "title": "Hello",
"msg": "Hello {} in the {} world ", "msg": "Hello {} in the {} world ",
@ -158,6 +169,7 @@ static const Map<String,dynamic> en_US = {
"retrievePassword": "Retrieve Password", "retrievePassword": "Retrieve Password",
"changeEmail": "Change Email", "changeEmail": "Change Email",
"verify": "Verify", "verify": "Verify",
"verified": "Verified",
"signOut": "Sign Out", "signOut": "Sign Out",
"enterEmail": "Enter Email", "enterEmail": "Enter Email",
"enterNewEmail": "Enter New Email", "enterNewEmail": "Enter New Email",
@ -225,15 +237,15 @@ static const Map<String,dynamic> en_US = {
"address": "Address", "address": "Address",
"branchDescription": "Branch Description", "branchDescription": "Branch Description",
"branchName": "Branch Name", "branchName": "Branch Name",
"chooseCity": "Choose City", "chooseCity": "Select City",
"chooseCountry": "Choose Country", "chooseCountry": "Select Country",
"selectAttachment": "Select Attachment", "selectAttachment": "Select Attachment",
"somethingWrong": "Something went wrong", "somethingWrong": "Something went wrong",
"documentsUploaded": "Documents uploaded successfully", "documentsUploaded": "Documents uploaded successfully",
"update": "Update", "update": "Update",
"termsOfService": "By creating an account you agree to our Terms of Service and\n Privacy Policy", "termsOfService": "By creating an account you agree to our Terms of Service and\n Privacy Policy",
"branchInfo": "Branch Info and Services", "branchInfo": "Branch Info and Services",
"profileCompleted": "Profile Completed", "profileCompleted": "Profile is Completed",
"selectLocationMap": "Select Location Map", "selectLocationMap": "Select Location Map",
"licensesAndCertifications": "licenses & certifications", "licensesAndCertifications": "licenses & certifications",
"completeProfile1": "Complete Profile 1/3", "completeProfile1": "Complete Profile 1/3",
@ -241,6 +253,15 @@ static const Map<String,dynamic> en_US = {
"completeProfile3": "Complete Profile 3/3", "completeProfile3": "Complete Profile 3/3",
"userInformation": "User Information", "userInformation": "User Information",
"provider": "Provider", "provider": "Provider",
"faceRecognition": "Face Recognition",
"fingerPrint": "Finger Print",
"whatsapp": "With Whatsapp",
"SMS": "With SMS",
"selectRole": "Select Role",
"userRoleOrTitle": "User role or title",
"codeSentToEmail": "Code is sent to email",
"number": "Number",
"english": "English",
"title": "Hello", "title": "Hello",
"msg": "Hello {} in the {} world ", "msg": "Hello {} in the {} world ",
"msg_named": "{} are written in the {lang} language", "msg_named": "{} are written in the {lang} language",

@ -19,7 +19,8 @@ Future<void> main() async {
Locale('en', 'US') Locale('en', 'US')
], ],
fallbackLocale: Locale('ar', 'SA'), fallbackLocale: Locale('en', 'US'),
startLocale: Locale('ar', 'SA'),
path: 'resources/langs', path: 'resources/langs',
child: MyApp(), child: MyApp(),
), ),

@ -1,12 +1,12 @@
// To parse this JSON data, do // To parse this JSON data, do
// //
// final user = userFromMap(jsonString); // final registerUser = registerUserFromJson(jsonString);
import 'dart:convert'; import 'dart:convert';
RegisterUser userFromMap(String str) => RegisterUser.fromJson(json.decode(str)); RegisterUser registerUserFromJson(String str) => RegisterUser.fromJson(json.decode(str));
String userToMap(RegisterUser data) => json.encode(data.toMap()); String registerUserToJson(RegisterUser data) => json.encode(data.toJson());
class RegisterUser { class RegisterUser {
RegisterUser({ RegisterUser({
@ -16,28 +16,56 @@ class RegisterUser {
this.message, this.message,
}); });
dynamic totalItemsCount; dynamic? totalItemsCount;
Data? data; Data? data;
int? messageStatus; int? messageStatus;
String? message; String? message;
factory RegisterUser.fromJson(Map<String, dynamic> json) => RegisterUser( factory RegisterUser.fromJson(Map<String, dynamic> json) => RegisterUser(
totalItemsCount: json["totalItemsCount"], totalItemsCount: json["totalItemsCount"],
data: json["data"] == null ? null : Data.fromMap(json["data"]), data: Data.fromJson(json["data"]),
messageStatus: json["messageStatus"] == null ? null : json["messageStatus"], messageStatus: json["messageStatus"],
message: json["message"] == null ? null : json["message"], message: json["message"],
); );
Map<String, dynamic> toMap() => { Map<String, dynamic> toJson() => {
"totalItemsCount": totalItemsCount, "totalItemsCount": totalItemsCount,
"data": data == null ? null : data!.toMap(), "data": data!.toJson(),
"messageStatus": messageStatus == null ? null : messageStatus, "messageStatus": messageStatus,
"message": message == null ? null : message, "message": message,
}; };
} }
class Data { class Data {
Data({ Data({
this.accessToken,
this.refreshToken,
this.expiryDate,
this.userInfo,
});
String? accessToken;
String? refreshToken;
DateTime? expiryDate;
UserInfo? userInfo;
factory Data.fromJson(Map<String, dynamic> json) => Data(
accessToken: json["accessToken"],
refreshToken: json["refreshToken"],
expiryDate: DateTime.parse(json["expiryDate"]),
userInfo: UserInfo.fromJson(json["userInfo"]),
);
Map<String, dynamic> toJson() => {
"accessToken": accessToken,
"refreshToken": refreshToken,
"expiryDate": expiryDate!.toIso8601String(),
"userInfo": userInfo!.toJson(),
};
}
class UserInfo {
UserInfo({
this.id, this.id,
this.userId, this.userId,
this.firstName, this.firstName,
@ -52,66 +80,74 @@ class Data {
this.isVerified, this.isVerified,
this.userRoles, this.userRoles,
this.isCustomer, this.isCustomer,
this.isProvider, this.isProviderDealership,
this.isDealershipUser,
this.providerId, this.providerId,
this.customerId, this.customerId,
this.dealershipId,
}); });
int? id; int? id;
String? userId; String? userId;
dynamic? firstName; String? firstName;
dynamic? lastName; String? lastName;
String? mobileNo; String? mobileNo;
String? email; String? email;
dynamic? userImageUrl; String? userImageUrl;
int? roleId; int? roleId;
dynamic? roleName; String? roleName;
bool? isEmailVerified; bool? isEmailVerified;
List<dynamic>? serviceProviderBranch; List<dynamic>? serviceProviderBranch;
bool? isVerified; bool? isVerified;
List<dynamic>? userRoles; List<dynamic>? userRoles;
bool? isCustomer; bool? isCustomer;
bool? isProvider; bool? isProviderDealership;
bool? isDealershipUser;
dynamic? providerId; dynamic? providerId;
dynamic? customerId; int? customerId;
dynamic? dealershipId;
factory Data.fromMap(Map<String, dynamic> json) => Data( factory UserInfo.fromJson(Map<String, dynamic> json) => UserInfo(
id: json["id"] == null ? null : json["id"], id: json["id"],
userId: json["userID"] == null ? null : json["userID"], userId: json["userID"],
firstName: json["firstName"], firstName: json["firstName"],
lastName: json["lastName"], lastName: json["lastName"],
mobileNo: json["mobileNo"] == null ? null : json["mobileNo"], mobileNo: json["mobileNo"],
email: json["email"] == null ? null : json["email"], email: json["email"],
userImageUrl: json["userImageUrl"], userImageUrl: json["userImageUrl"],
roleId: json["roleID"] == null ? null : json["roleID"], roleId: json["roleID"],
roleName: json["roleName"], roleName: json["roleName"],
isEmailVerified: json["isEmailVerified"] == null ? null : json["isEmailVerified"], isEmailVerified: json["isEmailVerified"],
serviceProviderBranch: json["serviceProviderBranch"] == null ? null : List<dynamic>.from(json["serviceProviderBranch"].map((x) => x)), serviceProviderBranch: List<dynamic>.from(json["serviceProviderBranch"].map((x) => x)),
isVerified: json["isVerified"] == null ? null : json["isVerified"], isVerified: json["isVerified"],
userRoles: json["userRoles"] == null ? null : List<dynamic>.from(json["userRoles"].map((x) => x)), userRoles: List<dynamic>.from(json["userRoles"].map((x) => x)),
isCustomer: json["isCustomer"] == null ? null : json["isCustomer"], isCustomer: json["isCustomer"],
isProvider: json["isProvider"] == null ? null : json["isProvider"], isProviderDealership: json["isProviderDealership"],
isDealershipUser: json["isDealershipUser"],
providerId: json["providerID"], providerId: json["providerID"],
customerId: json["customerID"], customerId: json["customerID"],
dealershipId: json["dealershipID"],
); );
Map<String, dynamic> toMap() => { Map<String, dynamic> toJson() => {
"id": id == null ? null : id, "id": id,
"userID": userId == null ? null : userId, "userID": userId,
"firstName": firstName, "firstName": firstName,
"lastName": lastName, "lastName": lastName,
"mobileNo": mobileNo == null ? null : mobileNo, "mobileNo": mobileNo,
"email": email == null ? null : email, "email": email,
"userImageUrl": userImageUrl, "userImageUrl": userImageUrl,
"roleID": roleId == null ? null : roleId, "roleID": roleId,
"roleName": roleName, "roleName": roleName,
"isEmailVerified": isEmailVerified == null ? null : isEmailVerified, "isEmailVerified": isEmailVerified,
"serviceProviderBranch": serviceProviderBranch == null ? null : List<dynamic>.from(serviceProviderBranch!.map((x) => x)), "serviceProviderBranch": List<dynamic>.from(serviceProviderBranch!.map((x) => x)),
"isVerified": isVerified == null ? null : isVerified, "isVerified": isVerified,
"userRoles": userRoles == null ? null : List<dynamic>.from(userRoles!.map((x) => x)), "userRoles": List<dynamic>.from(userRoles!.map((x) => x)),
"isCustomer": isCustomer == null ? null : isCustomer, "isCustomer": isCustomer,
"isProvider": isProvider == null ? null : isProvider, "isProviderDealership": isProviderDealership,
"isDealershipUser": isDealershipUser,
"providerID": providerId, "providerID": providerId,
"customerID": customerId, "customerID": customerId,
"dealershipID": dealershipId,
}; };
} }

@ -126,7 +126,7 @@ class _DashboardPageState extends State<DashboardPage> {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
userName.toText24(), userName.toText24(),
"User role or title".toText12(), LocaleKeys.userRoleOrTitle.tr().toText12(),
], ],
), ),
), ),

@ -32,7 +32,7 @@ class _ChangeEmailPageState extends State<ChangeEmailPage> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
appBar: appBar(title: "Change Email"), appBar: appBar(title: LocaleKeys.changeEmail.tr()),
body: SingleChildScrollView( body: SingleChildScrollView(
child: Container( child: Container(
// width: double.infinity, // width: double.infinity,
@ -40,11 +40,11 @@ class _ChangeEmailPageState extends State<ChangeEmailPage> {
padding: EdgeInsets.all(40), padding: EdgeInsets.all(40),
child: Column( child: Column(
children: [ children: [
"Enter Email".toText24(), LocaleKeys.enterEmail.tr().toText24(),
12.height, 12.height,
TextFormField( TextFormField(
decoration: InputDecoration( decoration: InputDecoration(
hintText: "Enter New Email", hintText: LocaleKeys.enterNewEmail.tr(),
hintStyle: TextStyle(color: Colors.grey), hintStyle: TextStyle(color: Colors.grey),
border: OutlineInputBorder( border: OutlineInputBorder(
borderRadius: const BorderRadius.all( borderRadius: const BorderRadius.all(
@ -58,7 +58,7 @@ class _ChangeEmailPageState extends State<ChangeEmailPage> {
12.height, 12.height,
TextFormField( TextFormField(
decoration: InputDecoration( decoration: InputDecoration(
hintText: "Enter Current Password", hintText: LocaleKeys.enterCurrentPassword.tr(),
hintStyle: TextStyle(color: Colors.grey), hintStyle: TextStyle(color: Colors.grey),
border: OutlineInputBorder( border: OutlineInputBorder(
borderRadius: const BorderRadius.all( borderRadius: const BorderRadius.all(
@ -71,7 +71,7 @@ class _ChangeEmailPageState extends State<ChangeEmailPage> {
), ),
40.height, 40.height,
ShowFillButton( ShowFillButton(
title: "Confirm", title: LocaleKeys.confirm.tr(),
width: double.infinity, width: double.infinity,
onPressed: () { onPressed: () {
changeEmail(context); changeEmail(context);

@ -29,8 +29,10 @@ class CompleteProfilePage extends StatefulWidget {
} }
class _CompleteProfilePageState extends State<CompleteProfilePage> { class _CompleteProfilePageState extends State<CompleteProfilePage> {
String? firstName = "", lastName = "", email = "", password = "", confirmPassword = ""; String? firstName = "", lastName = "", email = "", confirmPassword = "";
bool isChecked = false; bool isChecked = false;
late String password = "";
double _strength = 0;
@override @override
void initState() { void initState() {
@ -84,9 +86,29 @@ class _CompleteProfilePageState extends State<CompleteProfilePage> {
isPasswordEnabled: true, isPasswordEnabled: true,
maxLines: 1, maxLines: 1,
value: password, value: password,
onChanged: (v) { onChanged: (value) => _checkPassword(value),
password = v; // onChanged: (v) {
}, // password = v;
// },
),
password!.isNotEmpty ? 12.height : 0.height,
// The strength indicator bar
password!.isNotEmpty ? LinearProgressIndicator(
value: _strength,
backgroundColor: Colors.grey[300],
color: _strength <= 1 / 4
? Colors.yellow
: _strength == 2 / 4
? Colors.orange
: _strength == 3 / 4
? Colors.deepOrange
: Colors.red,
minHeight: 4,
): Container(),
// The message about the strength of the entered password
Text(
_displayText,
style: const TextStyle(fontSize: 12),
), ),
12.height, 12.height,
TxtField( TxtField(
@ -162,9 +184,9 @@ class _CompleteProfilePageState extends State<CompleteProfilePage> {
Future<void> performCompleteProfile() async { Future<void> performCompleteProfile() async {
if (validateStructure(password ?? "")) { if (validateStructure(password ?? "")) {
if (password == confirmPassword) { if (password == confirmPassword) {
print(widget.user.data!.userId ?? "userId"); print(widget.user.data!.userInfo!.userId ?? "userId");
Utils.showLoading(context); Utils.showLoading(context);
RegisterUser user = await UserApiClent().basicComplete(widget.user.data?.userId ?? "", firstName!, lastName!, email!, password!); RegisterUser user = await UserApiClent().basicComplete(widget.user.data!.userInfo!.userId ?? "", firstName!, lastName!, email!, password!);
Utils.hideLoading(context); Utils.hideLoading(context);
if (user.messageStatus == 1) { if (user.messageStatus == 1) {
Utils.showToast(LocaleKeys.successfullyRegistered.tr(),); Utils.showToast(LocaleKeys.successfullyRegistered.tr(),);
@ -224,4 +246,36 @@ class _CompleteProfilePageState extends State<CompleteProfilePage> {
return isValid; return isValid;
} }
RegExp numReg = RegExp(r".*[0-9].*");
RegExp letterReg = RegExp(r".*[A-Za-z].*");
String _displayText = '';
void _checkPassword(String value) {
password = value.trim();
if (password!.length <= 6) {
setState(() {
_strength = 1 / 4;
_displayText = 'Your password is too short';
});
} else if (password!.length < 8) {
setState(() {
_strength = 2 / 4;
_displayText = 'Your password is acceptable but not strong';
});
} else {
if (!letterReg.hasMatch(password!) || !numReg.hasMatch(password!)) {
setState(() {
_strength = 3 / 4;
_displayText = 'Your password is strong';
});
} else {
setState(() {
_strength = 1;
_displayText = 'Your password is very strong';
});
}
}
}
} }

@ -76,7 +76,7 @@ class _EditAccountPageState extends State<EditAccountPage> {
Icon(Icons.email, color: Colors.blue,), Icon(Icons.email, color: Colors.blue,),
LocaleKeys.changeEmail.tr().toText12(), LocaleKeys.changeEmail.tr().toText12(),
InkWell( InkWell(
child:((AppState().getUser.data!.userInfo!.isEmailVerified??false)?"Verified" :"Verify").toText12(), child:((AppState().getUser.data!.userInfo!.isEmailVerified??false)?LocaleKeys.verified.tr() :LocaleKeys.verify.tr()).toText12(),
onTap: onTap:
(AppState().getUser.data!.userInfo!.isEmailVerified??false) ? (AppState().getUser.data!.userInfo!.isEmailVerified??false) ?
null null

@ -125,7 +125,7 @@ class _ForgetPasswordPageState extends State<ForgetPasswordPage> {
padding: const EdgeInsets.all(2.0), padding: const EdgeInsets.all(2.0),
child: DropdownField((DropValue value) { child: DropdownField((DropValue value) {
countryCode = value.subValue; countryCode = value.subValue;
}, list: dropList, hint: "Chose Country"), }, list: dropList, hint: LocaleKeys.chooseCountry.tr()),
); );
} else { } else {
return Center( return Center(
@ -153,7 +153,7 @@ class _ForgetPasswordPageState extends State<ForgetPasswordPage> {
Utils.hideLoading(context); Utils.hideLoading(context);
PasswordOTPRequest otpRequest = PasswordOTPRequest.fromJson(jsonDecode(response.body)); PasswordOTPRequest otpRequest = PasswordOTPRequest.fromJson(jsonDecode(response.body));
if (otpRequest.messageStatus == 1) { if (otpRequest.messageStatus == 1) {
Utils.showToast("Code is sent to email"); Utils.showToast(LocaleKeys.codeSentToEmail.tr());
showMDialog(context, child: OtpDialog( showMDialog(context, child: OtpDialog(
onClick: (String code) async { onClick: (String code) async {
pop(context); pop(context);

@ -49,7 +49,7 @@ class LoginMethodSelectionPage extends StatelessWidget {
onClick: () { onClick: () {
performBasicOtp(context); performBasicOtp(context);
}, },
title: 'Finger Print', title: LocaleKeys.fingerPrint.tr(),
icon: icons + "ic_fingerprint.png", icon: icons + "ic_fingerprint.png",
), ),
), ),
@ -59,7 +59,7 @@ class LoginMethodSelectionPage extends StatelessWidget {
onClick: () { onClick: () {
performBasicOtp(context); performBasicOtp(context);
}, },
title: 'Face Recognition', title: LocaleKeys.faceRecognition.tr(),
icon: icons + "ic_face_id.png", icon: icons + "ic_face_id.png",
), ),
), ),
@ -73,7 +73,7 @@ class LoginMethodSelectionPage extends StatelessWidget {
onClick: () { onClick: () {
performBasicOtp(context); performBasicOtp(context);
}, },
title: 'With SMS', title: LocaleKeys.SMS.tr(),
icon: icons + "ic_sms.png", icon: icons + "ic_sms.png",
), ),
), ),
@ -84,7 +84,7 @@ class LoginMethodSelectionPage extends StatelessWidget {
// navigateWithName(context, AppRoutes.dashboard); // navigateWithName(context, AppRoutes.dashboard);
performBasicOtp(context); performBasicOtp(context);
}, },
title: 'With Whatsapp', title: LocaleKeys.whatsapp.tr(),
icon: icons + "ic_whatsapp.png", icon: icons + "ic_whatsapp.png",
), ),
), ),
@ -111,6 +111,10 @@ class LoginMethodSelectionPage extends StatelessWidget {
Utils.hideLoading(context); Utils.hideLoading(context);
RegisterUser verifiedUser = RegisterUser.fromJson(jsonDecode(response2.body)); RegisterUser verifiedUser = RegisterUser.fromJson(jsonDecode(response2.body));
if (verifiedUser.messageStatus == 1) { if (verifiedUser.messageStatus == 1) {
Utils.showLoading(context);
Response res = await UserApiClent().RefreshToken(verifiedUser.data.toString()??"", verifiedUser.data.toString()??"");
Utils.hideLoading(context);
User user = User.fromJson(jsonDecode(response2.body)); User user = User.fromJson(jsonDecode(response2.body));
AppState().setUser = user; AppState().setUser = user;
SharedPrefManager.setUserToken(user.data!.accessToken ?? ""); SharedPrefManager.setUserToken(user.data!.accessToken ?? "");

@ -104,7 +104,7 @@ class _LoginVerificationPageState extends State<LoginVerificationPage> {
onClick: () { onClick: () {
performBasicOtp(context, userToken); performBasicOtp(context, userToken);
}, },
title: 'Finger Print', title: LocaleKeys.fingerPrint.tr(),
icon: icons + "ic_fingerprint.png", icon: icons + "ic_fingerprint.png",
), ),
), ),
@ -114,7 +114,7 @@ class _LoginVerificationPageState extends State<LoginVerificationPage> {
onClick: () { onClick: () {
performBasicOtp(context, userToken); performBasicOtp(context, userToken);
}, },
title: 'Face Recognition', title: LocaleKeys.faceRecognition.tr(),
icon: icons + "ic_face_id.png", icon: icons + "ic_face_id.png",
), ),
), ),
@ -128,7 +128,7 @@ class _LoginVerificationPageState extends State<LoginVerificationPage> {
onClick: () { onClick: () {
performBasicOtp(context, userToken); performBasicOtp(context, userToken);
}, },
title: 'With SMS', title: LocaleKeys.SMS.tr(),
icon: icons + "ic_sms.png", icon: icons + "ic_sms.png",
), ),
), ),
@ -138,7 +138,7 @@ class _LoginVerificationPageState extends State<LoginVerificationPage> {
onClick: () { onClick: () {
performBasicOtp(context, userToken); performBasicOtp(context, userToken);
}, },
title: 'With Whatsapp', title:LocaleKeys.whatsapp.tr(),
icon: icons + "ic_whatsapp.png", icon: icons + "ic_whatsapp.png",
), ),
), ),

@ -69,7 +69,7 @@ class LoginVerifyAccountPage extends StatelessWidget {
// }, // },
// )); // ));
}, },
title: 'With SMS', title: LocaleKeys.SMS.tr(),
icon: icons + "ic_sms.png", icon: icons + "ic_sms.png",
), ),
), ),
@ -98,7 +98,7 @@ class LoginVerifyAccountPage extends StatelessWidget {
// }, // },
// )); // ));
}, },
title: 'With Whatsapp', title: LocaleKeys.whatsapp.tr(),
icon: icons + "ic_whatsapp.png", icon: icons + "ic_whatsapp.png",
), ),
), ),

@ -58,12 +58,12 @@ class _LoginWithPasswordState extends State<LoginWithPassword> {
}, },
), ),
50.height, 50.height,
(type == ClassType.NUMBER ? "Enter Phone" : "Enter Email").toText24(), (type == ClassType.NUMBER ? LocaleKeys.enterPhoneNumber.tr() : LocaleKeys.enterEmail.tr()).toText24(),
mFlex(1), mFlex(1),
Column( Column(
children: [ children: [
TxtField( TxtField(
hint: type == ClassType.NUMBER ? "Enter phone number" : "Enter Email", hint: type == ClassType.NUMBER ? LocaleKeys.enterPhoneNumber.tr() : LocaleKeys.enterEmail.tr(),
value: phoneNum, value: phoneNum,
onChanged: (v) { onChanged: (v) {
phoneNum = v; phoneNum = v;

@ -48,7 +48,7 @@ class RegisterPage extends StatelessWidget {
}); });
return DropdownField((DropValue value) { return DropdownField((DropValue value) {
role = value.id; role = value.id;
}, list: dropList, hint: "Select Role"); }, list: dropList, hint: LocaleKeys.selectRole.tr());
} else { } else {
return CircularProgressIndicator(); return CircularProgressIndicator();
} }
@ -66,7 +66,7 @@ class RegisterPage extends StatelessWidget {
return DropdownField((DropValue value) { return DropdownField((DropValue value) {
countryCode = value.subValue; countryCode = value.subValue;
countryId = value.id; countryId = value.id;
}, list: dropList, hint: "Select Country"); }, list: dropList, hint: LocaleKeys.chooseCountry.tr());
} else { } else {
return CircularProgressIndicator(); return CircularProgressIndicator();
} }

@ -1,11 +1,13 @@
import 'dart:async'; import 'dart:async';
import 'package:car_provider_app/config/routes.dart'; import 'package:car_provider_app/config/routes.dart';
import 'package:car_provider_app/extensions/int_extensions.dart';
import 'package:car_provider_app/extensions/string_extensions.dart'; import 'package:car_provider_app/extensions/string_extensions.dart';
import 'package:car_provider_app/generated/locale_keys.g.dart'; import 'package:car_provider_app/generated/locale_keys.g.dart';
import 'package:car_provider_app/utils/navigator.dart'; import 'package:car_provider_app/utils/navigator.dart';
import 'package:car_provider_app/utils/utils.dart'; import 'package:car_provider_app/utils/utils.dart';
import 'package:car_provider_app/extensions/widget_extensions.dart'; import 'package:car_provider_app/extensions/widget_extensions.dart';
import 'package:car_provider_app/widgets/show_fill_button.dart';
import 'package:easy_localization/src/public_ext.dart'; import 'package:easy_localization/src/public_ext.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@ -28,6 +30,14 @@ class SplashPage extends StatelessWidget {
LocaleKeys.alreadySigned.tr().toText(fontSize: 18, isBold: true).onPress(() { LocaleKeys.alreadySigned.tr().toText(fontSize: 18, isBold: true).onPress(() {
navigateWithName(context, AppRoutes.loginVerification); navigateWithName(context, AppRoutes.loginVerification);
}), }),
35.height,
TextButton(
style: TextButton.styleFrom(
backgroundColor: Colors.white,
),
onPressed: () { },
child: Text( LocaleKeys.english.tr(), ),
),
mFlex(5), mFlex(5),
], ],
), ),

@ -76,7 +76,7 @@ class VerifyPasswordPage extends StatelessWidget {
}, },
)); ));
}, },
title: 'With SMS', title: LocaleKeys.SMS.tr(),
icon: icons + "ic_sms.png", icon: icons + "ic_sms.png",
), ),
), ),
@ -105,7 +105,7 @@ class VerifyPasswordPage extends StatelessWidget {
}, },
)); ));
}, },
title: 'With Whatsapp', title: LocaleKeys.whatsapp.tr(),
icon: icons + "ic_whatsapp.png", icon: icons + "ic_whatsapp.png",
), ),
), ),

@ -1,3 +1,5 @@
import 'package:car_provider_app/generated/locale_keys.g.dart';
import 'package:easy_localization/src/public_ext.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
enum ClassType { EMAIL, NUMBER } enum ClassType { EMAIL, NUMBER }
@ -32,7 +34,7 @@ class _LoginEmailTabState extends State<LoginEmailTab> {
color: type == ClassType.NUMBER ? Colors.blue : Colors.transparent, color: type == ClassType.NUMBER ? Colors.blue : Colors.transparent,
child: Center( child: Center(
child: Text( child: Text(
"Number", LocaleKeys.number.tr(),
style: TextStyle( style: TextStyle(
color: type == ClassType.NUMBER ? Colors.white : Colors.black, color: type == ClassType.NUMBER ? Colors.white : Colors.black,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
@ -54,7 +56,7 @@ class _LoginEmailTabState extends State<LoginEmailTab> {
color: type == ClassType.EMAIL ? Colors.blue : Colors.transparent, color: type == ClassType.EMAIL ? Colors.blue : Colors.transparent,
child: Center( child: Center(
child: Text( child: Text(
"Email", LocaleKeys.email.tr(),
style: TextStyle( style: TextStyle(
color: type == ClassType.EMAIL ? Colors.white : Colors.black, color: type == ClassType.EMAIL ? Colors.white : Colors.black,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,

@ -1,6 +1,6 @@
{ {
"firstTimeLogIn": "تسجيل الدخول لأول مره", "firstTimeLogIn": "تسجيل الدخول لأول مره",
"signUp": "تسجيل دخول", "signUp": "التسجيل",
"changeMobile": "تغيير رقم الجوال", "changeMobile": "تغيير رقم الجوال",
"notifications": "الاشعارات", "notifications": "الاشعارات",
"general": "عام", "general": "عام",
@ -10,6 +10,7 @@
"retrievePassword" : "استرجاع كلمة المرور", "retrievePassword" : "استرجاع كلمة المرور",
"changeEmail": "تغيير الايميل", "changeEmail": "تغيير الايميل",
"verify": "تحقق", "verify": "تحقق",
"verified": "تم التحقق",
"signOut": "تسجيل خروج", "signOut": "تسجيل خروج",
"enterEmail": "ادخل الايميل", "enterEmail": "ادخل الايميل",
"enterNewEmail": "ادخل ايميل جديد", "enterNewEmail": "ادخل ايميل جديد",
@ -92,6 +93,15 @@
"completeProfile2" : "اكمل الملف الشخصي 2/3", "completeProfile2" : "اكمل الملف الشخصي 2/3",
"completeProfile3" : "اكمل الملف الشخصي 3/3", "completeProfile3" : "اكمل الملف الشخصي 3/3",
"userInformation": "معلومات المتسخدم", "userInformation": "معلومات المتسخدم",
"faceRecognition": "تحقق مع بصمة الوجه",
"fingerPrint" : "تحقق مع بصمة الاصبع",
"whatsapp": "تحقق مع Whatsapp",
"SMS": "رسائل قصيره",
"selectRole" : "حدد الدور",
"userRoleOrTitle" : "عنوان المستخدم",
"codeSentToEmail": "تم ارسال الرمز للايميل",
"number": "موبايل",
"english": "English",
"provider": "Provider", "provider": "Provider",
"title": "Hello", "title": "Hello",
"msg": "Hello {} in the {} world ", "msg": "Hello {} in the {} world ",

@ -10,6 +10,7 @@
"retrievePassword" : "Retrieve Password", "retrievePassword" : "Retrieve Password",
"changeEmail": "Change Email", "changeEmail": "Change Email",
"verify": "Verify", "verify": "Verify",
"verified": "Verified",
"signOut": "Sign Out", "signOut": "Sign Out",
"enterEmail": "Enter Email", "enterEmail": "Enter Email",
"enterNewEmail": "Enter New Email", "enterNewEmail": "Enter New Email",
@ -77,8 +78,8 @@
"address": "Address", "address": "Address",
"branchDescription": "Branch Description", "branchDescription": "Branch Description",
"branchName": "Branch Name", "branchName": "Branch Name",
"chooseCity": "Choose City", "chooseCity": "Select City",
"chooseCountry": "Choose Country", "chooseCountry": "Select Country",
"selectAttachment":"Select Attachment", "selectAttachment":"Select Attachment",
"somethingWrong" : "Something went wrong", "somethingWrong" : "Something went wrong",
"documentsUploaded" : "Documents uploaded successfully", "documentsUploaded" : "Documents uploaded successfully",
@ -93,6 +94,15 @@
"completeProfile3" : "Complete Profile 3/3", "completeProfile3" : "Complete Profile 3/3",
"userInformation": "User Information", "userInformation": "User Information",
"provider": "Provider", "provider": "Provider",
"faceRecognition": "Face Recognition",
"fingerPrint" : "Finger Print",
"whatsapp": "With Whatsapp",
"SMS": "With SMS",
"selectRole" : "Select Role",
"userRoleOrTitle" : "User role or title",
"codeSentToEmail": "Code is sent to email",
"number": "Number",
"english": "عربي",
"title": "Hello", "title": "Hello",
"msg": "Hello {} in the {} world ", "msg": "Hello {} in the {} world ",
"msg_named": "{} are written in the {lang} language", "msg_named": "{} are written in the {lang} language",

Loading…
Cancel
Save