Latest customer app updates

merge-requests/1/merge
devmirza121 3 years ago
parent 227f6df5a3
commit e88b544073

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

@ -7,6 +7,7 @@ import 'package:flutter/foundation.dart';
import 'package:http/http.dart';
import 'package:http/io_client.dart';
import 'client/user_api_client.dart';
typedef FactoryConstructor<U> = U Function(dynamic);
@ -96,13 +97,13 @@ class ApiClient {
}
Future<Response> _postForResponse(
String url,
requestBody, {
String? token,
Map<String, dynamic>? queryParameters,
Map<String, String>? headers,
int retryTimes = 0,
}) async {
String url,
requestBody, {
String? token,
Map<String, dynamic>? queryParameters,
Map<String, String>? headers,
int retryTimes = 0,
}) async {
try {
var _headers = <String, String>{};
if (token != null) {
@ -128,6 +129,11 @@ class ApiClient {
print("res: " + response.body);
}
if (response.statusCode >= 200 && response.statusCode < 500) {
var jsonData = jsonDecode(response.body);
if (jsonData["StatusMessage"] != null && jsonData["StatusMessage"] == "Unauthorized user attempt to access API") {
String mToken = await UserApiClent().UpdateUserToken();
return await _postForResponse(url, requestBody, token: mToken, queryParameters: queryParameters, headers: headers, retryTimes: retryTimes);
}
return response;
} else {
throw _throwAPIException(response);
@ -158,7 +164,7 @@ class ApiClient {
} else {
throw APIException(APIException.OTHER, arguments: e);
}
}catch (ex) {
} catch (ex) {
print("exception1:" + ex.toString());
throw APIException(APIException.BAD_RESPONSE_FORMAT, arguments: ex);
}
@ -206,6 +212,8 @@ class ApiClient {
return await _getForResponse(url, token: token, queryParameters: queryParameters, headers: headers, retryTimes: retryTimes);
}
bool isFirstCall = true;
Future<Response> _getForResponse(String url, {String? token, Map<String, dynamic>? queryParameters, Map<String, String>? headers, int retryTimes = 0}) async {
try {
var _headers = <String, String>{};
@ -218,7 +226,7 @@ class ApiClient {
}
if (queryParameters != null) {
String queryString = new Uri(queryParameters: queryParameters).query;
url = url + '?' + queryString.toString();
if (isFirstCall) url = url + '?' + queryString.toString();
}
if (!kReleaseMode) {
@ -230,7 +238,13 @@ class ApiClient {
if (!kReleaseMode) {
print("res: " + response.body.toString());
}
if (response.statusCode >= 200 && response.statusCode < 300) {
if (response.statusCode >= 200 && response.statusCode < 500) {
var jsonData = jsonDecode(response.body);
if (jsonData["StatusMessage"] != null && jsonData["StatusMessage"] == "Unauthorized user attempt to access API") {
String mToken = await UserApiClent().UpdateUserToken();
isFirstCall = false;
return await _getForResponse(url, token: mToken, queryParameters: queryParameters, headers: headers, retryTimes: retryTimes);
}
return response;
} else {
throw _throwAPIException(response);

@ -1,4 +1,5 @@
import 'dart:async';
import 'dart:convert';
import 'package:car_customer_app/models/user/change_email.dart';
import 'package:car_customer_app/models/user/change_mobile.dart';
import 'package:car_customer_app/models/user/cities.dart';
@ -6,6 +7,8 @@ import 'package:car_customer_app/models/user/confirm_email.dart';
import 'package:car_customer_app/models/user/confirm_mobile.dart';
import 'package:car_customer_app/models/user/country.dart';
import 'package:car_customer_app/models/user/image_response.dart';
import 'package:car_customer_app/models/user/refresh_token.dart';
import 'package:car_customer_app/models/user/refresh_token.dart';
import 'package:car_customer_app/models/user/role.dart';
import 'package:car_customer_app/models/user/confirm_password.dart';
import 'package:car_customer_app/models/user/forget_password_otp_compare.dart';
@ -22,9 +25,10 @@ import 'package:car_customer_app/models/user/register_user.dart';
import '../../classes/app_state.dart';
import '../../models/m_response.dart';
import '../api_client.dart';
import '../../models/user/user.dart';
import '../api_client.dart';
import '../shared_prefrence.dart';
class UserApiClent {
static final UserApiClent _instance = UserApiClent._internal();
@ -49,9 +53,9 @@ class UserApiClent {
Future<RegisterUser> basicComplete(String userId, String firstName, String lastName, String email, String password) async {
var postParams;
if(email.isEmpty){
if (email.isEmpty) {
postParams = {"userID": userId, "firstName": firstName, "lastName": lastName, "companyName": "string", "isEmailVerified": true, "password": password};
}else{
} else {
postParams = {"userID": userId, "firstName": firstName, "lastName": lastName, "email": email, "companyName": "string", "isEmailVerified": true, "password": password};
}
@ -80,13 +84,10 @@ class UserApiClent {
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<RefreshToken> RefreshTokenAPI(String token, String refreshToken) async {
var postParams = {"token": token, "refreshToken": refreshToken};
// String t = AppState().getUser.data!.accessToken ?? "";
return await ApiClient().postJsonForObject((json) => RefreshToken.fromJson(json), ApiConsts.RefreshToken, postParams);
}
Future<Country> getAllCountries() async {
@ -117,7 +118,7 @@ class UserApiClent {
Future<Response> ForgetPasswordOTPCompare(String userToken, String userOTP) async {
var postParams = {"userToken": userToken, "userOTP": userOTP};
return await ApiClient().postJsonForResponse(ApiConsts.ForgetPasswordOTPCompare, postParams);
// return await ApiClient().postJsonForObject((json) => PasswordOTPCompare.fromJson(json), ApiConsts.ForgetPasswordOTPCompare, postParams);
// return await ApiClient().postJsonForObject((json) => PasswordOTPCompare.fromJson(json), ApiConsts.ForgetPasswordOTPCompare, postParams);
}
Future<Response> ForgetPassword(String userToken, String newPassword) async {
@ -139,7 +140,6 @@ class UserApiClent {
String t = AppState().getUser.data!.accessToken ?? "";
print("tokeen " + t);
return await ApiClient().postJsonForObject((json) => MResponse.fromJson(json), ApiConsts.ChangePassword, postParams, token: t);
}
Future<ChangeMobile> ChangeMobileNoOTPRequest(
@ -186,9 +186,7 @@ class UserApiClent {
}
Future<MResponse> EmailVerifyOTPVerify(String userToken, String userOTP) async {
var postParams =
{"userToken": userToken,
"userOTP": userOTP};
var postParams = {"userToken": userToken, "userOTP": userOTP};
String t = AppState().getUser.data!.accessToken ?? "";
return await ApiClient().postJsonForObject((json) => MResponse.fromJson(json), ApiConsts.EmailVerifyOTPVerify, postParams, token: t);
@ -211,4 +209,18 @@ class UserApiClent {
print("tokeen " + t);
return await ApiClient().postJsonForObject((json) => ImageResponse.fromJson(json), ApiConsts.UpdateUserImage, postParams, token: t);
}
Future<String> UpdateUserToken() async {
String token = await SharedPrefManager.getUserToken();
String refreshToken = await SharedPrefManager.getRefreshToken();
RefreshToken refresh = await RefreshTokenAPI(token, refreshToken);
SharedPrefManager.setUserToken(refresh.data!.accessToken ?? "");
SharedPrefManager.setRefreshToken(refresh.data!.refreshToken ?? "");
String mdata = await SharedPrefManager.getData();
UserInfo info = UserInfo.fromJson(jsonDecode(mdata));
User user = new User();
user.data = new UserData(accessToken: refresh.data!.accessToken ?? "", refreshToken: refresh.data!.refreshToken ?? "", userInfo: info);
AppState().setUser = user;
return refresh.data!.accessToken??"";
}
}

@ -7,6 +7,8 @@ class SharedPrefManager {
static String USER_TOKEN = "user.token";
static String USER_NAME = "user.name";
static String PASSWORD = "user.password";
static String REFRESH_TOKEN = "user.refresh.token";
static String DATA = "data";
static Future<SharedPreferences> _prefs = SharedPreferences.getInstance();
@ -49,4 +51,24 @@ class SharedPrefManager {
SharedPreferences prefs = await _prefs;
return prefs.getString(PASSWORD) ?? "";
}
static setRefreshToken(String cookie) async {
final prefs = await SharedPreferences.getInstance();
prefs.setString(REFRESH_TOKEN, cookie) ?? "NA";
}
static Future<String> getRefreshToken() async {
SharedPreferences prefs = await _prefs;
return prefs.getString(REFRESH_TOKEN) ?? "";
}
static setData(String cookie) async {
final prefs = await SharedPreferences.getInstance();
prefs.setString(DATA, cookie) ?? "NA";
}
static Future<String> getData() async {
SharedPreferences prefs = await _prefs;
return prefs.getString(DATA) ?? "";
}
}

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

@ -0,0 +1,65 @@
// To parse this JSON data, do
//
// final refreshToken = refreshTokenFromJson(jsonString);
import 'dart:convert';
RefreshToken refreshTokenFromJson(String str) => RefreshToken.fromJson(json.decode(str));
String refreshTokenToJson(RefreshToken data) => json.encode(data.toJson());
class RefreshToken {
RefreshToken({
this.totalItemsCount,
this.data,
this.messageStatus,
this.message,
});
final dynamic? totalItemsCount;
final RefreshData? data;
final int? messageStatus;
final String? message;
factory RefreshToken.fromJson(Map<String, dynamic> json) => RefreshToken(
totalItemsCount: json["totalItemsCount"],
data: json["data"] == null ? null : RefreshData.fromJson(json["data"]),
messageStatus: json["messageStatus"] == null ? null : json["messageStatus"],
message: json["message"] == null ? null : json["message"],
);
Map<String, dynamic> toJson() => {
"totalItemsCount": totalItemsCount,
"data": data == null ? null : data!.toJson(),
"messageStatus": messageStatus == null ? null : messageStatus,
"message": message == null ? null : message,
};
}
class RefreshData {
RefreshData({
this.accessToken,
this.refreshToken,
this.expiryDate,
this.userInfo,
});
final String? accessToken;
final String? refreshToken;
final DateTime? expiryDate;
final dynamic? userInfo;
factory RefreshData.fromJson(Map<String, dynamic> json) => RefreshData(
accessToken: json["accessToken"] == null ? null : json["accessToken"],
refreshToken: json["refreshToken"] == null ? null : json["refreshToken"],
expiryDate: json["expiryDate"] == null ? null : DateTime.parse(json["expiryDate"]),
userInfo: json["userInfo"],
);
Map<String, dynamic> toJson() => {
"accessToken": accessToken == null ? null : accessToken,
"refreshToken": refreshToken == null ? null : refreshToken,
"expiryDate": expiryDate == null ? null : expiryDate!.toIso8601String(),
"userInfo": userInfo,
};
}

@ -10,62 +10,34 @@ String registerUserToJson(RegisterUser data) => json.encode(data.toJson());
class RegisterUser {
RegisterUser({
this.messageStatus,
this.totalItemsCount,
this.data,
this.messageStatus,
this.message,
});
dynamic? totalItemsCount;
Data? data;
int? messageStatus;
String? message;
final int? messageStatus;
final dynamic? totalItemsCount;
final Data? data;
final String? message;
factory RegisterUser.fromJson(Map<String, dynamic> json) => RegisterUser(
messageStatus: json["messageStatus"] == null ? null : json["messageStatus"],
totalItemsCount: json["totalItemsCount"],
data: Data.fromJson(json["data"]),
messageStatus: json["messageStatus"],
message: json["message"],
data: json["data"] == null ? null : Data.fromJson(json["data"]),
message: json["message"] == null ? null : json["message"],
);
Map<String, dynamic> toJson() => {
"messageStatus": messageStatus == null ? null : messageStatus,
"totalItemsCount": totalItemsCount,
"data": data!.toJson(),
"messageStatus": messageStatus,
"message": message,
"data": data == null ? null : data!.toJson(),
"message": message == null ? null : message,
};
}
class 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.userId,
this.firstName,
@ -81,71 +53,75 @@ class UserInfo {
this.userRoles,
this.isCustomer,
this.isProviderDealership,
this.isProviderIndividual,
this.isDealershipUser,
this.providerId,
this.customerId,
this.dealershipId,
});
int? id;
String? userId;
String? firstName;
String? lastName;
String? mobileNo;
String? email;
String? userImageUrl;
int? roleId;
String? roleName;
bool? isEmailVerified;
List<dynamic>? serviceProviderBranch;
bool? isVerified;
List<dynamic>? userRoles;
bool? isCustomer;
bool? isProviderDealership;
bool? isDealershipUser;
dynamic? providerId;
int? customerId;
dynamic? dealershipId;
final int? id;
final String? userId;
final dynamic? firstName;
final dynamic? lastName;
final String? mobileNo;
final String? email;
final dynamic? userImageUrl;
final int? roleId;
final dynamic? roleName;
final bool? isEmailVerified;
final List<dynamic>? serviceProviderBranch;
final bool? isVerified;
final List<dynamic>? userRoles;
final bool? isCustomer;
final bool? isProviderDealership;
final bool? isProviderIndividual;
final bool? isDealershipUser;
final dynamic? providerId;
final dynamic? customerId;
final dynamic? dealershipId;
factory UserInfo.fromJson(Map<String, dynamic> json) => UserInfo(
id: json["id"],
userId: json["userID"],
factory Data.fromJson(Map<String, dynamic> json) => Data(
id: json["id"] == null ? null : json["id"],
userId: json["userID"] == null ? null : json["userID"],
firstName: json["firstName"],
lastName: json["lastName"],
mobileNo: json["mobileNo"],
email: json["email"],
mobileNo: json["mobileNo"] == null ? null : json["mobileNo"],
email: json["email"] == null ? null : json["email"],
userImageUrl: json["userImageUrl"],
roleId: json["roleID"],
roleId: json["roleID"] == null ? null : json["roleID"],
roleName: json["roleName"],
isEmailVerified: json["isEmailVerified"],
serviceProviderBranch: List<dynamic>.from(json["serviceProviderBranch"].map((x) => x)),
isVerified: json["isVerified"],
userRoles: List<dynamic>.from(json["userRoles"].map((x) => x)),
isCustomer: json["isCustomer"],
isProviderDealership: json["isProviderDealership"],
isDealershipUser: json["isDealershipUser"],
isEmailVerified: json["isEmailVerified"] == null ? null : json["isEmailVerified"],
serviceProviderBranch: json["serviceProviderBranch"] == null ? null : List<dynamic>.from(json["serviceProviderBranch"].map((x) => x)),
isVerified: json["isVerified"] == null ? null : json["isVerified"],
userRoles: json["userRoles"] == null ? null : List<dynamic>.from(json["userRoles"].map((x) => x)),
isCustomer: json["isCustomer"] == null ? null : json["isCustomer"],
isProviderDealership: json["isProviderDealership"] == null ? null : json["isProviderDealership"],
isProviderIndividual: json["isProviderIndividual"] == null ? null : json["isProviderIndividual"],
isDealershipUser: json["isDealershipUser"] == null ? null : json["isDealershipUser"],
providerId: json["providerID"],
customerId: json["customerID"],
dealershipId: json["dealershipID"],
);
Map<String, dynamic> toJson() => {
"id": id,
"userID": userId,
"id": id == null ? null : id,
"userID": userId == null ? null : userId,
"firstName": firstName,
"lastName": lastName,
"mobileNo": mobileNo,
"email": email,
"mobileNo": mobileNo == null ? null : mobileNo,
"email": email == null ? null : email,
"userImageUrl": userImageUrl,
"roleID": roleId,
"roleID": roleId == null ? null : roleId,
"roleName": roleName,
"isEmailVerified": isEmailVerified,
"serviceProviderBranch": List<dynamic>.from(serviceProviderBranch!.map((x) => x)),
"isVerified": isVerified,
"userRoles": List<dynamic>.from(userRoles!.map((x) => x)),
"isCustomer": isCustomer,
"isProviderDealership": isProviderDealership,
"isDealershipUser": isDealershipUser,
"isEmailVerified": isEmailVerified == null ? null : isEmailVerified,
"serviceProviderBranch": serviceProviderBranch == null ? null : List<dynamic>.from(serviceProviderBranch!.map((x) => x)),
"isVerified": isVerified == null ? null : isVerified,
"userRoles": userRoles == null ? null : List<dynamic>.from(userRoles!.map((x) => x)),
"isCustomer": isCustomer == null ? null : isCustomer,
"isProviderDealership": isProviderDealership == null ? null : isProviderDealership,
"isProviderIndividual": isProviderIndividual == null ? null : isProviderIndividual,
"isDealershipUser": isDealershipUser == null ? null : isDealershipUser,
"providerID": providerId,
"customerID": customerId,
"dealershipID": dealershipId,

@ -17,13 +17,13 @@ class User {
});
dynamic totalItemsCount;
Data? data;
UserData? data;
int? messageStatus;
String? message;
factory User.fromJson(Map<String, dynamic> json) => User(
totalItemsCount: json["totalItemsCount"],
data: json["data"] == null ? null : Data.fromJson(json["data"]),
data: json["data"] == null ? null : UserData.fromJson(json["data"]),
messageStatus: json["messageStatus"] == null ? null : json["messageStatus"],
message: json["message"] == null ? null : json["message"],
);
@ -36,8 +36,8 @@ class User {
};
}
class Data {
Data({
class UserData {
UserData({
this.accessToken,
this.refreshToken,
this.expiryDate,
@ -49,7 +49,7 @@ class Data {
DateTime? expiryDate;
UserInfo? userInfo;
factory Data.fromJson(Map<String, dynamic> json) => Data(
factory UserData.fromJson(Map<String, dynamic> json) => UserData(
accessToken: json["accessToken"] == null ? null : json["accessToken"],
refreshToken: json["refreshToken"] == null ? null : json["refreshToken"],
expiryDate: json["expiryDate"] == null ? null : DateTime.parse(json["expiryDate"]),

@ -7,6 +7,7 @@ import 'package:car_customer_app/widgets/show_fill_button.dart';
import 'package:car_customer_app/extensions/int_extensions.dart';
import 'package:car_customer_app/extensions/string_extensions.dart';
import 'package:car_customer_app/extensions/widget_extensions.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:easy_localization/src/public_ext.dart';
import 'package:flutter/material.dart';
@ -143,7 +144,7 @@ class _DashboardPageState extends State<DashboardPage> {
crossAxisAlignment: CrossAxisAlignment.start,
children: [
userName.toText24(),
LocaleKeys.userRoleOrTitle.tr().toText12(),
AppState().getUser.data!.userInfo!.roleName!.toText12(),
],
),
),
@ -157,19 +158,29 @@ class _DashboardPageState extends State<DashboardPage> {
),
),
ListTile(
leading: Icon(Icons.notifications),
leading: Icon(Icons.notifications,color: Colors.blue,),
title: LocaleKeys.notifications.tr().toText12(),
),
ListTile(
leading: Icon(Icons.settings),
leading: Icon(Icons.settings,color: Colors.blue,),
title: LocaleKeys.general.tr().toText12(),
),
ListTile(
leading: Icon(Icons.person),
leading: Icon(Icons.person,color: Colors.blue,),
title: LocaleKeys.account.tr().toText12(),
),
ListTile(
leading: Icon(Icons.logout),
leading: Image.asset("assets/images/ic_world.png",width: 20,height: 20,color: Colors.blue,),
title: LocaleKeys.english.tr().toText12(),
onTap: () {
if (EasyLocalization.of(context)?.currentLocale?.countryCode == "SA")
context.setLocale(const Locale("en", "US"));
else
context.setLocale(const Locale('ar', 'SA'));
},
),
ListTile(
leading: Icon(Icons.logout,color: Colors.blue,),
title: LocaleKeys.signOut.tr().toText12(),
onTap: () {
pop(context);

@ -91,6 +91,7 @@ class _CompleteProfilePageState extends State<CompleteProfilePage> {
isPasswordEnabled: true,
maxLines: 1,
value: password,
isCursorEnd: true,
onChanged: (value) => _checkPassword(value),
// onChanged: (v) {
// password = v;
@ -190,9 +191,9 @@ class _CompleteProfilePageState extends State<CompleteProfilePage> {
Future<void> performCompleteProfile() async {
if (validateStructure(password ?? "")) {
if (password == confirmPassword) {
print(widget.user.data!.userInfo!.userId ?? "userId");
print(widget.user.data!.userId?? "userId");
Utils.showLoading(context);
RegisterUser user = await UserApiClent().basicComplete(widget.user.data?.userInfo!.userId ?? "", firstName!, lastName!, email!, password!);
RegisterUser user = await UserApiClent().basicComplete(widget.user.data!.userId ?? "", firstName!, lastName!, email!, password!);
Utils.hideLoading(context);
if (user.messageStatus == 1) {
Utils.showToast(LocaleKeys.successfullyRegistered.tr());

@ -111,15 +111,15 @@ class LoginMethodSelectionPage extends StatelessWidget {
Utils.hideLoading(context);
RegisterUser verifiedUser = RegisterUser.fromJson(jsonDecode(response2.body));
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));
if(user.data!.userInfo!.roleId==4){
AppState().setUser = user;
SharedPrefManager.setUserToken(user.data!.accessToken ?? "");
SharedPrefManager.setUserId(user.data!.userInfo!.userId ?? "");
SharedPrefManager.setRefreshToken(user.data!.refreshToken??"");
SharedPrefManager.setData(jsonEncode(user.data!.userInfo!.toJson()));
navigateReplaceWithName(context, AppRoutes.dashboard);
}else{
Utils.showToast(LocaleKeys.onlyCustomerApp.tr());

@ -1,16 +1,25 @@
import 'dart:async';
import 'dart:convert';
import 'package:car_customer_app/api/client/user_api_client.dart';
import 'package:car_customer_app/api/shared_prefrence.dart';
import 'package:car_customer_app/classes/utils.dart';
import 'package:car_customer_app/config/routes.dart';
import 'package:car_customer_app/extensions/int_extensions.dart';
import 'package:car_customer_app/extensions/string_extensions.dart';
import 'package:car_customer_app/generated/locale_keys.g.dart';
import 'package:car_customer_app/models/user/user.dart';
import 'package:car_customer_app/utils/navigator.dart';
import 'package:car_customer_app/utils/utils.dart';
import 'package:car_customer_app/extensions/widget_extensions.dart';
import 'package:car_customer_app/widgets/show_fill_button.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:easy_localization/src/public_ext.dart';
import 'package:flutter/material.dart';
import '../../classes/app_state.dart';
import '../../models/user/refresh_token.dart';
class SplashPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
@ -27,16 +36,51 @@ class SplashPage extends StatelessWidget {
navigateWithName(context, AppRoutes.registerSelection);
}),
mFlex(1),
LocaleKeys.alreadySigned.tr().toText(fontSize: 18, isBold: true).onPress(() {
navigateWithName(context, AppRoutes.loginVerification);
LocaleKeys.alreadySigned.tr().toText(fontSize: 18, isBold: true).onPress(() async {
// navigateWithName(context, AppRoutes.loginVerification);
String token = await SharedPrefManager.getUserToken();
String refreshToken = await SharedPrefManager.getRefreshToken();
Utils.showLoading(context);
RefreshToken refresh = await UserApiClent().RefreshTokenAPI(token, refreshToken);
Utils.hideLoading(context);
if (refresh.messageStatus == 1) {
SharedPrefManager.setUserToken(refresh.data!.accessToken ?? "");
SharedPrefManager.setRefreshToken(refresh.data!.refreshToken ?? "");
String mdata = await SharedPrefManager.getData();
print(mdata);
UserInfo info = UserInfo.fromJson(jsonDecode(mdata));
User user = new User();
user.data = new UserData(accessToken: refresh.data!.accessToken ?? "", refreshToken: refresh.data!.refreshToken ?? "", userInfo: info);
AppState().setUser = user;
print(AppState().getUser.data?.userInfo?.roleName);
navigateWithName(context, AppRoutes.dashboard);
} else {
String accessToken = await SharedPrefManager.getUserToken();
String refreshToken = await SharedPrefManager.getRefreshToken();
String mdata = await SharedPrefManager.getData();
UserInfo info = UserInfo.fromJson(jsonDecode(mdata));
User user = new User();
user.data = new UserData(accessToken: accessToken, refreshToken: refreshToken, userInfo: info);
AppState().setUser = user;
print(AppState().getUser.data?.userInfo?.roleName);
navigateWithName(context, AppRoutes.dashboard);
}
}),
35.height,
TextButton(
style: TextButton.styleFrom(
backgroundColor: Colors.white,
),
onPressed: () { },
child: Text( LocaleKeys.english.tr(), ),
onPressed: () {
if (EasyLocalization.of(context)?.currentLocale?.countryCode == "SA")
context.setLocale(const Locale("en", "US"));
else
context.setLocale(const Locale('ar', 'SA'));
},
child: Text(
LocaleKeys.english.tr(),
),
),
mFlex(5),
],

@ -22,6 +22,7 @@ class TxtField extends StatelessWidget {
bool isSidePaddingZero;
bool isNeedBorder;
bool? isPasswordEnabled;
bool isCursorEnd;
Function(String)? onChanged;
TextInputType? keyboardType;
@ -44,11 +45,14 @@ class TxtField extends StatelessWidget {
this.onChanged,
this.isPasswordEnabled,
this.keyboardType,
this.isCursorEnd=false,
});
@override
Widget build(BuildContext context) {
controller.text = value ?? "";
if(isCursorEnd)
controller.selection = TextSelection.fromPosition(TextPosition(offset: controller.text.length));
return InkWell(
onTap: isNeedClickAll == false
? null

@ -231,6 +231,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "0.12.11"
material_color_utilities:
dependency: transitive
description:
name: material_color_utilities
url: "https://pub.dartlang.org"
source: hosted
version: "0.1.3"
meta:
dependency: transitive
description:
@ -494,7 +501,7 @@ packages:
name: test_api
url: "https://pub.dartlang.org"
source: hosted
version: "0.4.3"
version: "0.4.8"
typed_data:
dependency: transitive
description:

@ -1,6 +1,6 @@
{
"firstTimeLogIn" : "First Time Log In",
"signUp": "Sing Up",
"signUp": "Sign Up",
"changeMobile": "Change Mobile",
"notifications": "Notifications",
"general": "General",

Loading…
Cancel
Save