API's Modifications

fatima
devmirza121 4 years ago
parent 0c5e325d80
commit 3df3a48d14

@ -1,6 +1,9 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android" <manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.car_provider_app"> package="com.example.car_provider_app">
<application
<uses-permission android:name="android.permission.INTERNET" />
<application
android:label="car_provider_app" android:label="car_provider_app"
android:icon="@mipmap/ic_launcher"> android:icon="@mipmap/ic_launcher">
<activity <activity

@ -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,8 +16,8 @@ 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": 5}; 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);
} }
} }

@ -43,7 +43,7 @@ class AppRoutes {
loginVerification: (context) => LoginVerificationPage(), loginVerification: (context) => LoginVerificationPage(),
loginWithPassword: (context) => LoginWithPassword(), loginWithPassword: (context) => LoginWithPassword(),
loginMethodSelection: (context) => LoginMethodSelectionPage(ModalRoute.of(context)!.settings.arguments as String), loginMethodSelection: (context) => LoginMethodSelectionPage(ModalRoute.of(context)!.settings.arguments as String),
completeProfile: (context) => CompleteProfilePage(), completeProfile: (context) => CompleteProfilePage(ModalRoute.of(context)!.settings.arguments as RegisterUser),
profile1: (context) => Profile1Page(), profile1: (context) => Profile1Page(),
profile2: (context) => Profile2Page(), profile2: (context) => Profile2Page(),
profile3: (context) => Profile3Page(), profile3: (context) => Profile3Page(),

@ -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,11 +1,33 @@
import 'package:car_provider_app/api/shared_prefrence.dart';
import 'package:car_provider_app/theme/colors.dart'; import 'package:car_provider_app/theme/colors.dart';
import 'package:car_provider_app/utils/navigator.dart'; import 'package:car_provider_app/utils/navigator.dart';
import 'package:car_provider_app/widgets/app_bar.dart'; import 'package:car_provider_app/widgets/app_bar.dart';
import 'package:car_provider_app/widgets/extensions/string_extensions.dart';
import 'package:car_provider_app/widgets/show_fill_button.dart'; import 'package:car_provider_app/widgets/show_fill_button.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/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(
@ -15,7 +37,7 @@ class DashboardPage extends StatelessWidget {
drawer: showDrawer(context), drawer: showDrawer(context),
body: Container( body: Container(
child: Center( child: Center(
child: "Dashboard/Main Page".toText22(), child: "Dashboard/Main Page".toText24(),
), ),
), ),
); );
@ -47,8 +69,8 @@ class DashboardPage extends StatelessWidget {
mainAxisAlignment: MainAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
"User Name".toText16(), userName.toText24(),
"User role or title".toText14(), "User role or title".toText12(),
], ],
), ),
), ),
@ -61,19 +83,19 @@ class DashboardPage extends StatelessWidget {
), ),
ListTile( ListTile(
leading: Icon(Icons.notifications), leading: Icon(Icons.notifications),
title: "Notifications".toText14(), title: "Notifications".toText12(),
), ),
ListTile( ListTile(
leading: Icon(Icons.settings), leading: Icon(Icons.settings),
title: "General".toText14(), title: "General".toText12(),
), ),
ListTile( ListTile(
leading: Icon(Icons.person), leading: Icon(Icons.person),
title: "Account".toText14(), title: "Account".toText12(),
), ),
ListTile( ListTile(
leading: Icon(Icons.logout), leading: Icon(Icons.logout),
title: "Sign Out".toText14(), title: "Sign Out".toText12(),
onTap: () { onTap: () {
pop(context); pop(context);
pop(context); pop(context);

@ -1,11 +1,39 @@
import 'package:car_provider_app/api/user_api_client.dart';
import 'package:car_provider_app/classes/utils.dart';
import 'package:car_provider_app/config/routes.dart';
import 'package:car_provider_app/models/user/basic_otp.dart';
import 'package:car_provider_app/models/user/register_user.dart';
import 'package:car_provider_app/utils/navigator.dart';
import 'package:car_provider_app/utils/utils.dart';
import 'package:car_provider_app/widgets/app_bar.dart'; import 'package:car_provider_app/widgets/app_bar.dart';
import 'package:car_provider_app/widgets/extensions/int_extensions.dart'; import 'package:car_provider_app/widgets/dialog/dialogs.dart';
import 'package:car_provider_app/widgets/extensions/string_extensions.dart'; import 'package:car_provider_app/widgets/dialog/message_dialog.dart';
import 'package:car_provider_app/widgets/dialog/otp_dialog.dart';
import 'package:car_provider_app/widgets/show_fill_button.dart'; import 'package:car_provider_app/widgets/show_fill_button.dart';
import 'package:car_provider_app/extensions/widget_extensions.dart';
import 'package:car_provider_app/extensions/int_extensions.dart';
import 'package:car_provider_app/extensions/string_extensions.dart';
import 'package:car_provider_app/widgets/txt_field.dart'; import 'package:car_provider_app/widgets/txt_field.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
class CompleteProfilePage extends StatelessWidget { class CompleteProfilePage extends StatefulWidget {
RegisterUser user;
CompleteProfilePage(this.user);
@override
State<CompleteProfilePage> createState() => _CompleteProfilePageState();
}
class _CompleteProfilePageState extends State<CompleteProfilePage> {
String? firstName = "", lastName = "", email = "", password = "", confirmPassword = "";
@override
void initState() {
// TODO: implement initState
super.initState();
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
@ -18,38 +46,60 @@ class CompleteProfilePage extends StatelessWidget {
padding: EdgeInsets.all(40), padding: EdgeInsets.all(40),
child: Column( child: Column(
children: [ children: [
"Complete Profile".toText16(), "Complete Profile".toText24(),
12.height, 12.height,
TxtField( TxtField(
hint: "First Name", hint: "First Name",
onChanged: (v) {
firstName = v;
},
), ),
12.height, 12.height,
TxtField( TxtField(
hint: "Surname", hint: "Surname",
onChanged: (v) {
lastName = v;
},
), ),
12.height, 12.height,
TxtField( TxtField(
hint: "Email", hint: "Email",
onChanged: (v) {
email = v;
},
), ),
12.height, 12.height,
TxtField( TxtField(
hint: "Create Password", hint: "Create Password",
isPasswordEnabled: true,
maxLines: 1,
onChanged: (v) {
password = v;
},
), ),
12.height, 12.height,
TxtField( TxtField(
hint: "Confirm Password", hint: "Confirm Password",
isPasswordEnabled: true,
maxLines: 1,
onChanged: (v) {
confirmPassword = v;
},
), ),
12.height, // 12.height,
TxtField( // TxtField(
hint: "Phone Number", // hint: "Phone Number",
), // ),
50.height, 50.height,
"By creating an account you agree to our Terms of Service and Privacy Policy".toText14(), "By creating an account you agree to our Terms of Service and Privacy Policy".toText12(),
16.height, 16.height,
ShowFillButton( ShowFillButton(
title: "Continue", title: "Continue",
width: double.infinity, width: double.infinity,
onPressed: () {}, onPressed: () {
performCompleteProfile();
},
), ),
], ],
), ),
@ -58,4 +108,22 @@ class CompleteProfilePage extends StatelessWidget {
), ),
); );
} }
Future<void> performCompleteProfile() async {
if (password == confirmPassword) {
print(widget.user.data!.userId??"userId");
Utils.showLoading(context);
RegisterUser user = await UserApiClent().basicComplete(widget.user.data?.userId ?? "", firstName!, lastName!, email!, password!);
Utils.hideLoading(context);
if (user.messageStatus == 1) {
Utils.showToast(user.message ?? "");
pop(context);
navigateReplaceWithName(context, AppRoutes.dashboard,arguments: user);
} else {
Utils.showToast(user.message ?? "");
}
} else {
Utils.showToast("Please enter same password");
}
}
} }

@ -5,6 +5,8 @@ import 'package:car_provider_app/api/user_api_client.dart';
import 'package:car_provider_app/classes/utils.dart'; import 'package:car_provider_app/classes/utils.dart';
import 'package:car_provider_app/config/constants.dart'; import 'package:car_provider_app/config/constants.dart';
import 'package:car_provider_app/config/routes.dart'; import 'package:car_provider_app/config/routes.dart';
import 'package:car_provider_app/models/user/login_password.dart';
import 'package:car_provider_app/models/user/register_user.dart';
import 'package:car_provider_app/models/user/user.dart'; import 'package:car_provider_app/models/user/user.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';
@ -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_provider_app/api/user_api_client.dart';
import 'package:car_provider_app/classes/utils.dart'; import 'package:car_provider_app/classes/utils.dart';
import 'package:car_provider_app/config/constants.dart'; import 'package:car_provider_app/config/constants.dart';
import 'package:car_provider_app/config/routes.dart'; import 'package:car_provider_app/config/routes.dart';
import 'package:car_provider_app/models/user/login_password.dart';
import 'package:car_provider_app/models/user/register_user.dart';
import 'package:car_provider_app/models/user/user.dart'; import 'package:car_provider_app/models/user/user.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';
@ -20,7 +22,64 @@ import 'package:car_provider_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,7 +127,8 @@ class LoginVerifyAccountPage extends StatelessWidget {
child: MessageDialog( child: MessageDialog(
title: "Phone Number Verified", title: "Phone Number Verified",
onClick: () { onClick: () {
navigateWithName(context, AppRoutes.completeProfile,arguments: user); pop(context);
navigateWithName(context, AppRoutes.profile1,arguments: user);
}, },
), ),
); );

