API's Modifications

fatima
devmirza121 4 years ago
parent 2d7ef46d27
commit 560e3663b6

@ -107,7 +107,7 @@ class ApiClient {
var queryString = new Uri(queryParameters: queryParameters).query; var queryString = new Uri(queryParameters: queryParameters).query;
url = url + '?' + queryString; url = url + '?' + queryString;
} }
var response = await _post(Uri.parse(url), body: requestBody, headers: _headers).timeout(Duration(seconds: 15)); var response = await _post(Uri.parse(url), body: requestBody, headers: _headers).timeout(Duration(seconds: 100));
if (!kReleaseMode) { if (!kReleaseMode) {
print("Url:$url"); print("Url:$url");

@ -5,8 +5,8 @@ import 'package:shared_preferences/shared_preferences.dart';
class SharedPrefManager { class SharedPrefManager {
static String USER_ID = "user.id"; static String USER_ID = "user.id";
static String USER_TOKEN = "user.token"; static String USER_TOKEN = "user.token";
static String USER_NAME = "user.name";
static String PASSWORD = "user.password";
static Future<SharedPreferences> _prefs = SharedPreferences.getInstance(); static Future<SharedPreferences> _prefs = SharedPreferences.getInstance();
@ -30,5 +30,23 @@ class SharedPrefManager {
return prefs.getString(USER_TOKEN) ?? ""; return prefs.getString(USER_TOKEN) ?? "";
} }
static setPhoneOrEmail(String cookie) async {
final prefs = await SharedPreferences.getInstance();
prefs.setString(USER_NAME, cookie) ?? "NA";
}
static Future<String> getPhoneOrEmail() async {
SharedPreferences prefs = await _prefs;
return prefs.getString(USER_NAME) ?? "";
}
static setUserPassword(String cookie) async {
final prefs = await SharedPreferences.getInstance();
prefs.setString(PASSWORD, cookie) ?? "NA";
}
static Future<String> getUserPassword() async {
SharedPreferences prefs = await _prefs;
return prefs.getString(PASSWORD) ?? "";
}
} }

@ -16,7 +16,7 @@ class UserApiClent {
factory UserApiClent() => _instance; factory UserApiClent() => _instance;
Future<BasicOtp> basicOtp(String phoneNo,{int otpType=1}) async { Future<BasicOtp> basicOtp(String phoneNo, {int otpType = 1}) async {
var postParams = {"countryID": 1, "userMobileNo": phoneNo, "otpType": otpType, "userRole": 4}; var postParams = {"countryID": 1, "userMobileNo": phoneNo, "otpType": otpType, "userRole": 4};
return await ApiClient().postJsonForObject((json) => BasicOtp.fromJson(json), ApiConsts.BasicOTP, postParams); return await ApiClient().postJsonForObject((json) => BasicOtp.fromJson(json), ApiConsts.BasicOTP, postParams);
} }
@ -30,16 +30,8 @@ class UserApiClent {
return await ApiClient().postJsonForObject((json) => RegisterUser.fromJson(json), ApiConsts.BasicVerify, postParams); return await ApiClient().postJsonForObject((json) => RegisterUser.fromJson(json), ApiConsts.BasicVerify, postParams);
} }
Future<RegisterUser> basicComplete(String userId, String firstName, String lastName,String email,String password) async { Future<RegisterUser> basicComplete(String userId, String firstName, String lastName, String email, String password) async {
var postParams = { var postParams = {"userID": userId, "firstName": firstName, "lastName": lastName, "email": email, "companyName": "string", "isEmailVerified": true, "password": password};
"userID": userId,
"firstName": firstName,
"lastName": lastName,
"email": email,
"companyName": "string",
"isEmailVerified": true,
"password": password
};
return await ApiClient().postJsonForObject((json) => RegisterUser.fromJson(json), ApiConsts.BasicComplete, postParams); return await ApiClient().postJsonForObject((json) => RegisterUser.fromJson(json), ApiConsts.BasicComplete, postParams);
} }
@ -61,10 +53,7 @@ class UserApiClent {
} }
Future<Response> login_V2_OTPVerify(String userToken, String otp) async { Future<Response> login_V2_OTPVerify(String userToken, String otp) async {
var postParams = { var postParams = {"userToken": userToken, "userOTP": otp};
"userToken": userToken,
"userOTP": otp
};
return await ApiClient().postJsonForResponse(ApiConsts.Login_V2_OTPVerify, postParams); return await ApiClient().postJsonForResponse(ApiConsts.Login_V2_OTPVerify, postParams);
} }
} }

@ -0,0 +1,53 @@
// To parse this JSON data, do
//
// final loginPassword = loginPasswordFromJson(jsonString);
import 'dart:convert';
LoginPassword loginPasswordFromJson(String str) => LoginPassword.fromJson(json.decode(str));
String loginPasswordToJson(LoginPassword data) => json.encode(data.toJson());
class LoginPassword {
LoginPassword({
this.totalItemsCount,
this.data,
this.messageStatus,
this.message,
});
dynamic totalItemsCount;
Data? data;
int? messageStatus;
String? message;
factory LoginPassword.fromJson(Map<String, dynamic> json) => LoginPassword(
totalItemsCount: json["totalItemsCount"],
data: json["data"] == null ? null : Data.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 Data {
Data({
this.userToken,
});
String? userToken;
factory Data.fromJson(Map<String, dynamic> json) => Data(
userToken: json["userToken"] == null ? null : json["userToken"],
);
Map<String, dynamic> toJson() => {
"userToken": userToken == null ? null : userToken,
};
}

@ -1,15 +1,43 @@
// To parse this JSON data, do // To parse this JSON data, do
// //
// final user = userFromMap(jsonString); // final user = userFromJson(jsonString);
import 'dart:convert'; import 'dart:convert';
User userFromMap(String str) => User.fromMap(json.decode(str)); User userFromJson(String str) => User.fromJson(json.decode(str));
String userToMap(User data) => json.encode(data.toMap()); String userToJson(User data) => json.encode(data.toJson());
class User { class User {
User({ User({
this.totalItemsCount,
this.data,
this.messageStatus,
this.message,
});
dynamic totalItemsCount;
Data? 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"]),
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 Data {
Data({
this.accessToken, this.accessToken,
this.refreshToken, this.refreshToken,
this.expiryDate, this.expiryDate,
@ -21,18 +49,18 @@ class User {
DateTime? expiryDate; DateTime? expiryDate;
UserInfo? userInfo; UserInfo? userInfo;
factory User.fromMap(Map<String, dynamic> json) => User( factory Data.fromJson(Map<String, dynamic> json) => Data(
accessToken: json["accessToken"] == null ? null : json["accessToken"], accessToken: json["accessToken"] == null ? null : json["accessToken"],
refreshToken: json["refreshToken"] == null ? null : json["refreshToken"], refreshToken: json["refreshToken"] == null ? null : json["refreshToken"],
expiryDate: json["expiryDate"] == null ? null : DateTime.parse(json["expiryDate"]), expiryDate: json["expiryDate"] == null ? null : DateTime.parse(json["expiryDate"]),
userInfo: json["userInfo"] == null ? null : UserInfo.fromMap(json["userInfo"]), userInfo: json["userInfo"] == null ? null : UserInfo.fromJson(json["userInfo"]),
); );
Map<String, dynamic> toMap() => { Map<String, dynamic> toJson() => {
"accessToken": accessToken == null ? null : accessToken, "accessToken": accessToken == null ? null : accessToken,
"refreshToken": refreshToken == null ? null : refreshToken, "refreshToken": refreshToken == null ? null : refreshToken,
"expiryDate": expiryDate == null ? null : expiryDate!.toIso8601String(), "expiryDate": expiryDate == null ? null : expiryDate!.toIso8601String(),
"userInfo": userInfo == null ? null : userInfo!.toMap(), "userInfo": userInfo == null ? null : userInfo!.toJson(),
}; };
} }
@ -52,9 +80,11 @@ class UserInfo {
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;
@ -63,7 +93,7 @@ class UserInfo {
String? lastName; String? lastName;
String? mobileNo; String? mobileNo;
String? email; String? email;
dynamic? userImageUrl; dynamic userImageUrl;
int? roleId; int? roleId;
String? roleName; String? roleName;
bool? isEmailVerified; bool? isEmailVerified;
@ -71,11 +101,13 @@ class UserInfo {
bool? isVerified; bool? isVerified;
List<dynamic>? userRoles; List<dynamic>? userRoles;
bool? isCustomer; bool? isCustomer;
bool? isProvider; bool? isProviderDealership;
dynamic? providerId; bool? isDealershipUser;
dynamic providerId;
int? customerId; int? customerId;
dynamic dealershipId;
factory UserInfo.fromMap(Map<String, dynamic> json) => UserInfo( factory UserInfo.fromJson(Map<String, dynamic> json) => UserInfo(
id: json["id"] == null ? null : json["id"], id: json["id"] == null ? null : json["id"],
userId: json["userID"] == null ? null : json["userID"], userId: json["userID"] == null ? null : json["userID"],
firstName: json["firstName"] == null ? null : json["firstName"], firstName: json["firstName"] == null ? null : json["firstName"],
@ -90,12 +122,14 @@ class UserInfo {
isVerified: json["isVerified"] == null ? null : json["isVerified"], isVerified: json["isVerified"] == null ? null : json["isVerified"],
userRoles: json["userRoles"] == null ? null : List<dynamic>.from(json["userRoles"].map((x) => x)), userRoles: json["userRoles"] == null ? null : List<dynamic>.from(json["userRoles"].map((x) => x)),
isCustomer: json["isCustomer"] == null ? null : json["isCustomer"], isCustomer: json["isCustomer"] == null ? null : json["isCustomer"],
isProvider: json["isProvider"] == null ? null : json["isProvider"], isProviderDealership: json["isProviderDealership"] == null ? null : json["isProviderDealership"],
isDealershipUser: json["isDealershipUser"] == null ? null : json["isDealershipUser"],
providerId: json["providerID"], providerId: json["providerID"],
customerId: json["customerID"] == null ? null : json["customerID"], customerId: json["customerID"] == null ? null : json["customerID"],
dealershipId: json["dealershipID"],
); );
Map<String, dynamic> toMap() => { Map<String, dynamic> toJson() => {
"id": id == null ? null : id, "id": id == null ? null : id,
"userID": userId == null ? null : userId, "userID": userId == null ? null : userId,
"firstName": firstName == null ? null : firstName, "firstName": firstName == null ? null : firstName,
@ -110,8 +144,10 @@ class UserInfo {
"isVerified": isVerified == null ? null : isVerified, "isVerified": isVerified == null ? null : isVerified,
"userRoles": userRoles == null ? null : List<dynamic>.from(userRoles!.map((x) => x)), "userRoles": userRoles == null ? null : List<dynamic>.from(userRoles!.map((x) => x)),
"isCustomer": isCustomer == null ? null : isCustomer, "isCustomer": isCustomer == null ? null : isCustomer,
"isProvider": isProvider == null ? null : isProvider, "isProviderDealership": isProviderDealership == null ? null : isProviderDealership,
"isDealershipUser": isDealershipUser == null ? null : isDealershipUser,
"providerID": providerId, "providerID": providerId,
"customerID": customerId == null ? null : customerId, "customerID": customerId == null ? null : customerId,
"dealershipID": dealershipId,
}; };
} }

@ -1,3 +1,4 @@
import 'package:car_customer_app/api/shared_prefrence.dart';
import 'package:car_customer_app/theme/colors.dart'; import 'package:car_customer_app/theme/colors.dart';
import 'package:car_customer_app/utils/navigator.dart'; import 'package:car_customer_app/utils/navigator.dart';
import 'package:car_customer_app/widgets/app_bar.dart'; import 'package:car_customer_app/widgets/app_bar.dart';
@ -7,7 +8,26 @@ import 'package:car_customer_app/extensions/string_extensions.dart';
import 'package:car_customer_app/extensions/widget_extensions.dart'; import 'package:car_customer_app/extensions/widget_extensions.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
class DashboardPage extends StatelessWidget { class DashboardPage extends StatefulWidget {
@override
State<DashboardPage> createState() => _DashboardPageState();
}
class _DashboardPageState extends State<DashboardPage> {
String userName = "";
@override
void initState() {
// TODO: implement initState
super.initState();
fetchUsername();
}
fetchUsername() async {
userName = await SharedPrefManager.getPhoneOrEmail();
setState(() {});
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
@ -49,7 +69,7 @@ class DashboardPage extends StatelessWidget {
mainAxisAlignment: MainAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
"User Name".toText24(), userName.toText24(),
"User role or title".toText12(), "User role or title".toText12(),
], ],
), ),

@ -1,5 +1,6 @@
import 'package:car_customer_app/api/user_api_client.dart'; import 'package:car_customer_app/api/user_api_client.dart';
import 'package:car_customer_app/classes/utils.dart'; import 'package:car_customer_app/classes/utils.dart';
import 'package:car_customer_app/config/routes.dart';
import 'package:car_customer_app/models/user/basic_otp.dart'; import 'package:car_customer_app/models/user/basic_otp.dart';
import 'package:car_customer_app/models/user/register_user.dart'; import 'package:car_customer_app/models/user/register_user.dart';
import 'package:car_customer_app/utils/navigator.dart'; import 'package:car_customer_app/utils/navigator.dart';
@ -71,6 +72,8 @@ class _CompleteProfilePageState extends State<CompleteProfilePage> {
12.height, 12.height,
TxtField( TxtField(
hint: "Create Password", hint: "Create Password",
isPasswordEnabled: true,
maxLines: 1,
onChanged: (v) { onChanged: (v) {
password = v; password = v;
}, },
@ -78,6 +81,8 @@ class _CompleteProfilePageState extends State<CompleteProfilePage> {
12.height, 12.height,
TxtField( TxtField(
hint: "Confirm Password", hint: "Confirm Password",
isPasswordEnabled: true,
maxLines: 1,
onChanged: (v) { onChanged: (v) {
confirmPassword = v; confirmPassword = v;
}, },
@ -112,7 +117,8 @@ class _CompleteProfilePageState extends State<CompleteProfilePage> {
Utils.hideLoading(context); Utils.hideLoading(context);
if (user.messageStatus == 1) { if (user.messageStatus == 1) {
Utils.showToast(user.message ?? ""); Utils.showToast(user.message ?? "");
pop(context);
navigateReplaceWithName(context, AppRoutes.dashboard,arguments: user);
} else { } else {
Utils.showToast(user.message ?? ""); Utils.showToast(user.message ?? "");
} }

@ -5,6 +5,8 @@ import 'package:car_customer_app/api/user_api_client.dart';
import 'package:car_customer_app/classes/utils.dart'; import 'package:car_customer_app/classes/utils.dart';
import 'package:car_customer_app/config/constants.dart'; import 'package:car_customer_app/config/constants.dart';
import 'package:car_customer_app/config/routes.dart'; import 'package:car_customer_app/config/routes.dart';
import 'package:car_customer_app/models/user/login_password.dart';
import 'package:car_customer_app/models/user/register_user.dart';
import 'package:car_customer_app/models/user/user.dart'; import 'package:car_customer_app/models/user/user.dart';
import 'package:car_customer_app/utils/navigator.dart'; import 'package:car_customer_app/utils/navigator.dart';
import 'package:car_customer_app/utils/utils.dart'; import 'package:car_customer_app/utils/utils.dart';
@ -96,27 +98,27 @@ class LoginMethodSelectionPage extends StatelessWidget {
Utils.showLoading(context); Utils.showLoading(context);
Response response = await UserApiClent().login_V2_OTP(userToken, "1"); Response response = await UserApiClent().login_V2_OTP(userToken, "1");
Utils.hideLoading(context); Utils.hideLoading(context);
if (response.statusCode == 200) { LoginPassword user = LoginPassword.fromJson(jsonDecode(response.body));
String userToken = jsonDecode(response.body)["token"]; if (user.messageStatus == 1) {
showMDialog(context, child: OtpDialog( showMDialog(context, child: OtpDialog(
onClick: (String code) async { onClick: (String code) async {
pop(context); pop(context);
Utils.showLoading(context); Utils.showLoading(context);
Response response2 = await UserApiClent().login_V2_OTPVerify(userToken, code); Response response2 = await UserApiClent().login_V2_OTPVerify(user.data!.userToken??"", code);
Utils.hideLoading(context); Utils.hideLoading(context);
if (response2.statusCode == 200) { RegisterUser verifiedUser = RegisterUser.fromJson(jsonDecode(response2.body));
User user = User.fromMap(jsonDecode(response2.body)); if (verifiedUser.messageStatus == 1) {
SharedPrefManager.setUserToken(user.accessToken ?? ""); User user = User.fromJson(jsonDecode(response2.body));
SharedPrefManager.setUserId(user.userInfo!.userId ?? ""); SharedPrefManager.setUserToken(user.data!.accessToken ?? "");
navigateWithName(context, AppRoutes.dashboard); SharedPrefManager.setUserId(user.data!.userInfo!.userId ?? "");
navigateReplaceWithName(context, AppRoutes.dashboard);
} else { } else {
Utils.showToast("Something went wrong"); Utils.showToast(verifiedUser.message??"");
} }
}, },
)); ));
} else { } else {
String res = jsonDecode(response.body)["errors"][0] ?? ""; Utils.showToast(user.message ?? "");
Utils.showToast(res);
} }
} }
} }

@ -5,6 +5,8 @@ import 'package:car_customer_app/api/user_api_client.dart';
import 'package:car_customer_app/classes/utils.dart'; import 'package:car_customer_app/classes/utils.dart';
import 'package:car_customer_app/config/constants.dart'; import 'package:car_customer_app/config/constants.dart';
import 'package:car_customer_app/config/routes.dart'; import 'package:car_customer_app/config/routes.dart';
import 'package:car_customer_app/models/user/login_password.dart';
import 'package:car_customer_app/models/user/register_user.dart';
import 'package:car_customer_app/models/user/user.dart'; import 'package:car_customer_app/models/user/user.dart';
import 'package:car_customer_app/utils/navigator.dart'; import 'package:car_customer_app/utils/navigator.dart';
import 'package:car_customer_app/utils/utils.dart'; import 'package:car_customer_app/utils/utils.dart';
@ -20,7 +22,64 @@ import 'package:car_customer_app/widgets/txt_field.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:http/http.dart'; import 'package:http/http.dart';
class LoginVerificationPage extends StatelessWidget { class LoginVerificationPage extends StatefulWidget {
@override
State<LoginVerificationPage> createState() => _LoginVerificationPageState();
}
class _LoginVerificationPageState extends State<LoginVerificationPage> {
String userToken = "";
@override
void initState() {
// TODO: implement initState
super.initState();
performApiCall();
}
performApiCall() async {
String userName = await SharedPrefManager.getPhoneOrEmail();
String password = await SharedPrefManager.getUserPassword();
if (userName.isNotEmpty && userName.isNotEmpty) {
Utils.showLoading(context);
Response response = await UserApiClent().login_V1(userName, password);
Utils.hideLoading(context);
LoginPassword user = LoginPassword.fromJson(jsonDecode(response.body));
if (user.messageStatus == 1) {
userToken = user.data!.userToken ?? "";
// navigateWithName(context, AppRoutes.loginMethodSelection, arguments: user.data!.userToken);
} else {
Utils.showToast(user.message ?? "");
}
}
}
Future<void> performBasicOtp(BuildContext context, String userToken) async {
Utils.showLoading(context);
Response response = await UserApiClent().login_V2_OTP(userToken, "1");
Utils.hideLoading(context);
LoginPassword user = LoginPassword.fromJson(jsonDecode(response.body));
if (user.messageStatus == 1) {
showMDialog(context, child: OtpDialog(
onClick: (String code) async {
pop(context);
Utils.showLoading(context);
Response response2 = await UserApiClent().login_V2_OTPVerify(user.data!.userToken ?? "", code);
Utils.hideLoading(context);
RegisterUser verifiedUser = RegisterUser.fromJson(jsonDecode(response2.body));
if (verifiedUser.messageStatus == 1) {
User user = User.fromJson(jsonDecode(response2.body));
navigateReplaceWithName(context, AppRoutes.dashboard);
} else {
Utils.showToast(verifiedUser.message ?? "");
}
},
));
} else {
Utils.showToast(user.message ?? "");
}
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
@ -32,14 +91,13 @@ class LoginVerificationPage extends StatelessWidget {
child: Column( child: Column(
children: [ children: [
"Verify Account".toText24(), "Verify Account".toText24(),
mFlex(2), mFlex(2),
Row( Row(
children: [ children: [
Expanded( Expanded(
child: ShowImageButton( child: ShowImageButton(
onClick: () { onClick: () {
performBasicOtp(context); performBasicOtp(context, userToken);
}, },
title: 'Finger Print', title: 'Finger Print',
icon: icons + "ic_fingerprint.png", icon: icons + "ic_fingerprint.png",
@ -49,7 +107,7 @@ class LoginVerificationPage extends StatelessWidget {
Expanded( Expanded(
child: ShowImageButton( child: ShowImageButton(
onClick: () { onClick: () {
performBasicOtp(context); performBasicOtp(context, userToken);
}, },
title: 'Face Recognition', title: 'Face Recognition',
icon: icons + "ic_face_id.png", icon: icons + "ic_face_id.png",
@ -57,13 +115,13 @@ class LoginVerificationPage extends StatelessWidget {
), ),
], ],
), ),
40.height, 40.height,
Row( Row(
children: [ children: [
Expanded( Expanded(
child: ShowImageButton( child: ShowImageButton(
onClick: () { onClick: () {
performBasicOtp(context); performBasicOtp(context, userToken);
}, },
title: 'With SMS', title: 'With SMS',
icon: icons + "ic_sms.png", icon: icons + "ic_sms.png",
@ -73,7 +131,7 @@ class LoginVerificationPage extends StatelessWidget {
Expanded( Expanded(
child: ShowImageButton( child: ShowImageButton(
onClick: () { onClick: () {
performBasicOtp(context); performBasicOtp(context, userToken);
}, },
title: 'With Whatsapp', title: 'With Whatsapp',
icon: icons + "ic_whatsapp.png", icon: icons + "ic_whatsapp.png",
@ -88,32 +146,32 @@ class LoginVerificationPage extends StatelessWidget {
); );
} }
Future<void> performBasicOtp(BuildContext context) async { // Future<void> performBasicOtp(BuildContext context) async {
Utils.showLoading(context); // Utils.showLoading(context);
String userToken=await SharedPrefManager.getUserToken(); // String userToken=await SharedPrefManager.getUserToken();
Response response = await UserApiClent().login_V2_OTP(userToken, "1"); // Response response = await UserApiClent().login_V2_OTP(userToken, "1");
Utils.hideLoading(context); // Utils.hideLoading(context);
if (response.statusCode == 200) { // if (response.statusCode == 200) {
String userToken = jsonDecode(response.body)["token"]; // String userToken = jsonDecode(response.body)["token"];
showMDialog(context, child: OtpDialog( // showMDialog(context, child: OtpDialog(
onClick: (String code) async { // onClick: (String code) async {
pop(context); // pop(context);
Utils.showLoading(context); // Utils.showLoading(context);
Response response2 = await UserApiClent().login_V2_OTPVerify(userToken, code); // Response response2 = await UserApiClent().login_V2_OTPVerify(userToken, code);
Utils.hideLoading(context); // Utils.hideLoading(context);
if (response2.statusCode == 200) { // if (response2.statusCode == 200) {
User user = User.fromMap(jsonDecode(response2.body)); // User user = User.fromJson(jsonDecode(response2.body));
SharedPrefManager.setUserToken(user.accessToken ?? ""); // SharedPrefManager.setUserToken(user.data!.accessToken ?? "");
SharedPrefManager.setUserId(user.userInfo!.userId ?? ""); // SharedPrefManager.setUserId(user.data!.userInfo!.userId ?? "");
navigateWithName(context, AppRoutes.dashboard); // navigateWithName(context, AppRoutes.dashboard);
} else { // } else {
Utils.showToast("Something went wrong"); // Utils.showToast("Something went wrong");
} // }
}, // },
)); // ));
} else { // } else {
String res = jsonDecode(response.body)["errors"][0] ?? ""; // String res = jsonDecode(response.body)["errors"][0] ?? "";
Utils.showToast(res); // Utils.showToast(res);
} // }
} // }
} }

@ -34,7 +34,8 @@ class LoginVerifyAccountPage extends StatelessWidget {
"Verify Account".toText24(), "Verify Account".toText24(),
mFlex(1), mFlex(1),
TxtField( TxtField(
hint: "Enter Phone number to verify", hint: "966501234567",
value: phoneNum,
onChanged: (v) { onChanged: (v) {
phoneNum = v; phoneNum = v;
}, },
@ -126,6 +127,7 @@ class LoginVerifyAccountPage extends StatelessWidget {
child: MessageDialog( child: MessageDialog(
title: "Phone Number Verified", title: "Phone Number Verified",
onClick: () { onClick: () {
pop(context);
navigateWithName(context, AppRoutes.completeProfile,arguments: user); navigateWithName(context, AppRoutes.completeProfile,arguments: user);
}, },
), ),

@ -1,10 +1,12 @@
import 'dart:convert'; import 'dart:convert';
import 'package:car_customer_app/api/shared_prefrence.dart';
import 'package:car_customer_app/api/user_api_client.dart'; import 'package:car_customer_app/api/user_api_client.dart';
import 'package:car_customer_app/classes/utils.dart'; import 'package:car_customer_app/classes/utils.dart';
import 'package:car_customer_app/config/constants.dart'; import 'package:car_customer_app/config/constants.dart';
import 'package:car_customer_app/config/routes.dart'; import 'package:car_customer_app/config/routes.dart';
import 'package:car_customer_app/models/user/basic_otp.dart'; import 'package:car_customer_app/models/user/basic_otp.dart';
import 'package:car_customer_app/models/user/login_password.dart';
import 'package:car_customer_app/models/user/register_user.dart'; import 'package:car_customer_app/models/user/register_user.dart';
import 'package:car_customer_app/utils/navigator.dart'; import 'package:car_customer_app/utils/navigator.dart';
import 'package:car_customer_app/utils/utils.dart'; import 'package:car_customer_app/utils/utils.dart';
@ -38,7 +40,8 @@ class LoginWithPassword extends StatelessWidget {
"Login".toText24(), "Login".toText24(),
mFlex(1), mFlex(1),
TxtField( TxtField(
hint: "Enter Phone number to verify", hint: "966501234567",
value: phoneNum,
onChanged: (v) { onChanged: (v) {
phoneNum = v; phoneNum = v;
}, },
@ -46,6 +49,9 @@ class LoginWithPassword extends StatelessWidget {
12.height, 12.height,
TxtField( TxtField(
hint: "Password", hint: "Password",
value: password,
isPasswordEnabled: true,
maxLines: 1,
onChanged: (v) { onChanged: (v) {
password = v; password = v;
}, },
@ -69,12 +75,13 @@ class LoginWithPassword extends StatelessWidget {
Utils.showLoading(context); Utils.showLoading(context);
Response response = await UserApiClent().login_V1(phoneNum, password); Response response = await UserApiClent().login_V1(phoneNum, password);
Utils.hideLoading(context); Utils.hideLoading(context);
if (response.statusCode == 200) { LoginPassword user = LoginPassword.fromJson(jsonDecode(response.body));
String userToken = jsonDecode(response.body)["userToken"]; if (user.messageStatus == 1) {
navigateWithName(context, AppRoutes.loginMethodSelection, arguments: userToken); SharedPrefManager.setPhoneOrEmail(phoneNum);
SharedPrefManager.setUserPassword(password);
navigateReplaceWithName(context, AppRoutes.loginMethodSelection, arguments: user.data!.userToken);
} else { } else {
String res = jsonDecode(response.body)["errors"][0] ?? ""; Utils.showToast(user.message ?? "");
Utils.showToast(res);
} }
} }
} }

@ -1,6 +1,7 @@
import 'package:car_customer_app/api/api_client.dart'; import 'package:car_customer_app/api/api_client.dart';
import 'package:car_customer_app/api/user_api_client.dart'; import 'package:car_customer_app/api/user_api_client.dart';
import 'package:car_customer_app/classes/utils.dart'; import 'package:car_customer_app/classes/utils.dart';
import 'package:car_customer_app/config/routes.dart';
import 'package:car_customer_app/models/user/basic_otp.dart'; import 'package:car_customer_app/models/user/basic_otp.dart';
import 'package:car_customer_app/models/user/register_user.dart'; import 'package:car_customer_app/models/user/register_user.dart';
import 'package:car_customer_app/utils/navigator.dart'; import 'package:car_customer_app/utils/navigator.dart';
@ -63,6 +64,7 @@ class RegisterPage extends StatelessWidget {
Utils.hideLoading(context); Utils.hideLoading(context);
if (user.messageStatus == 1) { if (user.messageStatus == 1) {
Utils.showToast(user.message ?? ""); Utils.showToast(user.message ?? "");
navigateReplaceWithName(context, AppRoutes.completeProfile,arguments: user);
} else { } else {
Utils.showToast(user.message ?? ""); Utils.showToast(user.message ?? "");
} }

@ -4,6 +4,11 @@ navigateWithName(BuildContext context, String routeName, {Object? arguments}) {
Navigator.pushNamed(context, routeName, arguments: arguments); Navigator.pushNamed(context, routeName, arguments: arguments);
} }
navigateReplaceWithName(BuildContext context, String routeName, {Object? arguments}) {
Navigator.pushReplacementNamed(context, routeName, arguments: arguments);
}
pop(BuildContext context) { pop(BuildContext context) {
Navigator.of(context).pop(); Navigator.of(context).pop();
} }

@ -7,7 +7,7 @@ import 'package:sizer/sizer.dart';
class TxtField extends StatelessWidget { class TxtField extends StatelessWidget {
TextEditingController controller = new TextEditingController(); TextEditingController controller = new TextEditingController();
String? title; String? value;
String? hint; String? hint;
String? lable; String? lable;
IconData? prefixData; IconData? prefixData;
@ -21,10 +21,12 @@ class TxtField extends StatelessWidget {
int? maxLines; int? maxLines;
bool isSidePaddingZero; bool isSidePaddingZero;
bool isNeedBorder; bool isNeedBorder;
bool? isPasswordEnabled;
Function(String)? onChanged; Function(String)? onChanged;
TxtField({ TxtField({
this.title, this.value,
this.lable, this.lable,
this.hint, this.hint,
this.prefixData, this.prefixData,
@ -39,11 +41,12 @@ class TxtField extends StatelessWidget {
this.isSidePaddingZero=false, this.isSidePaddingZero=false,
this.isNeedBorder=true, this.isNeedBorder=true,
this.onChanged, this.onChanged,
this.isPasswordEnabled,
}); });
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
controller.text = title ?? ""; controller.text = value ?? "";
return InkWell( return InkWell(
onTap: isNeedClickAll == false onTap: isNeedClickAll == false
? null ? null
@ -63,6 +66,7 @@ class TxtField extends StatelessWidget {
enabled: isNeedClickAll == true ? false : true, enabled: isNeedClickAll == true ? false : true,
maxLines: maxLines, maxLines: maxLines,
onTap: () {}, onTap: () {},
obscureText: isPasswordEnabled??false,
onChanged: onChanged, onChanged: onChanged,
decoration: InputDecoration( decoration: InputDecoration(
labelText: lable, labelText: lable,

Loading…
Cancel
Save