@ -1,10 +1,12 @@
import 'dart:convert'; import 'dart:convert';
import 'package:car_provider_app/api/shared_prefrence.dart';
import 'package:car_provider_app/api/user_api_client.dart'; import 'package:car_provider_app/api/user_api_client.dart';
import 'package:car_provider_app/classes/utils.dart'; import 'package:car_provider_app/classes/utils.dart';
import 'package:car_provider_app/config/constants.dart'; import 'package:car_provider_app/config/constants.dart';
import 'package:car_provider_app/config/routes.dart'; import 'package:car_provider_app/config/routes.dart';
import 'package:car_provider_app/models/user/basic_otp.dart'; import 'package:car_provider_app/models/user/basic_otp.dart';
import 'package:car_provider_app/models/user/login_password.dart';
import 'package:car_provider_app/models/user/register_user.dart'; import 'package:car_provider_app/models/user/register_user.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';
@ -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_provider_app/api/api_client.dart'; import 'package:car_provider_app/api/api_client.dart';
import 'package:car_provider_app/api/user_api_client.dart'; import 'package:car_provider_app/api/user_api_client.dart';
import 'package:car_provider_app/classes/utils.dart'; import 'package:car_provider_app/classes/utils.dart';
import 'package:car_provider_app/config/routes.dart';
import 'package:car_provider_app/models/user/basic_otp.dart'; import 'package:car_provider_app/models/user/basic_otp.dart';
import 'package:car_provider_app/models/user/register_user.dart'; import 'package:car_provider_app/models/user/register_user.dart';
import 'package:car_provider_app/utils/navigator.dart'; import 'package:car_provider_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,10 @@ 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