diff --git a/assets/fonts/Poppins-Medium.ttf b/assets/fonts/Poppins-Medium.ttf deleted file mode 100644 index 6bcdcc2..0000000 Binary files a/assets/fonts/Poppins-Medium.ttf and /dev/null differ diff --git a/assets/icons/Group 17.png b/assets/icons/Group 17.png deleted file mode 100644 index 7bb404a..0000000 Binary files a/assets/icons/Group 17.png and /dev/null differ diff --git a/assets/icons/ic_ads.svg b/assets/icons/ic_ads.svg deleted file mode 100644 index dad55fd..0000000 --- a/assets/icons/ic_ads.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/assets/icons/ic_appoinments.svg b/assets/icons/ic_appoinments.svg deleted file mode 100644 index ebf91e9..0000000 --- a/assets/icons/ic_appoinments.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/assets/icons/ic_branches.svg b/assets/icons/ic_branches.svg deleted file mode 100644 index c0ba51c..0000000 --- a/assets/icons/ic_branches.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/assets/icons/ic_branchs.svg b/assets/icons/ic_branchs.svg deleted file mode 100644 index d074656..0000000 --- a/assets/icons/ic_branchs.svg +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/assets/icons/ic_close_account.svg b/assets/icons/ic_close_account.svg deleted file mode 100644 index 93adb61..0000000 --- a/assets/icons/ic_close_account.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/assets/icons/ic_face.svg b/assets/icons/ic_face.svg deleted file mode 100644 index 5fa9a9c..0000000 --- a/assets/icons/ic_face.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/assets/icons/ic_face_id.png b/assets/icons/ic_face_id.png deleted file mode 100644 index 913e850..0000000 Binary files a/assets/icons/ic_face_id.png and /dev/null differ diff --git a/assets/icons/ic_fingerprint.png b/assets/icons/ic_fingerprint.png deleted file mode 100644 index bf73197..0000000 Binary files a/assets/icons/ic_fingerprint.png and /dev/null differ diff --git a/assets/icons/ic_fingerprint.svg b/assets/icons/ic_fingerprint.svg deleted file mode 100644 index ba45417..0000000 --- a/assets/icons/ic_fingerprint.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/assets/icons/ic_home.svg b/assets/icons/ic_home.svg deleted file mode 100644 index 758dd1b..0000000 --- a/assets/icons/ic_home.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/assets/icons/ic_provider.svg b/assets/icons/ic_provider.svg deleted file mode 100644 index e22c356..0000000 --- a/assets/icons/ic_provider.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/assets/icons/ic_requests.svg b/assets/icons/ic_requests.svg deleted file mode 100644 index c6fd34a..0000000 --- a/assets/icons/ic_requests.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/assets/icons/ic_services.svg b/assets/icons/ic_services.svg deleted file mode 100644 index b0d0606..0000000 --- a/assets/icons/ic_services.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/assets/icons/ic_settings.svg b/assets/icons/ic_settings.svg deleted file mode 100644 index 6435135..0000000 --- a/assets/icons/ic_settings.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/assets/icons/ic_sms.png b/assets/icons/ic_sms.png deleted file mode 100644 index aa72e0e..0000000 Binary files a/assets/icons/ic_sms.png and /dev/null differ diff --git a/assets/icons/ic_sms.svg b/assets/icons/ic_sms.svg deleted file mode 100644 index 132ab7f..0000000 --- a/assets/icons/ic_sms.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/assets/icons/ic_whatsapp.png b/assets/icons/ic_whatsapp.png deleted file mode 100644 index 3f36403..0000000 Binary files a/assets/icons/ic_whatsapp.png and /dev/null differ diff --git a/assets/icons/ic_whatsapp.svg b/assets/icons/ic_whatsapp.svg deleted file mode 100644 index 073e581..0000000 --- a/assets/icons/ic_whatsapp.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/assets/images/bc_Intro.svg b/assets/images/bc_Intro.svg deleted file mode 100644 index deb4ffa..0000000 --- a/assets/images/bc_Intro.svg +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/assets/images/bn_Intro.png b/assets/images/bn_Intro.png deleted file mode 100644 index 8c342d2..0000000 Binary files a/assets/images/bn_Intro.png and /dev/null differ diff --git a/assets/images/bn_car.jpeg b/assets/images/bn_car.jpeg deleted file mode 100644 index 5a6bd85..0000000 Binary files a/assets/images/bn_car.jpeg and /dev/null differ diff --git a/assets/images/bn_logo.svg b/assets/images/bn_logo.svg deleted file mode 100644 index b0c971d..0000000 --- a/assets/images/bn_logo.svg +++ /dev/null @@ -1,560 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/assets/images/bn_map.png b/assets/images/bn_map.png deleted file mode 100644 index b04b5aa..0000000 Binary files a/assets/images/bn_map.png and /dev/null differ diff --git a/assets/images/ic_car.svg b/assets/images/ic_car.svg deleted file mode 100644 index 804f607..0000000 --- a/assets/images/ic_car.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/assets/images/ic_edit.svg b/assets/images/ic_edit.svg deleted file mode 100644 index c14165f..0000000 --- a/assets/images/ic_edit.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/assets/images/ic_email.svg b/assets/images/ic_email.svg deleted file mode 100644 index 81c4573..0000000 --- a/assets/images/ic_email.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/assets/images/ic_engine.png b/assets/images/ic_engine.png deleted file mode 100644 index 0256ff0..0000000 Binary files a/assets/images/ic_engine.png and /dev/null differ diff --git a/assets/images/ic_lock.svg b/assets/images/ic_lock.svg deleted file mode 100644 index 1273157..0000000 --- a/assets/images/ic_lock.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/assets/images/ic_logo_white.png b/assets/images/ic_logo_white.png deleted file mode 100644 index 779fda4..0000000 Binary files a/assets/images/ic_logo_white.png and /dev/null differ diff --git a/assets/images/ic_logout.svg b/assets/images/ic_logout.svg deleted file mode 100644 index 2be107f..0000000 --- a/assets/images/ic_logout.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/assets/images/ic_mobile.svg b/assets/images/ic_mobile.svg deleted file mode 100644 index 068cf7a..0000000 --- a/assets/images/ic_mobile.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/assets/images/ic_notes.svg b/assets/images/ic_notes.svg deleted file mode 100644 index 009cf17..0000000 --- a/assets/images/ic_notes.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/assets/images/ic_notification.svg b/assets/images/ic_notification.svg deleted file mode 100644 index e45bab2..0000000 --- a/assets/images/ic_notification.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/assets/images/ic_settings.svg b/assets/images/ic_settings.svg deleted file mode 100644 index 83b64c9..0000000 --- a/assets/images/ic_settings.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/assets/images/ic_world.png b/assets/images/ic_world.png deleted file mode 100644 index 01ea634..0000000 Binary files a/assets/images/ic_world.png and /dev/null differ diff --git a/assets/images/logo.svg b/assets/images/logo.svg deleted file mode 100644 index 8552147..0000000 --- a/assets/images/logo.svg +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/assets/images/splash_logo.svg b/assets/images/splash_logo.svg deleted file mode 100644 index 481226e..0000000 --- a/assets/images/splash_logo.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/lib/api/api_client.dart b/lib/api/api_client.dart deleted file mode 100644 index 19cb719..0000000 --- a/lib/api/api_client.dart +++ /dev/null @@ -1,284 +0,0 @@ -import 'dart:async'; -import 'dart:convert'; -import 'dart:io'; - -import 'package:car_provider_app/api/client/user_api_client.dart'; -import 'package:car_provider_app/classes/app_state.dart'; -import 'package:flutter/foundation.dart'; -import 'package:http/http.dart'; -import 'package:http/io_client.dart'; -import 'package:car_provider_app/exceptions/api_exception.dart'; - -typedef FactoryConstructor = U Function(dynamic); - -class APIError { - int errorCode; - String errorMessage; - - APIError(this.errorCode, this.errorMessage); - - Map toJson() => {'errorCode': errorCode, 'errorMessage': errorMessage}; - - @override - String toString() { - return jsonEncode(this); - } -} - -APIException _throwAPIException(Response response) { - switch (response.statusCode) { - case 400: - APIError? apiError; - if (response.body != null && response.body.isNotEmpty) { - var jsonError = jsonDecode(response.body); - apiError = APIError(jsonError['errorCode'], jsonError['errorMessage']); - } - return APIException(APIException.BAD_REQUEST, error: apiError); - case 401: - return APIException(APIException.UNAUTHORIZED); - case 403: - return APIException(APIException.FORBIDDEN); - case 404: - return APIException(APIException.NOT_FOUND); - case 500: - return APIException(APIException.INTERNAL_SERVER_ERROR); - case 444: - var downloadUrl = response.headers["location"]; - return APIException(APIException.UPGRADE_REQUIRED, arguments: downloadUrl); - default: - return APIException(APIException.OTHER); - } -} - -class ApiClient { - static final ApiClient _instance = ApiClient._internal(); - - ApiClient._internal(); - - factory ApiClient() => _instance; - - Future postJsonForObject(FactoryConstructor factoryConstructor, String url, T jsonObject, - {String? token, Map? queryParameters, Map? headers, int retryTimes = 0}) async { - var _headers = {'Accept': 'application/json'}; - if (headers != null && headers.isNotEmpty) { - _headers.addAll(headers); - } - if (!kReleaseMode) { - print("Url:$url"); - print("body:$jsonObject"); - } - var response = await postJsonForResponse(url, jsonObject, token: token, queryParameters: queryParameters, headers: _headers, retryTimes: retryTimes); - try { - if (!kReleaseMode) { - print("res121:" + response.body); - print("res121:" + response.statusCode.toString()); - } - var jsonData = jsonDecode(response.body); - - return factoryConstructor(jsonData); - } catch (ex) { - print(ex); - print("exception121:" + ex.toString()); - throw APIException(APIException.BAD_RESPONSE_FORMAT, arguments: ex); - } - } - - Future postJsonForResponse(String url, T jsonObject, {String? token, Map? queryParameters, Map? headers, int retryTimes = 0}) async { - String? requestBody; - if (jsonObject != null) { - requestBody = jsonEncode(jsonObject); - if (headers == null) { - headers = {'Content-Type': 'application/json'}; - } else { - headers['Content-Type'] = 'application/json'; - } - } - - return await _postForResponse(url, requestBody, token: token, queryParameters: queryParameters, headers: headers, retryTimes: retryTimes); - } - - Future _postForResponse( - String url, - requestBody, { - String? token, - Map? queryParameters, - Map? headers, - int retryTimes = 0, - }) async { - try { - var _headers = {}; - if (token != null) { - _headers['Authorization'] = 'Bearer $token'; - } - - if (headers != null && headers.isNotEmpty) { - _headers.addAll(headers); - } - - if (queryParameters != null) { - var queryString = new Uri(queryParameters: queryParameters).query; - url = url + '?' + queryString; - } - - var response; - - response = await _post(Uri.parse(url), body: requestBody, headers: _headers).timeout(Duration(seconds: 100)); - - if (!kReleaseMode) { - print("Url:$url"); - print("body:$requestBody"); - 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); - } - } on SocketException catch (e) { - if (retryTimes > 0) { - print('will retry after 3 seconds...'); - await Future.delayed(Duration(seconds: 3)); - return await _postForResponse(url, requestBody, token: token, queryParameters: queryParameters, headers: headers, retryTimes: retryTimes - 1); - } else { - throw APIException(APIException.OTHER, arguments: e); - } - } on HttpException catch (e) { - if (retryTimes > 0) { - print('will retry after 3 seconds...'); - await Future.delayed(Duration(seconds: 3)); - return await _postForResponse(url, requestBody, token: token, queryParameters: queryParameters, headers: headers, retryTimes: retryTimes - 1); - } else { - throw APIException(APIException.OTHER, arguments: e); - } - } on TimeoutException catch (e) { - throw APIException(APIException.TIMEOUT, arguments: e); - } on ClientException catch (e) { - if (retryTimes > 0) { - print('will retry after 3 seconds...'); - await Future.delayed(Duration(seconds: 3)); - return await _postForResponse(url, requestBody, token: token, queryParameters: queryParameters, headers: headers, retryTimes: retryTimes - 1); - } else { - throw APIException(APIException.OTHER, arguments: e); - } - } catch (ex) { - print("exception1:" + ex.toString()); - throw APIException(APIException.BAD_RESPONSE_FORMAT, arguments: ex); - } - } - - bool _certificateCheck(X509Certificate cert, String host, int port) => true; - - Future _withClient(Future Function(Client) fn) async { - var httpClient = HttpClient()..badCertificateCallback = _certificateCheck; - var client = IOClient(httpClient); - try { - return await fn(client); - } finally { - client.close(); - } - } - - Future _post(url, {Map? headers, body, Encoding? encoding}) => _withClient((client) => client.post(url, headers: headers, body: body, encoding: encoding)); - - Future getJsonForObject(FactoryConstructor factoryConstructor, String url, - {String? token, Map? queryParameters, Map? headers, int retryTimes = 0}) async { - var _headers = {'Accept': 'application/json'}; - if (headers != null && headers.isNotEmpty) { - _headers.addAll(headers); - } - var response = await getJsonForResponse(url, token: token, queryParameters: queryParameters, headers: _headers, retryTimes: retryTimes); - try { - if (!kReleaseMode) { - print("res:" + response.body); - } - var jsonData = jsonDecode(response.body); - return factoryConstructor(jsonData); - } catch (ex) { - print("exception:" + response.body); - throw APIException(APIException.BAD_RESPONSE_FORMAT, arguments: ex); - } - } - - Future getJsonForResponse(String url, {String? token, Map? queryParameters, Map? headers, int retryTimes = 0}) async { - if (headers == null) { - headers = {'Content-Type': 'application/json'}; - } else { - headers['Content-Type'] = 'application/json'; - } - return await _getForResponse(url, token: token, queryParameters: queryParameters, headers: headers, retryTimes: retryTimes); - } - - Future _getForResponse(String url, {String? token, Map? queryParameters, Map? headers, int retryTimes = 0}) async { - try { - var _headers = {}; - if (token != null) { - _headers['Authorization'] = 'Bearer $token'; - } - - if (headers != null && headers.isNotEmpty) { - _headers.addAll(headers); - } - if (queryParameters != null) { - String queryString = new Uri(queryParameters: queryParameters).query; - if (!url.contains(queryString.toString())) { - url = url + '?' + queryString.toString(); - } - // if (isFirstCall) url = url + '?' + queryString.toString(); - } - - if (!kReleaseMode) { - print("Url:$url"); - print("queryParameters:$queryParameters"); - } - var response = await _get(Uri.parse(url), headers: _headers).timeout(Duration(seconds: 60)); - if (!kReleaseMode) { - print("res: " + response.body.toString()); - } - 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 _getForResponse(url, token: mToken, queryParameters: queryParameters, headers: headers, retryTimes: retryTimes); - } - return response; - } else { - throw _throwAPIException(response); - } - } on SocketException catch (e) { - if (retryTimes > 0) { - print('will retry after 3 seconds...'); - await Future.delayed(Duration(seconds: 3)); - return await _getForResponse(url, token: token, queryParameters: queryParameters, headers: headers, retryTimes: retryTimes - 1); - } else { - throw APIException(APIException.OTHER, arguments: e); - } - } on HttpException catch (e) { - if (retryTimes > 0) { - print('will retry after 3 seconds...'); - await Future.delayed(Duration(seconds: 3)); - return await _getForResponse(url, token: token, queryParameters: queryParameters, headers: headers, retryTimes: retryTimes - 1); - } else { - throw APIException(APIException.OTHER, arguments: e); - } - } on TimeoutException catch (e) { - throw APIException(APIException.TIMEOUT, arguments: e); - } on ClientException catch (e) { - if (retryTimes > 0) { - await Future.delayed(Duration(seconds: 3)); - return await _getForResponse(url, token: token, queryParameters: queryParameters, headers: headers, retryTimes: retryTimes - 1); - } else { - throw APIException(APIException.OTHER, arguments: e); - } - } catch (e) { - throw APIException(APIException.OTHER, arguments: e); - } - } - - Future _get(url, {Map? headers}) => _withClient((client) => client.get(url, headers: headers)); -} diff --git a/lib/api/client/branch_api_client.dart b/lib/api/client/branch_api_client.dart deleted file mode 100644 index 48d79ce..0000000 --- a/lib/api/client/branch_api_client.dart +++ /dev/null @@ -1,131 +0,0 @@ -import 'dart:async'; -import 'package:car_provider_app/classes/app_state.dart'; -import 'package:car_provider_app/models/m_response.dart'; -import 'package:car_provider_app/models/profile/branch.dart'; -import 'package:car_provider_app/models/profile/branch2.dart'; -import 'package:car_provider_app/models/profile/categroy.dart'; -import 'package:car_provider_app/models/profile/document.dart'; -import 'package:car_provider_app/models/profile/services.dart'; -import 'package:car_provider_app/models/user/country.dart'; -import 'package:car_provider_app/models/user/role.dart'; -import 'package:http/http.dart'; -import 'package:car_provider_app/classes/consts.dart'; -import 'package:car_provider_app/models/content_info_model.dart'; -import 'package:car_provider_app/models/member_model.dart'; -import 'package:car_provider_app/models/surah_model.dart'; -import 'package:car_provider_app/models/user/basic_otp.dart'; -import 'package:car_provider_app/models/user/register_user.dart'; - -import '../api_client.dart'; - -class BranchApiClent { - static final BranchApiClent _instance = BranchApiClent._internal(); - - BranchApiClent._internal(); - - factory BranchApiClent() => _instance; - - Future fetchBranch() async { - var postParams = { - "serviceProviderID": AppState().getUser.data?.userInfo?.providerId.toString() ?? "", - }; - String t = AppState().getUser.data!.accessToken ?? ""; - return await ApiClient().getJsonForObject((json) => Branch.fromJson(json), ApiConsts.getProviderBranch, queryParameters: postParams, token: t); - } - - Future createBranch(String branchName, String branchDescription, String cityId, String address, String latitude, String longitude) async { - String lat = "0", long = "0"; - try { - lat = latitude.substring(0, 9); - long = longitude.substring(0, 9); - } catch (e) {} - var postParams = { - // "id": 0, - "serviceProviderID": AppState().getUser.data?.userInfo?.providerId ?? "", - "branchName": branchName, - "branchDescription": branchDescription, - "cityID": cityId, - "address": address, - "latitude": lat, - "longitude": long, - "isActive": true - }; - String t = AppState().getUser.data!.accessToken ?? ""; - print("tokeen " + t); - return await ApiClient().postJsonForObject((json) => MResponse.fromJson(json), ApiConsts.createProviderBranch, postParams, token: t); - } - - Future updateBranch(int id, String branchName, String branchDescription, String cityId, String address, String latitude, String longitude, {bool isNeedToDelete = true}) async { - String lat = "0", long = "0"; - try { - lat = latitude.substring(0, 9); - long = longitude.substring(0, 9); - } catch (e) {} - var postParams = { - "id": id, - "serviceProviderID": AppState().getUser.data?.userInfo?.providerId ?? "", - "branchName": branchName, - "branchDescription": branchDescription, - "cityID": cityId, - "address": address, - "latitude": lat, - "longitude": long, - "isActive": isNeedToDelete - }; - String t = AppState().getUser.data!.accessToken ?? ""; - print("tokeen " + t); - return await ApiClient().postJsonForObject((json) => MResponse.fromJson(json), ApiConsts.updateProviderBranch, postParams, token: t); - } - - Future deleteBranch(int id) async { - var postParams = {"id": id, "serviceProviderID": AppState().getUser.data?.userInfo?.providerId ?? "", "isActive": false}; - String t = AppState().getUser.data!.accessToken ?? ""; - print("tokeen " + t); - return await ApiClient().postJsonForObject((json) => MResponse.fromJson(json), ApiConsts.updateProviderBranch, postParams, token: t); - } - - Future fetchAllBranches() async { - var postParams = {"ServiceProviderID": AppState().getUser.data?.userInfo?.providerId.toString() ?? ""}; - String t = AppState().getUser.data!.accessToken ?? ""; - print("tokeen " + t); - return await ApiClient().getJsonForObject((json) => Branch.fromJson(json), ApiConsts.ServiceProviderBranchGet, queryParameters: postParams, token: t); - } - - Future fetchBranchCategory() async { - var postParams = {"ServiceProviderID": AppState().getUser.data?.userInfo?.providerId.toString() ?? ""}; - String t = AppState().getUser.data!.accessToken ?? ""; - print("tokeen " + t); - return await ApiClient().getJsonForObject((json) => Category.fromJson(json), ApiConsts.ServiceCategory_Get, queryParameters: postParams, token: t); - } - - Future fetchServices(String serviceCategoryId) async { - var postParams = {"ServiceCategoryID": serviceCategoryId}; - String t = AppState().getUser.data!.accessToken ?? ""; - print("tokeen " + t); - return await ApiClient().getJsonForObject((json) => Services.fromJson(json), ApiConsts.Services_Get, queryParameters: postParams, token: t); - } - - Future createService(List> map) async { - String t = AppState().getUser.data!.accessToken ?? ""; - return await ApiClient().postJsonForObject((json) => MResponse.fromJson(json), ApiConsts.ServiceProviderService_Create, map, token: t); - } - - Future updateService(List> map) async { - String t = AppState().getUser.data!.accessToken ?? ""; - return await ApiClient().postJsonForObject((json) => MResponse.fromJson(json), ApiConsts.ServiceProviderService_Update, map, token: t); - } - - Future getServiceProviderService() async { - var postParams = {"ProviderBranchID": "9"}; - String t = AppState().getUser.data!.accessToken ?? ""; - print("tokeen " + t); - return await ApiClient().getJsonForObject((json) => MResponse.fromJson(json), ApiConsts.ServiceProviderService_Get, queryParameters: postParams, token: t); - } - - Future getBranchAndServices() async { - var postParams = {"serviceProviderID": AppState().getUser.data?.userInfo?.providerId.toString() ?? ""}; - String t = AppState().getUser.data!.accessToken ?? ""; - print("tokeen " + t); - return await ApiClient().getJsonForObject((json) => Branch2.fromJson(json), ApiConsts.BranchesAndServices, queryParameters: postParams, token: t); - } -} diff --git a/lib/api/client/profile_api_client.dart b/lib/api/client/profile_api_client.dart deleted file mode 100644 index 1db88e5..0000000 --- a/lib/api/client/profile_api_client.dart +++ /dev/null @@ -1,52 +0,0 @@ -import 'dart:async'; -import 'package:car_provider_app/classes/app_state.dart'; -import 'package:car_provider_app/models/m_response.dart'; -import 'package:car_provider_app/models/profile/document.dart'; -import 'package:car_provider_app/models/user/country.dart'; -import 'package:car_provider_app/models/user/role.dart'; -import 'package:http/http.dart'; -import 'package:car_provider_app/classes/consts.dart'; -import 'package:car_provider_app/models/content_info_model.dart'; -import 'package:car_provider_app/models/member_model.dart'; -import 'package:car_provider_app/models/surah_model.dart'; -import 'package:car_provider_app/models/user/basic_otp.dart'; -import 'package:car_provider_app/models/user/register_user.dart'; - -import '../api_client.dart'; - -class ProfileApiClent { - static final ProfileApiClent _instance = ProfileApiClent._internal(); - - ProfileApiClent._internal(); - - factory ProfileApiClent() => _instance; - - Future getServiceProviderDocument(dynamic userId) async { - var queryParameters = { - "ServiceProviderID": userId.toString(), - }; - String? token = AppState().getUser.data?.accessToken; - print(token); - return await ApiClient().getJsonForObject((json) => Document.fromJson(json), ApiConsts.GetProviderDocument, queryParameters: queryParameters, token: AppState().getUser.data!.accessToken ?? ""); - } - - Future serviceProviderDocumentsUpdate(List? documents) async { - List> map = []; - for (int i = 0; i < documents!.length; i++) { - if (documents[i].document != null) { - var postParams = { - "id": documents[i].id, - "serviceProviderID": documents[i].serviceProviderId, - "documentID": documents[i].documentId, - "documentExt": documents[i].fileExt, - "documentImage": documents[i].document, - "isActive": true - }; - map.add(postParams); - } - } - String t = AppState().getUser.data!.accessToken ?? ""; - print("tokeen " + t); - return await ApiClient().postJsonForObject((json) => MResponse.fromJson(json), ApiConsts.ServiceProviderDocument_Update, map, token: t); - } -} diff --git a/lib/api/client/user_api_client.dart b/lib/api/client/user_api_client.dart deleted file mode 100644 index dbd4609..0000000 --- a/lib/api/client/user_api_client.dart +++ /dev/null @@ -1,224 +0,0 @@ -import 'dart:async'; -import 'dart:convert'; -import 'package:car_provider_app/models/user/change_email.dart'; -import 'package:car_provider_app/models/user/change_mobile.dart'; -import 'package:car_provider_app/models/user/cities.dart'; -import 'package:car_provider_app/models/user/confirm_email.dart'; -import 'package:car_provider_app/models/user/confirm_mobile.dart'; -import 'package:car_provider_app/models/user/country.dart'; -import 'package:car_provider_app/models/user/image_response.dart'; -import 'package:car_provider_app/models/user/role.dart'; -import 'package:car_provider_app/models/user/confirm_password.dart'; -import 'package:car_provider_app/models/user/forget_password_otp_compare.dart'; -import 'package:car_provider_app/models/user/forget_password_otp_request.dart'; -import 'package:car_provider_app/models/user/verify_email.dart'; -import 'package:car_provider_app/models/user/verify_email_otp.dart'; -import 'package:http/http.dart'; -import 'package:car_provider_app/classes/consts.dart'; -import 'package:car_provider_app/models/content_info_model.dart'; -import 'package:car_provider_app/models/member_model.dart'; -import 'package:car_provider_app/models/surah_model.dart'; -import 'package:car_provider_app/models/user/basic_otp.dart'; -import 'package:car_provider_app/models/user/register_user.dart'; - -import '../../classes/app_state.dart'; -import '../../models/m_response.dart'; -import '../../models/user/refresh_token.dart'; -import '../../models/user/user.dart'; -import '../api_client.dart'; -import '../shared_prefrence.dart'; - -class UserApiClent { - static final UserApiClent _instance = UserApiClent._internal(); - - UserApiClent._internal(); - - factory UserApiClent() => _instance; - - Future basicOtp(String phoneNo, {int otpType = 1, int roleId = 4, int countryId = 1}) async { - var postParams = {"countryID": countryId, "userMobileNo": phoneNo, "otpType": otpType, "userRole": roleId}; - return await ApiClient().postJsonForObject((json) => BasicOtp.fromJson(json), ApiConsts.BasicOTP, postParams); - } - - Future basicVerify(String phoneNo, String otp, String userToken) async { - var postParams = { - "userMobileNo": phoneNo, - "userOTP": otp, - "userToken": userToken, - }; - return await ApiClient().postJsonForObject((json) => RegisterUser.fromJson(json), ApiConsts.BasicVerify, postParams); - } - - Future basicComplete(String userId, String firstName, String lastName, String email, String password) async { - var postParams; - if (email.isEmpty) { - postParams = {"userID": userId, "firstName": firstName, "lastName": lastName, "companyName": "string", "isEmailVerified": true, "password": password}; - } else { - postParams = {"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); - } - - Future login_V1(String phoneNo, String password) async { - var postParams = { - "mobileorEmail": phoneNo, - "password": password, - }; - return await ApiClient().postJsonForResponse(ApiConsts.Login_V1, postParams); - //return await ApiClient().postJsonForObject((json) => BasicOtp.fromJson(json), ApiConsts.Login_V1, postParams); - } - - Future login_V2_OTP(String userToken, String loginType) async { - var postParams = { - "userToken": userToken, - "loginType": loginType, - }; - return await ApiClient().postJsonForResponse(ApiConsts.Login_V2_OTP, postParams); - } - - Future login_V2_OTPVerify(String userToken, String otp) async { - var postParams = {"userToken": userToken, "userOTP": otp}; - return await ApiClient().postJsonForResponse(ApiConsts.Login_V2_OTPVerify, postParams); - } - - Future getAllCountries() async { - var postParams = {}; - return await ApiClient().getJsonForObject((json) => Country.fromJson(json), ApiConsts.GetAllCountry); - } - - Future getAllCites(String countryId) async { - var postParams = { - "CountryID": countryId, - }; - return await ApiClient().getJsonForObject((json) => Cities.fromJson(json), ApiConsts.GetAllCities, queryParameters: postParams); - } - - Future getRoles() async { - return await ApiClient().getJsonForObject((json) => Role.fromJson(json), ApiConsts.GetProviderRoles); - } - - Future ForgetPasswordOTPRequest(String userName, int otpType) async { - var postParams = { - "userName": userName, - "otpType": 1, - }; - return await ApiClient().postJsonForResponse(ApiConsts.ForgetPasswordOTPRequest, postParams); - //return await ApiClient().postJsonForObject((json) => PasswordOTPRequest.fromJson(json), ApiConsts.ForgetPasswordOTPRequest, postParams); - } - - Future 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); - } - - Future ForgetPassword(String userToken, String newPassword) async { - var postParams = { - "userToken": userToken, - "newPassword": newPassword, - }; - return await ApiClient().postJsonForResponse(ApiConsts.ForgetPassword, postParams); - //return await ApiClient().postJsonForObject((json) => ConfirmPassword.fromJson(json), ApiConsts.ForgetPassword, postParams); - } - - Future ChangePassword(String currentPasswor, String newPassword) async { - var postParams = { - "currentPassword": currentPasswor, - "newPassword": newPassword, - }; - // return await ApiClient().postJsonForResponse(ApiConsts.ChangePassword, postParams); - - String t = AppState().getUser.data!.accessToken ?? ""; - print("tokeen " + t); - return await ApiClient().postJsonForObject((json) => MResponse.fromJson(json), ApiConsts.ChangePassword, postParams, token: t); - } - - Future ChangeMobileNoOTPRequest( - countryID, - String mobileNo, - String password, - ) async { - var postParams = {"countryID": 1, "mobileNo": mobileNo, "password": password}; - String t = AppState().getUser.data!.accessToken ?? ""; - return await ApiClient().postJsonForObject((json) => ChangeMobile.fromJson(json), ApiConsts.ChangeMobileNoOTPRequest, postParams, token: t); - } - - Future ChangeMobileNo(String userToken, String userOTP) async { - var postParams = { - "userToken": userToken, - "userOTP": userOTP, - }; - String t = AppState().getUser.data!.accessToken ?? ""; - return await ApiClient().postJsonForObject((json) => ConfirmMobile.fromJson(json), ApiConsts.ChangeMobileNo, postParams, token: t); - } - - Future ChangeEmailOTPRequest(String email, String password) async { - var postParams = {"email": email, "password": password}; - String t = AppState().getUser.data!.accessToken ?? ""; - return await ApiClient().postJsonForObject((json) => ChanEmail.fromJson(json), ApiConsts.ChangeEmailOTPRequest, postParams, token: t); - } - - Future ChangeEmail(String userToken, String userOTP) async { - var postParams = {"userToken": userToken, "userOTP": userOTP}; - String t = AppState().getUser.data!.accessToken ?? ""; - return await ApiClient().postJsonForObject((json) => ConfirmEmail.fromJson(json), ApiConsts.ChangeEmail, postParams, token: t); - } - - Future EmailVerify(String email, String userID) async { - var postParams = { - // "email": email, - // "userID": userID, - "email": AppState().getUser.data!.userInfo!.email ?? "", - "userID": AppState().getUser.data!.userInfo!.userId ?? "", - }; - - String t = AppState().getUser.data!.accessToken ?? ""; - return await ApiClient().postJsonForObject((json) => VerifyEmail.fromJson(json), ApiConsts.EmailVerify, postParams, token: t); - } - - Future EmailVerifyOTPVerify(String userToken, String userOTP) async { - 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); - } - - Future UpdateUserImage(String image) async { - var postParams = {"userID": AppState().getUser.data!.userInfo!.userId, "userImage": image}; - // return await ApiClient().postJsonForResponse(ApiConsts.ChangePassword, postParams); - - String t = AppState().getUser.data!.accessToken ?? ""; - print("tokeen " + t); - return await ApiClient().postJsonForObject((json) => ImageResponse.fromJson(json), ApiConsts.UpdateUserImage, postParams, token: t); - } - - Future GetUserImage(String image) async { - var postParams = {}; - // return await ApiClient().postJsonForResponse(ApiConsts.ChangePassword, postParams); - - String t = AppState().getUser.data!.accessToken ?? ""; - print("tokeen " + t); - return await ApiClient().postJsonForObject((json) => ImageResponse.fromJson(json), ApiConsts.UpdateUserImage, postParams, token: t); - } - - Future 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 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??""; - } -} diff --git a/lib/api/shared_prefrence.dart b/lib/api/shared_prefrence.dart deleted file mode 100644 index 2e46e42..0000000 --- a/lib/api/shared_prefrence.dart +++ /dev/null @@ -1,74 +0,0 @@ -import 'dart:async'; - -import 'package:shared_preferences/shared_preferences.dart'; - -class SharedPrefManager { - static String USER_ID = "user.id"; - 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 _prefs = SharedPreferences.getInstance(); - - static setUserId(String cookie) async { - final prefs = await SharedPreferences.getInstance(); - prefs.setString(USER_ID, cookie) ?? "NA"; - } - - static Future getUserId() async { - SharedPreferences prefs = await _prefs; - return prefs.getString(USER_ID) ?? ""; - } - - static setUserToken(String cookie) async { - final prefs = await SharedPreferences.getInstance(); - prefs.setString(USER_TOKEN, cookie) ?? "NA"; - } - - static Future getUserToken() async { - SharedPreferences prefs = await _prefs; - return prefs.getString(USER_TOKEN) ?? ""; - } - - static setPhoneOrEmail(String cookie) async { - final prefs = await SharedPreferences.getInstance(); - prefs.setString(USER_NAME, cookie) ?? "NA"; - } - - static Future 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 getUserPassword() async { - 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 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 getData() async { - SharedPreferences prefs = await _prefs; - return prefs.getString(DATA) ?? ""; - } -} diff --git a/lib/classes/app_state.dart b/lib/classes/app_state.dart deleted file mode 100644 index 0db50a7..0000000 --- a/lib/classes/app_state.dart +++ /dev/null @@ -1,39 +0,0 @@ -import 'package:car_provider_app/models/post_params_model.dart'; -import 'package:car_provider_app/models/user/user.dart'; -import 'package:google_maps_flutter/google_maps_flutter.dart'; - -class AppState { - static final AppState _instance = AppState._internal(); - - AppState._internal(); - - factory AppState() => _instance; - - bool isLogged = false; - - set setLogged(v) => isLogged = v; - - bool? get getIsLogged => isLogged; - - User? _user; - - set setUser(v) => _user = v; - - User get getUser => _user ?? User(); - - PostParamsModel? _postParams; - - PostParamsModel? get postParamsObject => _postParams; - - Map get postParamsJson => _postParams?.toJson() ?? {}; - - void setPostParamsModel(PostParamsModel _postParams) { - this._postParams = _postParams; - } - - LatLng currentLocation = const LatLng(0, 0); - - set setCurrentLocation(v) => currentLocation = v; - - LatLng get getCurrentLocation => currentLocation; -} diff --git a/lib/classes/colors.dart b/lib/classes/colors.dart deleted file mode 100644 index 88c3dea..0000000 --- a/lib/classes/colors.dart +++ /dev/null @@ -1,63 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -class MyColors { - static const Color darkPrimaryColor = Color(0xffF47F20); - static const Color primaryColor = Color(0xffF69521); - static const Color accentColor = Colors.blue; - static const Color lightTextColor = Color(0xff969696); - static const Color textColor = Color(0xff777777); - static const Color textFieldColor = Color(0xffF3F5F7); - static const Color darkIconColor = Color(0xff28323A); - static const Color darkTextColor = Color(0xff2B353E); - static const Color normalTextColor = Color(0xff5A5A5A); - static const Color gradiantStartColor = Color(0xff33c0a5); - static const Color gradiantEndColor = Color(0xff259db7); - static const Color textMixColor = Color(0xff2BB8A6); - static const Color backgroundColor = Color(0xffF8F8F8); - static const Color grey57Color = Color(0xff575757); - static const Color grey77Color = Color(0xff777777); - static const Color grey70Color = Color(0xff707070); - static const Color greyACColor = Color(0xffACACAC); - static const Color grey98Color = Color(0xff989898); - static const Color lightGreyEFColor = Color(0xffEFEFEF); - static const Color lightGreyEDColor = Color(0xffEDEDED); - static const Color lightGreyEAColor = Color(0xffEAEAEA); - static const Color darkWhiteColor = Color(0xffE0E0E0); - static const Color redColor = Color(0xffD02127); - static const Color yellowColor = Color(0xffF4E31C); - static const Color backgroundBlackColor = Color(0xff202529); - static const Color black = Color(0xff000000); - static const Color white = Color(0xffffffff); - static const Color green = Color(0xffffffff); - static const Color borderColor = Color(0xffE8E8E8); - - static Decoration gradient = BoxDecoration( - gradient: new LinearGradient(colors: [ - darkPrimaryColor, - primaryColor, - ]), - boxShadow: [ - new BoxShadow( - color: primaryColor.withOpacity(0.5), - blurRadius: 20.0, - spreadRadius: 1.0, - ) - ], - ); - - static Decoration gradientButton = BoxDecoration( - gradient: new LinearGradient(colors: [ - darkPrimaryColor, - primaryColor, - ]), - borderRadius: BorderRadius.circular(0), - boxShadow: [ - new BoxShadow( - color: primaryColor.withOpacity(0.2), - blurRadius: 4.0, - spreadRadius: 0.5, - ) - ], - ); -} diff --git a/lib/classes/consts.dart b/lib/classes/consts.dart deleted file mode 100644 index d897763..0000000 --- a/lib/classes/consts.dart +++ /dev/null @@ -1,62 +0,0 @@ -class ApiConsts { - static String baseUrl = "https://ms.hmg.com/"; // Local server - // static String baseUrl = "https://mdlaboratories.com"; // production server - static String baseUrlServices = baseUrl + ""; // production server - static String BasicOTP = baseUrlServices + "api/Register/BasicOTP"; - static String BasicVerify = baseUrlServices + "api/Register/BasicVerify"; - static String BasicComplete = baseUrlServices + "api/Register/BasicComplete"; - static String RefreshToken = baseUrlServices + "api/Account/RefreshToken"; - - - //User - static String Login_V1 = baseUrlServices + "api/Account/Login_V1"; - static String Login_V2_OTP = baseUrlServices + "api/Account/Login_V2_OTP"; - static String Login_V2_OTPVerify = baseUrlServices + "api/Account/Login_V2_OTPVerify"; - static String user = baseUrlServices + "api/User/"; - static String GetAllCountry = baseUrlServices + "api/Master/Country_Get"; - static String GetProviderRoles = baseUrlServices + "api/Master/RoleServiceProvider_Get"; - static String GetAllCities = baseUrlServices + "api/Master/City_Get"; - static String ForgetPasswordOTPRequest = baseUrlServices + "api/Account/ForgetPasswordOTPRequest"; - static String ForgetPasswordOTPCompare = baseUrlServices + "api/Account/ForgetPasswordOTPCompare"; - static String ForgetPassword = baseUrlServices + "api/Account/ForgetPassword"; - static String Login_Email_OTP = baseUrlServices + "api/Account/EmailVerify"; - static String Login_Email_OTPVerify = baseUrlServices + "api/Account/EmailVerifyOTPVerify"; - static String ChangePassword = baseUrlServices + "api/Account/ChangePassword"; - static String ChangeMobileNoOTPRequest = baseUrlServices + "api/Account/ChangeMobileNoOTPRequest"; - static String ChangeMobileNo = baseUrlServices + "api/Account/ChangeMobileNo"; - static String ChangeEmailOTPRequest = baseUrlServices + "api/Account/ChangeEmailOTPRequest"; - static String ChangeEmail = baseUrlServices + "api/Account/ChangeEmail"; - static String EmailVerify = baseUrlServices + "api/Account/EmailVerify"; - static String EmailVerifyOTPVerify = baseUrlServices + "api/Account/EmailVerifyOTPVerify"; - static String UpdateUserImage = baseUrlServices + "api/User_UpdateProfileImage"; - static String GetUserImage = baseUrlServices + "api/ProfileImage"; - - - //Profile - static String GetProviderDocument = baseUrlServices + "api/ServiceProviders/ServiceProviderDocument_Get"; - static String ServiceProviderDocument_Update = baseUrlServices + "api/ServiceProviders/ServiceProviderDocument_Update"; - - //Branch - static String getProviderBranch = baseUrlServices + "api/ServiceProviders/ServiceProviderBranch_Get"; - static String createProviderBranch = baseUrlServices + "api/ServiceProviders/ServiceProviderBranch_Create"; - static String updateProviderBranch = baseUrlServices + "api/ServiceProviders/ServiceProviderBranch_Update"; - static String ServiceProviderBranchGet = baseUrlServices + "api/ServiceProviders/ServiceProviderBranch_Get"; - static String ServiceCategory_Get = baseUrlServices + "api/Master/ServiceCategory_Get"; - static String Services_Get = baseUrlServices + "api/ServiceProviders/Services_Get"; - static String ServiceProviderService_Create = baseUrlServices + "api/ServiceProviders/ServiceProviderService_Create"; - static String ServiceProviderService_Update = baseUrlServices + "api/ServiceProviders/ServiceProviderService_Update"; - - static String ServiceProviderService_Get= baseUrlServices + "api/ServiceProviders/ServiceProviderService_Get"; - static String BranchesAndServices= baseUrlServices + "api/ServiceProviders/ServiceProviderDetail_Get"; - -} - -class GlobalConsts { - static String isRememberMe = "remember_me"; - static String email = "email"; - static String password = "password"; - static String bookmark = "bookmark"; - static String fontZoomSize = "font_zoom_size"; - static String welcomeVideoUrl = "welcomeVideoUrl"; - static String doNotShowWelcomeVideo = "doNotShowWelcomeVideo"; -} diff --git a/lib/classes/utils.dart b/lib/classes/utils.dart deleted file mode 100644 index 1f1156e..0000000 --- a/lib/classes/utils.dart +++ /dev/null @@ -1,75 +0,0 @@ -import 'package:car_provider_app/widgets/loading_dialog.dart'; -import 'package:flutter/material.dart'; - -// import 'package:fluttertoast/fluttertoast.dart'; -import 'package:car_provider_app/exceptions/api_exception.dart'; -import 'package:fluttertoast/fluttertoast.dart'; -class Utils { - static bool _isLoadingVisible = false; - - static bool get isLoading => _isLoadingVisible; - - static void showToast(String message) { - Fluttertoast.showToast( - msg: message, toastLength: Toast.LENGTH_SHORT, gravity: ToastGravity.BOTTOM, timeInSecForIosWeb: 2, backgroundColor: Colors.black54, textColor: Colors.white, fontSize: 16.0); - } - - static dynamic getNotNullValue(List list, int index) { - try { - return list[index]; - } catch (ex) { - return null; - } - } - - static int stringToHex(String colorCode) { - try { - return int.parse(colorCode.replaceAll("#", "0xff")); - } catch (ex) { - return (0xff000000); - } - } - - static void showLoading(BuildContext context) { - WidgetsBinding.instance?.addPostFrameCallback((_) { - _isLoadingVisible = true; - showDialog( - context: context, - barrierColor: Colors.black.withOpacity(0.5), - builder: (BuildContext context) => LoadingDialog(), - ).then((value) { - _isLoadingVisible = false; - }); - }); - } - - static void hideLoading(BuildContext context) { - if (_isLoadingVisible) { - _isLoadingVisible = false; - Navigator.of(context).pop(); - } - _isLoadingVisible = false; - } - - static void handleException(dynamic exception, Function(String)? onErrorMessage) { - String errorMessage; - if (exception is APIException) { - if (exception.message == APIException.UNAUTHORIZED) { - return; - } else { - errorMessage = exception.error?.errorMessage ?? exception.message; - } - } else { - errorMessage = APIException.UNKNOWN; - } - if (onErrorMessage != null) { - onErrorMessage(errorMessage); - } else { - showToast(errorMessage); - } - } - - static Future delay(int seconds) async { - return await Future.delayed(Duration(seconds: seconds)); - } -} diff --git a/lib/config/app_provider.dart b/lib/config/app_provider.dart deleted file mode 100644 index 75a898c..0000000 --- a/lib/config/app_provider.dart +++ /dev/null @@ -1,19 +0,0 @@ -import 'package:car_provider_app/provider/counter.dart'; -import 'package:flutter/material.dart'; -import 'package:provider/provider.dart'; - -class AppProvider extends StatelessWidget { - final Widget child; - - AppProvider({required this.child}); - - @override - Widget build(BuildContext context) { - return MultiProvider( - providers: [ - ChangeNotifierProvider(create: (_) => Counter()), - ], - child: child, - ); - } -} diff --git a/lib/config/constants.dart b/lib/config/constants.dart deleted file mode 100644 index 87c2c46..0000000 --- a/lib/config/constants.dart +++ /dev/null @@ -1,8 +0,0 @@ -enum YesOrNo { - no, - yes, -} - -const String icons = "assets/icons/"; -const String categorySvgIcons = "assets/category/svg/"; -const String svgIcons = "assets/svg/"; diff --git a/lib/config/localization.dart b/lib/config/localization.dart deleted file mode 100644 index 5d7acdf..0000000 --- a/lib/config/localization.dart +++ /dev/null @@ -1,18 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:flutter_localizations/flutter_localizations.dart'; - -class AppLocalizations { - static const Iterable> localizationsDelegates = - [ - // ... app-specific localization delegate[s] here - // S.delegate, - GlobalMaterialLocalizations.delegate, - GlobalWidgetsLocalizations.delegate, - GlobalCupertinoLocalizations.delegate - ]; - - static const List supportedLocales = [ - const Locale("en", "US") - ]; -} diff --git a/lib/config/provider_dependencies.dart b/lib/config/provider_dependencies.dart new file mode 100644 index 0000000..7711aba --- /dev/null +++ b/lib/config/provider_dependencies.dart @@ -0,0 +1,14 @@ +import 'package:car_provider_app/repositories/branch_repo.dart'; +import 'package:mc_common_app/api/api_client.dart'; + +import 'package:mc_common_app/config/dependencies.dart'; +import 'package:mc_common_app/repositories/common_repo.dart'; +import 'package:mc_common_app/services/services.dart'; + +class ProviderAppDependencies { + static void addDependencies() { + AppDependencies.addDependencies(); + injector.registerSingleton(() => BranchRepoImp()); + injector.registerSingleton(() => CommonRepoImp()); + } +} diff --git a/lib/config/provider_routes.dart b/lib/config/provider_routes.dart new file mode 100644 index 0000000..c00affe --- /dev/null +++ b/lib/config/provider_routes.dart @@ -0,0 +1,55 @@ +import 'package:car_provider_app/views/appoinments/appoinment_detail_list_page.dart'; +import 'package:car_provider_app/views/appoinments/update_appointment_page.dart'; +import 'package:car_provider_app/views/requests/request_detail_page.dart'; +import 'package:car_provider_app/views/requests/send_offer_page.dart'; +import 'package:car_provider_app/views/settings/branch/branch_detail_page.dart'; +import 'package:car_provider_app/views/settings/branch/branch_list_page.dart'; +import 'package:car_provider_app/views/settings/branch/define_branch_page.dart'; +import 'package:car_provider_app/views/settings/create_services_page.dart'; +import 'package:car_provider_app/views/settings/dealership_page.dart'; +import 'package:car_provider_app/views/settings/define_license_page.dart'; +import 'package:mc_common_app/config/routes.dart'; +import 'package:mc_common_app/models/model/branch2.dart'; + +import 'package:flutter/material.dart'; + +import '../views/dashboard/dashboard_page.dart'; + +class ProviderAppRoutes { + //settings + static const String defineLicense = "/defineLicese"; + static final String dealershipSetting = "/dealershipSetting"; + static final String branchList = "/branchList"; + static final String branchDetail = "/branchDetail"; + static final String defineBranch = "/defineBranch"; + static final String createServices = "/createServices"; + + //Appointments + static final String appointmentDetailList = "/appointmentDetailList"; + static final String updateAppointmentPage = "/updateAppointmentPage"; + + //Requests + static final String requestsDetailPage = "/requestsDetailPage"; + static final String sendOfferPage = "/sendOfferPage"; + + static final Map routes = { + //Home page + AppRoutes.dashboard: (context) => const DashboardPage(), + + //setting + defineLicense: (context) => DefineLicensePage(), + dealershipSetting: (context) => DealershipPage(), + branchList: (context) => BranchListPage(), + defineBranch: (context) => DefineBranchPage((ModalRoute.of(context)!.settings.arguments) == null ? null : (ModalRoute.of(context)!.settings.arguments as ServiceProviderBranch)), + branchDetail: (context) => BranchDetailPage(ModalRoute.of(context)!.settings.arguments as ServiceProviderBranch), + createServices: (context) => CreateServicesPage((ModalRoute.of(context)!.settings.arguments) == null ? null : (ModalRoute.of(context)!.settings.arguments as ServiceProviderBranch)), + + //Appointments + appointmentDetailList: (context) => const AppointmentDetailListPage(), + updateAppointmentPage: (context) => const UpdateAppointmentPage(), + + //Requests + requestsDetailPage: (context) => const RequestDetailPage(), + sendOfferPage: (context) => const SendOfferPage(), + }; +} diff --git a/lib/config/routes.dart b/lib/config/routes.dart deleted file mode 100644 index 6bff2c2..0000000 --- a/lib/config/routes.dart +++ /dev/null @@ -1,102 +0,0 @@ -import 'package:car_provider_app/models/profile/branch.dart'; -import 'package:car_provider_app/models/user/register_user.dart'; -import 'package:car_provider_app/pages/dashboard/dashboard_page.dart'; -import 'package:car_provider_app/pages/settings/branch/branch_detail_page.dart'; -import 'package:car_provider_app/pages/settings/branch/branch_list_page.dart'; -import 'package:car_provider_app/pages/settings/create_services_page.dart'; -import 'package:car_provider_app/pages/settings/dealership_page.dart'; -import 'package:car_provider_app/pages/settings/define_license_page.dart'; -import 'package:car_provider_app/pages/user/change_email_page.dart'; -import 'package:car_provider_app/pages/user/change_mobile_page.dart'; -import 'package:car_provider_app/pages/user/change_password_page.dart'; -import 'package:car_provider_app/pages/user/complete_profile_page.dart'; -import 'package:car_provider_app/pages/user/confirm_new_password_page.dart'; -import 'package:car_provider_app/pages/user/edit_account_page.dart'; -import 'package:car_provider_app/pages/user/forget_password_method_page.dart'; -import 'package:car_provider_app/pages/user/forget_password_page.dart'; -import 'package:car_provider_app/pages/user/login_method_selection_page.dart'; -import 'package:car_provider_app/pages/user/login_verification_page.dart'; -import 'package:car_provider_app/pages/user/login_verify_account_page.dart'; -import 'package:car_provider_app/pages/user/login_with_password_page.dart'; -import 'package:car_provider_app/pages/user/profile/profile_1_page.dart'; -import 'package:car_provider_app/pages/user/profile/profile_2_page.dart'; -import 'package:car_provider_app/pages/user/profile/profile_3_page.dart'; -import 'package:car_provider_app/pages/user/register_page.dart'; -import 'package:car_provider_app/pages/user/register_selection_page.dart'; -import 'package:car_provider_app/pages/user/selection_page.dart'; -import 'package:car_provider_app/pages/user/splash_page.dart'; -import 'package:car_provider_app/pages/user/vertify_password_page.dart'; -import 'package:flutter/material.dart'; - -import '../models/profile/branch2.dart'; -import '../pages/settings/branch/define_branch_page.dart'; - -class AppRoutes { - //User - static final String splash = "/splash"; - static final String selectionPage = "/selectionPage"; - static final String registerSelection = "/registerSelection"; - static final String loginVerifyAccount = "/loginVerifyAccount"; - static final String register = "/register"; - static final String forgetPassword = "/forgetPassword"; - static final String loginVerification = "/loginVerification"; - static final String loginWithPassword = "/loginWithPassword"; - static final String loginMethodSelection = "/loginMethodSelection"; - static final String completeProfile = "/completeProfile"; - static final String profile1 = "/profile1"; - static final String profile2 = "/profile2"; - static final String profile3 = "/profile3"; - static final String vertifyPassword = "/vertifyPassword"; - static final String confirmNewPasswordPage = "/confirmNewPasswordPage"; - static final String defineLicense = "/defineLicese"; - static final String changePassword = "/changePassword"; - static final String forgetPasswordMethodPage = "/forgetPasswordMethodPage"; - static final String changeMobilePage = "/changeMobilePage"; - static final String changeEmailPage = "/changeEmailPage"; - static final String editAccoundPage = "/editAccoundPage"; - - static final String dashboard = "/dashboard"; - - //settings - static final String dealershipSetting = "/dealershipSetting"; - static final String branchList = "/branchList"; - static final String branchDetail = "/branchDetail"; - static final String defineBranch = "/defineBranch"; - static final String createServices = "/createServices"; - - static final String initialRoute = splash; - - static final Map routes = { - //User - splash: (context) => SplashPage(), - selectionPage: (context) => SelectionPage(), - registerSelection: (context) => RegisterSelectionPage(), - loginVerifyAccount: (context) => LoginVerifyAccountPage(), - register: (context) => RegisterPage(), - forgetPassword: (context) => ForgetPasswordPage(), - loginVerification: (context) => LoginVerificationPage(), - loginWithPassword: (context) => LoginWithPassword(), - loginMethodSelection: (context) => LoginMethodSelectionPage(), - completeProfile: (context) => CompleteProfilePage(ModalRoute.of(context)!.settings.arguments as RegisterUser), - profile1: (context) => Profile1Page(), - profile2: (context) => Profile2Page(), - profile3: (context) => Profile3Page(), - defineLicense: (context) => DefineLicensePage(), - vertifyPassword: (context) => VerifyPasswordPage(), - confirmNewPasswordPage: (context) => ConfirmNewPasswordPage(ModalRoute.of(context)!.settings.arguments as String), - changePassword: (context) => ChangePasswordPage(), - forgetPasswordMethodPage: (context) => ForgetPasswordMethodPage(ModalRoute.of(context)!.settings.arguments as String), - changeMobilePage: (context) => ChangeMobilePage(), - changeEmailPage: (context) => ChangeEmailPage(), - editAccoundPage: (context) => EditAccountPage(), - //Home page - dashboard: (context) => DashboardPage(), - - //setting - dealershipSetting: (context) => DealershipPage(), - branchList: (context) => BranchListPage(), - branchDetail: (context) => BranchDetailPage(ModalRoute.of(context)!.settings.arguments as ServiceProviderBranch), - defineBranch: (context) => DefineBranchPage((ModalRoute.of(context)!.settings.arguments) == null ? null : (ModalRoute.of(context)!.settings.arguments as ServiceProviderBranch)), - createServices: (context) => CreateServicesPage((ModalRoute.of(context)!.settings.arguments) == null ? null : (ModalRoute.of(context)!.settings.arguments as ServiceProviderBranch)), - }; -} diff --git a/lib/exceptions/api_exception.dart b/lib/exceptions/api_exception.dart deleted file mode 100644 index 0dd51e5..0000000 --- a/lib/exceptions/api_exception.dart +++ /dev/null @@ -1,29 +0,0 @@ -import 'dart:convert'; - -import 'package:car_provider_app/api/api_client.dart'; - -class APIException implements Exception { - static const String BAD_REQUEST = 'api_common_bad_request'; - static const String UNAUTHORIZED = 'api_common_unauthorized'; - static const String FORBIDDEN = 'api_common_forbidden'; - static const String NOT_FOUND = 'api_common_not_found'; - static const String INTERNAL_SERVER_ERROR = 'api_common_internal_server_error'; - static const String UPGRADE_REQUIRED = 'api_common_upgrade_required'; - static const String BAD_RESPONSE_FORMAT = 'api_common_bad_response_format'; - static const String OTHER = 'api_common_http_error'; - static const String TIMEOUT = 'api_common_http_timeout'; - static const String UNKNOWN = 'unexpected_error'; - - final String message; - final APIError? error; - final arguments; - - const APIException(this.message, {this.arguments, this.error}); - - Map toJson() => {'message': message, 'error': error, 'arguments': '$arguments'}; - - @override - String toString() { - return jsonEncode(this); - } -} diff --git a/lib/extensions/int_extensions.dart b/lib/extensions/int_extensions.dart deleted file mode 100644 index 9b90b2f..0000000 --- a/lib/extensions/int_extensions.dart +++ /dev/null @@ -1,7 +0,0 @@ -import 'package:flutter/cupertino.dart'; - -extension IntExtensions on int { - Widget get height => SizedBox(height: toDouble()); - - Widget get width => SizedBox(width: toDouble()); -} diff --git a/lib/extensions/string_extensions.dart b/lib/extensions/string_extensions.dart deleted file mode 100644 index 4388671..0000000 --- a/lib/extensions/string_extensions.dart +++ /dev/null @@ -1,144 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:intl/intl.dart'; -import 'package:car_provider_app/classes/colors.dart'; - -extension EmailValidator on String { - Widget get toWidget => Text(this); - - Widget toText({ - Color? color, - bool isBold = false, - double? fontSize, - TextDecoration? decoration, - TextAlign? textAlign, - }) => - Text( - this, - textAlign: textAlign, - style: TextStyle( - fontSize: fontSize ?? 10, - fontWeight: isBold ? FontWeight.bold : FontWeight.w600, - color: color ?? MyColors.darkTextColor, - letterSpacing: -0.4, - decoration: decoration, - ), - ); - - Widget toText10({Color? color, bool isBold = false}) => Text( - this, - style: TextStyle(fontSize: 10, fontWeight: isBold ? FontWeight.bold : FontWeight.w800, color: color ?? MyColors.darkTextColor, letterSpacing: -0.4), - ); - - Widget toText11({Color? color, bool isUnderLine = false, bool isBold = false}) => Text( - this, - style: TextStyle( - fontSize: 11, - fontWeight: isBold ? FontWeight.bold : FontWeight.w600, - color: color ?? MyColors.darkTextColor, - letterSpacing: -0.33, - decoration: isUnderLine ? TextDecoration.underline : null), - ); - - Widget toText12({Color? color, bool isUnderLine = false, bool isBold = false, bool isCenter = false, int maxLine = 0}) => Text( - this, - textAlign: isCenter ? TextAlign.center : null, - maxLines: (maxLine > 0) ? maxLine : null, - style: TextStyle( - fontSize: 12, - fontWeight: isBold ? FontWeight.bold : FontWeight.w600, - color: color ?? MyColors.darkTextColor, - letterSpacing: -0.72, - decoration: isUnderLine ? TextDecoration.underline : null), - ); - - Widget toText13({Color? color, bool isUnderLine = false}) => Text( - this, - style: TextStyle(fontSize: 13, fontWeight: FontWeight.w600, color: color ?? MyColors.darkTextColor, letterSpacing: -0.52, decoration: isUnderLine ? TextDecoration.underline : null), - ); - - Widget toText14({Color? color, bool isBold = false, TextAlign? textAlign, TextDecoration? decoration}) => Text( - this, - textAlign: textAlign, - style: TextStyle( - color: color ?? MyColors.darkTextColor, - fontSize: 14, - letterSpacing: -0.48, - fontWeight: isBold ? FontWeight.bold : FontWeight.w600, - decoration: decoration, - ), - ); - - Widget toText16({Color? color, bool isBold = false}) => Text( - this, - style: TextStyle(color: color ?? MyColors.darkTextColor, fontSize: 16, letterSpacing: -0.64, fontWeight: isBold ? FontWeight.bold : FontWeight.w600), - ); - - Widget toText17({Color? color, bool isBold = false}) => Text( - this, - style: TextStyle(color: color ?? MyColors.darkTextColor, fontSize: 17, letterSpacing: -0.68, fontWeight: isBold ? FontWeight.bold : FontWeight.w600), - ); - - Widget toText20({Color? color, bool isBold = false, FontWeight? fontWeight}) => Text( - this, - style: TextStyle(height: 23 / 24, color: color ?? MyColors.darkTextColor, fontSize: 20, letterSpacing: -1.44, fontWeight: fontWeight ?? (isBold ? FontWeight.bold : FontWeight.w600)), - ); - - Widget toText22({Color? color, bool isBold = false}) => Text( - this, - style: TextStyle(height: 1, color: color ?? MyColors.darkTextColor, fontSize: 22, letterSpacing: -1.44, fontWeight: isBold ? FontWeight.bold : FontWeight.w600), - ); - - Widget toText24({Color? color, bool isBold = false}) => Text( - this, - style: TextStyle(height: 23 / 24, color: color ?? MyColors.darkTextColor, fontSize: 24, letterSpacing: -1.44, fontWeight: isBold ? FontWeight.bold : FontWeight.w600), - ); - - Widget toText32({Color? color, bool isBold = false}) => Text( - this, - style: TextStyle(height: 32 / 32, color: color ?? MyColors.darkTextColor, fontSize: 32, letterSpacing: -1.92, fontWeight: isBold ? FontWeight.bold : FontWeight.w600), - ); - - bool isValidEmail() { - return RegExp(r'^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$').hasMatch(this); - } - - bool isNum() { - return RegExp(r'^[0-9]+$').hasMatch(this); - } - - String toFormattedDate() { - String date = this.split("T")[0]; - String time = this.split("T")[1]; - var dates = date.split("-"); - return "${dates[2]} ${getMonth(int.parse(dates[1]))} ${dates[0]} ${DateFormat('hh:mm a').format(DateFormat('hh:mm:ss').parse(time))}"; - } - - getMonth(int month) { - switch (month) { - case 1: - return "January"; - case 2: - return "February"; - case 3: - return "March"; - case 4: - return "April"; - case 5: - return "May"; - case 6: - return "June"; - case 7: - return "July"; - case 8: - return "August"; - case 9: - return "September"; - case 10: - return "October"; - case 11: - return "November"; - case 12: - return "December"; - } - } -} diff --git a/lib/extensions/widget_extensions.dart b/lib/extensions/widget_extensions.dart deleted file mode 100644 index 0a7b033..0000000 --- a/lib/extensions/widget_extensions.dart +++ /dev/null @@ -1,63 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter/widgets.dart'; - -extension WidgetExtensions on Widget { - Widget onPress(VoidCallback onTap) => InkWell(onTap: onTap, child: this); - - Widget paddingAll(double _value) => Padding(padding: EdgeInsets.all(_value), child: this); - - Widget paddingOnly({double left = 0.0, double right = 0.0, double top = 0.0, double bottom = 0.0}) => - Padding(padding: EdgeInsets.only(left: left, right: right, top: top, bottom: bottom), child: this); - - Widget toContainer({double borderRadius = 8, double paddingAll = 10, EdgeInsetsGeometry? padding, Color backgroundColor = Colors.white, bool isShadowEnabled = false}) => Container( - decoration: BoxDecoration( - color: backgroundColor, - borderRadius: BorderRadius.circular(borderRadius), - boxShadow: !isShadowEnabled - ? null - : [ - BoxShadow( - color: const Color(0xff000000).withOpacity(.05), - blurRadius: 26, - offset: const Offset(0, -3), - ), - ], - ), - padding: padding ?? EdgeInsets.all(paddingAll), - child: this, - ); - - Widget toCircle({double borderRadius = 100, double padding = 0}) => Container( - decoration: BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.circular(borderRadius), - boxShadow: [ - BoxShadow( - color: const Color(0xff000000).withOpacity(.1), - blurRadius: 26, - offset: const Offset(0, -3), - ), - ], - ), - clipBehavior: Clip.antiAlias, - padding: EdgeInsets.all(padding), - child: this, - ); - - Widget toWhiteContainer({double borderRadius = 8, double padding = 12, double? width}) => Container( - decoration: BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.circular(15), - boxShadow: [ - BoxShadow( - color: const Color(0xff000000).withOpacity(.05), - blurRadius: 26, - offset: const Offset(0, -3), - ), - ], - ), - padding: EdgeInsets.all(padding), - width: width, - child: this, - ); -} diff --git a/lib/generated/codegen_loader.g.dart b/lib/generated/codegen_loader.g.dart deleted file mode 100644 index fe0fd26..0000000 --- a/lib/generated/codegen_loader.g.dart +++ /dev/null @@ -1,382 +0,0 @@ -// DO NOT EDIT. This is code generated via package:easy_localization/generate.dart - -// ignore_for_file: prefer_single_quotes - -import 'dart:ui'; - -import 'package:easy_localization/easy_localization.dart' show AssetLoader; - -class CodegenLoader extends AssetLoader{ - const CodegenLoader(); - - @override - Future> load(String fullPath, Locale locale ) { - return Future.value(mapLocales[locale.toString()]); - } - - static const Map ar_SA = { - "firstTimeLogIn": "تسجيل الدخول لأول مره", - "signUp": "التسجيل", - "changeMobile": "تغيير رقم الجوال", - "notifications": "الاشعارات", - "general": "عام", - "defineLicences": "تحديد الرخص", - "dealershipSettings": "اعدادات البيع", - "changePassword": "تغيير كلمة المرور", - "retrievePassword": "استرجاع كلمة المرور", - "changeEmail": "تغيير الايميل", - "verify": "تحقق", - "verified": "تم التحقق", - "signOut": "تسجيل خروج", - "enterEmail": "ادخل الايميل", - "enterNewEmail": "ادخل ايميل جديد", - "enterCurrentPassword": "كلمة المرور الحاليه", - "enterNewPassword": "كلمة المرور الجديده", - "enterOldPassword": "كلمة المرور القديمه", - "confirm": "تأكيد", - "enterNewPhoneNumber": "رقم جوال جديد", - "completeProfile": "الملف الشخصي", - "continu": "استمرار", - "confirmPassword": "تأكيد كلمة المرور", - "createPassword": "انشاء كلمة مرور جديده", - "email": "ايميل", - "firstName": "الأسم الأول *", - "surname": "اسم العائله *", - "confirmPass": "تأكيد كلمة المرور *", - "createPass": "انشاء كلمة مرور جديده *", - "newPassword": " كلمة مرور جديده", - "forgetPassword": "نسيت كلمة المرور", - "forgetPasswordQ": "نسيت كلمة المرور؟", - "recover": "استعادة", - "forgetPasswordRecover": "نسيت كلمة المرور؟ استعادة", - "editAccount": "تعديل الحساب", - "change": "تغيير", - "verifyAccount": "التحقق من الحساب", - "login": "تسجيل دخول", - "log_in": "تسجيل الدخول", - "welcomeMessage": "مرحبا", - "welcomeDes": "أنت مكان واحد لكل ما تحتاجه سيارتك", - "forgetPass": "نسيت كلمة المرور ؟", - "enterPhoneNumber": "رقم جوال ", - "phoneNumberVerified": "تم التحقق من الجوال", - "verifyNewPassword": "التحقق من كلمة المرور", - "EnterPass": "ادخل كلمة المرور", - "send": "إرسال", - "retrivePassword": "استرجع كلمة المرور بإحدى الطرق التالية", - "retriveOnPhone": "سوف نرسل الاختيار إلى رقم هاتفك المحمول المسجل", - "retriveOnEmail": "سوف نرسل الاختيار إلى عنوان بريدك الإلكتروني المسجل", - "enterPhoneForVerfication": "الرجاء إدخال رقم هاتفك وسنرسل لك رمز التحقق", - "selectYourCountry": "اختر بلدك", - "welcomeBack": "مرحبًا بعودتك!!!", - "alreadySigned": " تم تسجيل الدخول", - "emailChangedSuccessfully": "تم تغيير الايميل بنجاح", - "passwordIsUpdated": "تم تحجيث كلمة المرور", - "passwordShouldContains": "كلمة المرور يجب ان تحتوي على رمز رقم حرف كبير حرف صغير", - " successfullyRegistered": "تم التسجيل بنجاح", - "pleaseEnterSamePassword": "ادخل كلمة مرور مطابقه", - "firstNameMandatory": "ادخل الأسم الأول ", - "surnameNameMandatory": "ادخل اسم العائله", - "passwordNameMandatory": "ادخل كلمة المرور", - "enterValidEmail": "ادخل ايميل صحيح", - "pleaseAcceptTerms": "يجب الموافقه على الشروط", - "emailVerified": "تم التحقق من الايميل بنجاح", - "selectMethod": "اختر", - "emailAddress": "ايميل", - "loginSelection": "اختر", - "selectCountryCode": "اختر رمز الدوله", - "selectProviderRole": "اختر نوع الخدمه", - "addPhoneNo": "اضف الهاتف", - "onlyProviderApp": "نأسف هذا التطبيق فقط لمقدمي الخدمات", - "imageUploaded": "تم تحميل الصوره", - "fileLarger": "1KB حجم الملف اكبر من", - "account": "الحساب", - "edit": "تعديل", - "imageDeleted": "تم حذف الصوره", - "dashboard": "الصفحه الرئيسيه", - "pickAddress": "اختر العنوان", - "pickLocation": "اختر الموقع", - "save": "حفظ", - "defineServices": "تحديد الخدمات", - "selectBranch ": "اختر الفرع", - "selectServiceCategory": "اختر فئة الخدمة", - "defineBranches": "تحديد الفروع", - "defineProviders": "تحديد الموفرين", - "closeAccount": "اغلاق الحساب", - "createBranch": "انشاء فرع", - "updateBranch": "فرع التحديث", - "address": "العنوان", - "branchDescription": "وصف الفرع", - "branchName": "اسم الفرع", - "chooseCity": "اختر المدينه", - "chooseCountry": "اختر الدوله", - "selectAttachment": "اختيار مرفق", - "somethingWrong": "هناك خطأ ما", - "documentsUploaded": "تم ارفاق الملف بنجاح", - "update": "تحديث", - "termsOfService": "من خلال إنشاء حساب فإنك توافق على", - "terms": "بنود الخدمة وخصوصية السياسة", - "profileMsg": "أدخل التفاصيل أدناه وأكمل معلومات الملف الشخصي", - "branchInfo": "معلومات الفرع و الخدمات", - "profileCompleted": "الملف الشخصي مكتمل", - "selectLocationMap": "اختر الموقع", - "licensesAndCertifications": "الرخص و الشهادات", - "completeProfile1": "اكمل الملف الشخصي 1/3", - "completeProfile2": "اكمل الملف الشخصي 2/3", - "completeProfile3": "اكمل الملف الشخصي 3/3", - "userInformation": "معلومات المتسخدم", - "faceRecognition": "تحقق مع بصمة الوجه", - "fingerPrint": "تحقق مع بصمة الاصبع", - "whatsapp": "تحقق مع Whatsapp", - "SMS": "رسائل قصيره", - "selectRole": "حدد الدور", - "userRoleOrTitle": "عنوان المستخدم", - "codeSentToEmail": "تم ارسال الرمز للايميل", - "number": "موبايل", - "english": "English", - "provider": "Provider", - "title": "Hello", - "msg": "Hello {} in the {} world ", - "msg_named": "{} are written in the {lang} language", - "clickMe": "Click me", - "profile": { - "reset_password": { - "label": "Reset Password", - "username": "Username", - "password": "password" - } - }, - "clicked": { - "zero": "You clicked {} times!", - "one": "You clicked {} time!", - "two": "You clicked {} times!", - "few": "You clicked {} times!", - "many": "You clicked {} times!", - "other": "You clicked {} times!" - }, - "amount": { - "zero": "Your amount : {} ", - "one": "Your amount : {} ", - "two": "Your amount : {} ", - "few": "Your amount : {} ", - "many": "Your amount : {} ", - "other": "Your amount : {} " - }, - "gender": { - "male": "Hi man ;) ", - "female": "Hello girl :)", - "with_arg": { - "male": "Hi man ;) {}", - "female": "Hello girl :) {}" - } - }, - "reset_locale": "Reset Language", - "insert_otp_code": "ادخل الرمز", - "type_code": "الرجاء كتابة الرمز الذي أرسلناه إلى", - "resend_code": "أعد إرسال الرمز", - "check_code": "التحقق من الشفرة", - "time_will_expire": "إعادة إرسال الرمز بتنسيق", - "sec": "ثانية", - "no_city_available": "لا توجد مدينة متاحة لهذا البلد", - "branch_created": "تم إنشاء الفرع بنجاح", - "branch_updated": "تم تحديث الفرع بنجاح", - "branch_deleted": "تم حذف الفرع بنجاح", - "dashboard_main": "لوحة القيادة / الصفحة الرئيسية", - "logo_brand": "الشعار / العلامة التجارية", - "remove": "إزالة", - "no_branch": "لم يتم إضافة فرع حتى الآن", - "login_once": "الرجاء تسجيل الدخول مرة واحدة", - "defineLicenese": "تحميل التراخيص والشهادات", - "description": "وصف", - "attachFile": "أرفق ملف", - "branchLocation": "معلومات الفرع والموقع", - "tapToEdit": "انقر للتعديل", - "myServiceBranches": "فروع خدمتي", - "enter_licence_detail": "الرجاء إدخال تفاصيل السجلات التجارية وإرفاق صور الترخيص", - "country": "بلد", - "city": "مدينة", - "editServices": "تحرير الخدمات" -}; -static const Map en_US = { - "firstTimeLogIn": "First Time Log In", - "signUp": "Register", - "changeMobile": "Change Mobile", - "notifications": "Notifications", - "general": "General", - "defineLicences": "Register Licences", - "dealershipSettings": "Dealership Settings", - "changePassword": "Change Password", - "retrievePassword": "Retrieve Password", - "changeEmail": "Change Email", - "verify": "Verify", - "verified": "Verified", - "signOut": "Sign Out", - "enterEmail": "Enter Email and Password", - "enterNewEmail": "Enter New Email", - "enterNewPassword": "Enter New Password", - "enterCurrentPassword": "Enter Current Password", - "enterOldPassword": "Enter Old Password", - "confirm": "Confirm", - "completeProfile": "Complete Profile", - "enterNewPhoneNumber": "Enter New Phone Number", - "enterPhoneNumber": "Enter the login credentials", - "continu": "Continue", - "confirmPassword": "Confirm Password", - "createPassword": "Create Password", - "email": "Email", - "firstName": "First Name *", - "surname": "Surname *", - "confirmPass": "Confirm Password *", - "createPass": "Create Password *", - "newPassword": "New Password", - "forgetPassword": "Forget Password", - "forgetPasswordQ": "Forget Password?", - "recover": "Recover", - "forgetPasswordRecover": "Forget Password? Recover", - "editAccount": "Edit Account", - "change": "Change", - "verifyAccount": "Verify Account", - "login": "Login", - "log_in": "Log In", - "welcomeMessage": "Welcome To Mowater", - "welcomeDes": "You one stop place all your car needs", - "forgetPass": "Forget Password ?", - "phoneNumberVerified": "Phone Number Verified", - "verifyNewPassword": "Verify New Password", - "send": "Send", - "EnterPass": "Enter Password ?", - "retrivePassword": "Retrive password by one of following method", - "retriveOnPhone": "We will send the opt to your registered mobile number", - "retriveOnEmail": "We will send the opt to your registered email address", - "enterPhoneForVerfication": "Please enter your phone number We will send you the verification code", - "selectYourCountry": "Select Your Country", - "welcomeBack": "Welcome Back!!!", - "alreadySigned": " Already Signed Up and Logged In", - "emailChangedSuccessfully": "Email is Changed Successfully", - "passwordIsUpdated": "Password is Updated", - "passwordShouldContains": "Password Should contains Character, Number, Capital and small letters,", - " successfullyRegistered": " Successfully Registered, Please login once,", - "pleaseEnterSamePassword": "Please enter same password", - "firstNameMandatory": "First name is mandatory", - "surnameNameMandatory": "Surname is mandatory", - "passwordNameMandatory": "Password is mandatory", - "enterValidEmail": "Enter Valid Email", - "pleaseAcceptTerms": "Please accept terms", - "emailVerified": "Email is verified successfully", - "selectMethod": "Select Method", - "emailAddress": "Email Address", - "loginSelection": "Login Selection", - "selectCountryCode": "Please select Country Code", - "selectProviderRole": "Please select Provider Role", - "addPhoneNo": "Please add Phone No", - "onlyCustomerApp": "Sorry, Only Customer's can log in this app", - "imageUploaded": "Image is uploaded", - "fileLarger": "File is larger then 1KB", - "account": "Account", - "edit": "EDIT", - "imageDeleted": "Image is Deleted", - "dashboard": "Dashboard/Main Page", - "pickAddress": "Pick Address", - "pickLocation": "Pick Location", - "save": "Save", - "defineServices": "Define Services", - "selectBranch ": "Select Branch ", - "selectServiceCategory": "Select Service Category", - "defineBranches": "Define Branches", - "defineProviders": "Define Providers", - "closeAccount": "Close Account", - "createBranch": "Create Branch", - "updateBranch": "Update Branch", - "address": "Address", - "branchDescription": "Branch Description", - "branchName": "Branch Name", - "chooseCity": "Select City", - "chooseCountry": "Choose Country", - "selectAttachment": "Select Attachment", - "somethingWrong": "Something went wrong", - "documentsUploaded": "Documents uploaded successfully", - "update": "Update", - "termsOfService": "By creating an account you agree to our", - "terms": "Terms of Service and Privacy Policy", - "profileMsg": "Enter the details below and complete the profile info", - "branchInfo": "Branch Info and Services", - "profileCompleted": "Profile is Completed", - "selectLocationMap": "Select Location Map", - "licensesAndCertifications": "licenses & certifications", - "completeProfile1": "Complete Profile 1/3", - "completeProfile2": "Complete Profile 2/3", - "completeProfile3": "Complete Profile 3/3", - "userInformation": "User Information", - "provider": "Provider", - "faceRecognition": "Face Recognition", - "fingerPrint": "Finger Print", - "whatsapp": "With Whatsapp", - "SMS": "With SMS", - "selectRole": "Choose Role", - "userRoleOrTitle": "User role or title", - "codeSentToEmail": "Code is sent to email", - "number": "Number", - "english": "عربي", - "title": "Hello", - "msg": "Hello {} in the {} world ", - "msg_named": "{} are written in the {lang} language", - "clickMe": "Click me", - "profile": { - "reset_password": { - "label": "Reset Password", - "username": "Username", - "password": "password" - } - }, - "clicked": { - "zero": "You clicked {} times!", - "one": "You clicked {} time!", - "two": "You clicked {} times!", - "few": "You clicked {} times!", - "many": "You clicked {} times!", - "other": "You clicked {} times!" - }, - "amount": { - "zero": "Your amount : {} ", - "one": "Your amount : {} ", - "two": "Your amount : {} ", - "few": "Your amount : {} ", - "many": "Your amount : {} ", - "other": "Your amount : {} " - }, - "gender": { - "male": "Hi man ;) ", - "female": "Hello girl :)", - "with_arg": { - "male": "Hi man ;) {}", - "female": "Hello girl :) {}" - } - }, - "reset_locale": "Reset Language", - "insert_otp_code": "Enter the code", - "type_code": "Please type the code we sent to", - "resend_code": "Resend Code", - "check_code": "Check Code", - "time_will_expire": "Resend code in", - "sec": "sec", - "no_city_available": "No City Available for this country", - "branch_created": "Branch is successfully created", - "branch_updated": "Branch is successfully Updated", - "branch_deleted": "Branch is successfully Deleted", - "dashboard_main": "Dashboard/Main Page", - "logo_brand": "Logo/Brand", - "remove": "Remove", - "no_branch": "No Branch Added Yet", - "login_once": "Please login once", - "defineLicenese": "Upload Licenses and Certificates", - "description": "Description", - "attachFile": "Attach File", - "branchLocation": "Branch info and Location", - "tapToEdit": "Tap to edit", - "myServiceBranches": "My Service Branches", - "enter_licence_detail": "Please enter the detail for commercial records and attach the license images", - "country": "country", - "city": "city", - "editServices": "Edit Services" -}; -static const Map> mapLocales = {"ar_SA": ar_SA, "en_US": en_US}; -} diff --git a/lib/generated/locale_keys.g.dart b/lib/generated/locale_keys.g.dart deleted file mode 100644 index b3e0e18..0000000 --- a/lib/generated/locale_keys.g.dart +++ /dev/null @@ -1,164 +0,0 @@ -// DO NOT EDIT. This is code generated via package:easy_localization/generate.dart - -abstract class LocaleKeys { - static const firstTimeLogIn = 'firstTimeLogIn'; - static const signUp = 'signUp'; - static const changeMobile = 'changeMobile'; - static const notifications = 'notifications'; - static const general = 'general'; - static const defineLicences = 'defineLicences'; - static const dealershipSettings = 'dealershipSettings'; - static const changePassword = 'changePassword'; - static const retrievePassword = 'retrievePassword'; - static const changeEmail = 'changeEmail'; - static const verify = 'verify'; - static const verified = 'verified'; - static const signOut = 'signOut'; - static const enterEmail = 'enterEmail'; - static const enterNewEmail = 'enterNewEmail'; - static const enterCurrentPassword = 'enterCurrentPassword'; - static const enterNewPassword = 'enterNewPassword'; - static const enterOldPassword = 'enterOldPassword'; - static const confirm = 'confirm'; - static const enterNewPhoneNumber = 'enterNewPhoneNumber'; - static const completeProfile = 'completeProfile'; - static const continu = 'continu'; - static const confirmPassword = 'confirmPassword'; - static const createPassword = 'createPassword'; - static const email = 'email'; - static const firstName = 'firstName'; - static const surname = 'surname'; - static const confirmPass = 'confirmPass'; - static const createPass = 'createPass'; - static const newPassword = 'newPassword'; - static const forgetPassword = 'forgetPassword'; - static const forgetPasswordQ = 'forgetPasswordQ'; - static const recover = 'recover'; - static const forgetPasswordRecover = 'forgetPasswordRecover'; - static const editAccount = 'editAccount'; - static const change = 'change'; - static const verifyAccount = 'verifyAccount'; - static const login = 'login'; - static const log_in = 'log_in'; - static const welcomeMessage = 'welcomeMessage'; - static const welcomeDes = 'welcomeDes'; - static const forgetPass = 'forgetPass'; - static const enterPhoneNumber = 'enterPhoneNumber'; - static const phoneNumberVerified = 'phoneNumberVerified'; - static const verifyNewPassword = 'verifyNewPassword'; - static const EnterPass = 'EnterPass'; - static const send = 'send'; - static const retrivePassword = 'retrivePassword'; - static const retriveOnPhone = 'retriveOnPhone'; - static const retriveOnEmail = 'retriveOnEmail'; - static const enterPhoneForVerfication = 'enterPhoneForVerfication'; - static const selectYourCountry = 'selectYourCountry'; - static const welcomeBack = 'welcomeBack'; - static const alreadySigned = 'alreadySigned'; - static const emailChangedSuccessfully = 'emailChangedSuccessfully'; - static const passwordIsUpdated = 'passwordIsUpdated'; - static const passwordShouldContains = 'passwordShouldContains'; - static const successfullyRegistered = ' successfullyRegistered'; - static const pleaseEnterSamePassword = 'pleaseEnterSamePassword'; - static const firstNameMandatory = 'firstNameMandatory'; - static const surnameNameMandatory = 'surnameNameMandatory'; - static const passwordNameMandatory = 'passwordNameMandatory'; - static const enterValidEmail = 'enterValidEmail'; - static const pleaseAcceptTerms = 'pleaseAcceptTerms'; - static const emailVerified = 'emailVerified'; - static const selectMethod = 'selectMethod'; - static const emailAddress = 'emailAddress'; - static const loginSelection = 'loginSelection'; - static const selectCountryCode = 'selectCountryCode'; - static const selectProviderRole = 'selectProviderRole'; - static const addPhoneNo = 'addPhoneNo'; - static const onlyProviderApp = 'onlyProviderApp'; - static const imageUploaded = 'imageUploaded'; - static const fileLarger = 'fileLarger'; - static const account = 'account'; - static const edit = 'edit'; - static const imageDeleted = 'imageDeleted'; - static const dashboard = 'dashboard'; - static const pickAddress = 'pickAddress'; - static const pickLocation = 'pickLocation'; - static const save = 'save'; - static const defineServices = 'defineServices'; - static const selectBranch = 'selectBranch '; - static const selectServiceCategory = 'selectServiceCategory'; - static const defineBranches = 'defineBranches'; - static const defineProviders = 'defineProviders'; - static const closeAccount = 'closeAccount'; - static const createBranch = 'createBranch'; - static const updateBranch = 'updateBranch'; - static const address = 'address'; - static const branchDescription = 'branchDescription'; - static const branchName = 'branchName'; - static const chooseCity = 'chooseCity'; - static const chooseCountry = 'chooseCountry'; - static const selectAttachment = 'selectAttachment'; - static const somethingWrong = 'somethingWrong'; - static const documentsUploaded = 'documentsUploaded'; - static const update = 'update'; - static const termsOfService = 'termsOfService'; - static const terms = 'terms'; - static const profileMsg = 'profileMsg'; - static const branchInfo = 'branchInfo'; - static const profileCompleted = 'profileCompleted'; - static const selectLocationMap = 'selectLocationMap'; - static const licensesAndCertifications = 'licensesAndCertifications'; - static const completeProfile1 = 'completeProfile1'; - static const completeProfile2 = 'completeProfile2'; - static const completeProfile3 = 'completeProfile3'; - static const userInformation = 'userInformation'; - static const faceRecognition = 'faceRecognition'; - static const fingerPrint = 'fingerPrint'; - static const whatsapp = 'whatsapp'; - static const SMS = 'SMS'; - static const selectRole = 'selectRole'; - static const userRoleOrTitle = 'userRoleOrTitle'; - static const codeSentToEmail = 'codeSentToEmail'; - static const number = 'number'; - static const phoneNumber = 'phoneNumber'; - static const english = 'english'; - static const provider = 'provider'; - static const title = 'title'; - static const msg = 'msg'; - static const msg_named = 'msg_named'; - static const clickMe = 'clickMe'; - static const profile_reset_password_label = 'profile.reset_password.label'; - static const profile_reset_password_username = 'profile.reset_password.username'; - static const profile_reset_password_password = 'profile.reset_password.password'; - static const profile_reset_password = 'profile.reset_password'; - static const profile = 'profile'; - static const clicked = 'clicked'; - static const amount = 'amount'; - static const gender_with_arg = 'gender.with_arg'; - static const gender = 'gender'; - static const reset_locale = 'reset_locale'; - static const insert_otp_code = 'insert_otp_code'; - static const type_code = 'type_code'; - static const resend_code = 'resend_code'; - static const check_code = 'check_code'; - static const time_will_expire = 'time_will_expire'; - static const sec = 'sec'; - static const no_city_available = 'no_city_available'; - static const branch_created = 'branch_created'; - static const branch_updated = 'branch_updated'; - static const branch_deleted = 'branch_deleted'; - static const dashboard_main = 'dashboard_main'; - static const logo_brand = 'logo_brand'; - static const remove = 'remove'; - static const no_branch = 'no_branch'; - static const login_once = 'login_once'; - static const defineLicenese = 'defineLicenese'; - static const description = 'description'; - static const attachFile = 'attachFile'; - static const branchLocation = 'branchLocation'; - static const tapToEdit = 'tapToEdit'; - static const myServiceBranches = 'myServiceBranches'; - static const enter_licence_detail = 'enter_licence_detail'; - static const country = 'country'; - static const city = 'city'; - static const editServices = 'editServices'; - -} diff --git a/lib/main.dart b/lib/main.dart index f773277..e067a97 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,82 +1,89 @@ -import 'package:car_provider_app/classes/app_state.dart'; -import 'package:car_provider_app/config/app_provider.dart'; -import 'package:car_provider_app/models/post_params_model.dart'; -import 'package:car_provider_app/theme/app_theme.dart'; +import 'package:car_provider_app/config/provider_dependencies.dart'; +import 'package:car_provider_app/repositories/branch_repo.dart'; +import 'package:car_provider_app/view_models/branch_view_model.dart'; +import 'package:car_provider_app/view_models/dashboard_view_model.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; +import 'package:mc_common_app/classes/app_state.dart'; +import 'package:mc_common_app/classes/consts.dart'; +import 'package:mc_common_app/config/dependencies.dart'; +import 'package:mc_common_app/config/routes.dart'; +import 'package:mc_common_app/models/post_params_model.dart'; +import 'package:mc_common_app/repositories/common_repo.dart'; +import 'package:mc_common_app/repositories/user_repo.dart'; +import 'package:mc_common_app/services/services.dart'; +import 'package:mc_common_app/theme/app_theme.dart'; +import 'package:mc_common_app/utils/enums.dart'; +import 'package:mc_common_app/view_models/base_view_model.dart'; +import 'package:mc_common_app/view_models/user_view_model.dart'; +import 'package:mc_common_app/widgets/extensions/extensions_widget.dart'; +import 'package:provider/provider.dart'; +import 'package:provider/single_child_widget.dart'; import 'package:sizer/sizer.dart'; -import 'config/routes.dart'; +import 'config/provider_routes.dart'; Future main() async { WidgetsFlutterBinding.ensureInitialized(); - + ProviderAppDependencies.addDependencies(); await EasyLocalization.ensureInitialized(); - runApp( - EasyLocalization( - supportedLocales: [Locale('ar', 'SA'), Locale('en', 'US')], - fallbackLocale: Locale('en', 'US'), - // startLocale: Locale('ar', 'SA'), - path: 'resources/langs', - child: MyApp(), - ), - ); + ProviderAppRoutes.routes.addAll(AppRoutes.routes); + runApp(MultiProvider( + providers: [ + ChangeNotifierProvider( + create: (_) => BaseVM(), + ), + ChangeNotifierProvider( + create: (_) => DashboardVM( + userRepo: injector.get(), + commonServices: injector.get(), + ), + ), + ChangeNotifierProvider( + create: (_) => UserVM(userRepo: injector.get()), + ), + ChangeNotifierProvider( + create: (_) => BranchVM( + branchRepo: injector.get(), + commonServices: injector.get(), + commonRepo: injector.get(), + ), + ), + ], + child: const MyApp(), + ).setupLocale()); } // todo terminal command to genertate translation files -// flutter pub run easy_localization:generate --source-dir ./resources/langs +// flutter pub run easy_localization:generate --source-dir ./assets/langs // todo terminal command to genertate translation keys -// flutter pub run easy_localization:generate --source-dir ./resources/langs -f keys -o locale_keys.g.dart +// flutter pub run easy_localization:generate --source-dir ./assets/langs -f keys -o locale_keys.g.dart // command to generate languages data from json class MyApp extends StatelessWidget { -//This widget is the root of your application. - MyApp() {} + const MyApp({Key? key}) : super(key: key); @override Widget build(BuildContext context) { - return AppProvider( - child: Sizer( - builder: (context, orientation, deviceType) { - AppState().setPostParamsModel( - PostParamsModel( - languageID: EasyLocalization.of(context)?.locale.languageCode == "ar" ? 1 : 2, - ), - ); - return MaterialApp( - theme: AppTheme.getTheme(EasyLocalization.of(context)?.locale.languageCode == "ar"), - debugShowCheckedModeBanner: false, - localizationsDelegates: context.localizationDelegates, - supportedLocales: context.supportedLocales, - locale: context.locale, - initialRoute: AppRoutes.initialRoute, - routes: AppRoutes.routes, - ); - }, - ), + return Sizer( + builder: (context, orientation, deviceType) { + injector.get().setAppType(AppType.provider); + AppState().setPostParamsModel( + PostParamsModel( + languageID: EasyLocalization.of(context)?.locale.languageCode == "ar" ? 1 : 2, + ), + ); + ThemeData data = AppTheme.getTheme(isArabic: EasyLocalization.of(context)?.locale.languageCode == "ar"); + return MaterialApp( + theme: AppTheme.getTheme(isArabic: EasyLocalization.of(context)?.locale.languageCode == "ar"), + debugShowCheckedModeBanner: false, + localizationsDelegates: context.localizationDelegates, + supportedLocales: context.supportedLocales, + locale: context.locale, + initialRoute: AppRoutes.initialRoute, + routes: ProviderAppRoutes.routes, + ); + }, ); } } -// class MyApp extends StatelessWidget { -// // This widget is the root of your application. -// MyApp() {} -// -// @override -// Widget build(BuildContext context) { -// return AppProvider( -// child: Sizer( -// builder: (context, orientation, deviceType) { -// return MaterialApp( -// theme: AppTheme.getTheme(), -// debugShowCheckedModeBanner: false, -// localizationsDelegates: context.localizationDelegates, -// supportedLocales: context.supportedLocales, -// locale: context.locale, -// initialRoute: AppRoutes.initialRoute, -// routes: AppRoutes.routes, -// ); -// }, -// ), -// ); -// } -// } diff --git a/lib/models/account.dart b/lib/models/account.dart deleted file mode 100644 index 5e51f95..0000000 --- a/lib/models/account.dart +++ /dev/null @@ -1,43 +0,0 @@ -// To parse this JSON data, do -// -// final account = accountFromJson(jsonString); - -import 'dart:convert'; - -import 'package:car_provider_app/models/parent_list.dart'; - - - -Account accountFromJson(String str) => Account.fromJson(json.decode(str)); - -String accountToJson(Account data) => json.encode(data.toJson()); - -class Account { - Account({ - required this.parentList, - required this.selectedItem, - }); - - List? parentList; - int selectedItem; - - factory Account.fromJson(Map json) => Account( - parentList: json["parentList"] == null - ? null - : List.from( - json["parentList"].map((x) => ParentList.fromJson(x))), - selectedItem: - json["selectedItem"] == null ? null : json["selectedItem"], - ); - - Map toJson() => { - "parentList": parentList == null - ? null - : List.from(parentList!.map((x) => x.toJson())), - "selectedItem": selectedItem == null ? null : selectedItem, - }; - - Map toJsonData() => { - "selectedItem": selectedItem == null ? null : selectedItem, - }; -} diff --git a/lib/models/config_model.dart b/lib/models/config_model.dart deleted file mode 100644 index 0245ede..0000000 --- a/lib/models/config_model.dart +++ /dev/null @@ -1,12 +0,0 @@ -class ConfigModel { - ConfigModel(this.endpoint, this.organizationName); - - String endpoint; - - String organizationName; - - factory ConfigModel.fromJson(Map json) => - ConfigModel("", ""); - -// Map toJson() => _$ConfigModelToJson(this); -} diff --git a/lib/models/content_info_model.dart b/lib/models/content_info_model.dart deleted file mode 100644 index 4eec746..0000000 --- a/lib/models/content_info_model.dart +++ /dev/null @@ -1,65 +0,0 @@ -class ContentInfoModel { - int? totalItemsCount; - int? statusCode; - String? message; - List? data; - - ContentInfoModel({this.totalItemsCount, this.statusCode, this.message, this.data}); - - ContentInfoModel.fromJson(Map json) { - totalItemsCount = json['totalItemsCount']; - statusCode = json['statusCode']; - message = json['message']; - if (json['data'] != null) { - data = []; - json['data'].forEach((v) { - data?.add(new ContentInfoDataModel.fromJson(v)); - }); - } - } - - Map toJson() { - final Map data = new Map(); - data['totalItemsCount'] = this.totalItemsCount; - data['statusCode'] = this.statusCode; - data['message'] = this.message; - if (this.data != null) { - data['data'] = this.data?.map((v) => v.toJson()).toList(); - } - return data; - } -} - -class ContentInfoDataModel { - int? contentInfoId; - int? contentTypeId; - String? content; - String? contentTypeNameEn; - String? contentTypeNameAr; - String? fileName; - String? exposeFilePath; - - ContentInfoDataModel({this.contentInfoId, this.contentTypeId, this.content, this.contentTypeNameEn, this.contentTypeNameAr, this.fileName, this.exposeFilePath}); - - ContentInfoDataModel.fromJson(Map json) { - contentInfoId = json['contentInfoId']; - contentTypeId = json['contentTypeId']; - content = json['content']; - contentTypeNameEn = json['contentTypeNameEn']; - contentTypeNameAr = json['contentTypeNameAr']; - fileName = json['fileName']; - exposeFilePath = json['exposeFilePath']; - } - - Map toJson() { - final Map data = new Map(); - data['contentInfoId'] = this.contentInfoId; - data['contentTypeId'] = this.contentTypeId; - data['content'] = this.content; - data['contentTypeNameEn'] = this.contentTypeNameEn; - data['contentTypeNameAr'] = this.contentTypeNameAr; - data['fileName'] = this.fileName; - data['exposeFilePath'] = this.exposeFilePath; - return data; - } -} diff --git a/lib/models/m_response.dart b/lib/models/m_response.dart deleted file mode 100644 index bd9d3a1..0000000 --- a/lib/models/m_response.dart +++ /dev/null @@ -1,33 +0,0 @@ -// To parse this JSON data, do -// -// final mResponse = mResponseFromJson(jsonString); - -import 'dart:convert'; - -MResponse mResponseFromJson(String str) => MResponse.fromJson(json.decode(str)); - -String mResponseToJson(MResponse data) => json.encode(data.toJson()); - -class MResponse { - MResponse({ - this.totalItemsCount, - this.messageStatus, - this.message, - }); - - int? totalItemsCount; - int? messageStatus; - String? message; - - factory MResponse.fromJson(Map json) => MResponse( - totalItemsCount: json["totalItemsCount"] == null ? null : json["totalItemsCount"], - messageStatus: json["messageStatus"] == null ? null : json["messageStatus"], - message: json["message"] == null ? null : json["message"], - ); - - Map toJson() => { - "totalItemsCount": totalItemsCount == null ? null : totalItemsCount, - "messageStatus": messageStatus == null ? null : messageStatus, - "message": message == null ? null : message, - }; -} diff --git a/lib/models/member_model.dart b/lib/models/member_model.dart deleted file mode 100644 index d968827..0000000 --- a/lib/models/member_model.dart +++ /dev/null @@ -1,62 +0,0 @@ -class MemberModel { - int? totalItemsCount; - int? statusCode; - String? message; - List? data; - - MemberModel({this.totalItemsCount, this.statusCode, this.message, this.data}); - - MemberModel.fromJson(Map json) { - totalItemsCount = json['totalItemsCount']; - statusCode = json['statusCode']; - message = json['message']; - if (json['data'] != null) { - data = []; - json['data'].forEach((v) { - data?.add(new MemberDataModel.fromJson(v)); - }); - } - } - - Map toJson() { - final Map data = new Map(); - data['totalItemsCount'] = this.totalItemsCount; - data['statusCode'] = this.statusCode; - data['message'] = this.message; - if (this.data != null) { - data['data'] = this.data?.map((v) => v.toJson()).toList(); - } - return data; - } -} - -class MemberDataModel { - int? committeeId; - String? firstName; - String? lastName; - String? description; - String? picture; - int? orderNo; - - MemberDataModel({this.committeeId, this.firstName, this.lastName, this.description, this.picture, this.orderNo}); - - MemberDataModel.fromJson(Map json) { - committeeId = json['committeeId']; - firstName = json['firstName']; - lastName = json['lastName']; - description = json['description']; - picture = json['picture']; - orderNo = json['orderNo']; - } - - Map toJson() { - final Map data = new Map(); - data['committeeId'] = this.committeeId; - data['firstName'] = this.firstName; - data['lastName'] = this.lastName; - data['description'] = this.description; - data['picture'] = this.picture; - data['orderNo'] = this.orderNo; - return data; - } -} diff --git a/lib/models/parent_list.dart b/lib/models/parent_list.dart deleted file mode 100644 index 3f2286f..0000000 --- a/lib/models/parent_list.dart +++ /dev/null @@ -1,26 +0,0 @@ -class ParentList { - ParentList({ - required this.dbId, - required this.text, - required this.path, - required this.isSelected, - }); - - int dbId; - String text; - String path; - bool isSelected; - - factory ParentList.fromJson(Map json) => ParentList( - dbId: json["dbId"] == null ? null : json["dbId"], - text: json["text"] == null ? null : json["text"], - path: json["path"] == null ? null : json["path"], - isSelected: false, - ); - - Map toJson() => { - "dbId": dbId == null ? null : dbId, - "text": text == null ? null : text, - "path": path == null ? null : path, - }; -} diff --git a/lib/models/post_params_model.dart b/lib/models/post_params_model.dart deleted file mode 100644 index c9e9a72..0000000 --- a/lib/models/post_params_model.dart +++ /dev/null @@ -1,36 +0,0 @@ - - -class PostParamsModel { - double? versionID; - int? channel; - int? languageID; - String? mobileType; - String? logInTokenID; - String? tokenID; - - PostParamsModel({this.versionID, this.channel, this.languageID, this.mobileType, this.logInTokenID, this.tokenID}); - - PostParamsModel.fromJson(Map json) { - versionID = json['VersionID']; - channel = json['Channel']; - languageID = json['LanguageID']; - mobileType = json['MobileType']; - logInTokenID = json['LogInTokenID']; - tokenID = json['TokenID']; - } - - Map toJson() { - final Map data = new Map(); - data['VersionID'] = this.versionID; - data['Channel'] = this.channel; - data['LanguageID'] = this.languageID; - data['MobileType'] = this.mobileType; - data['LogInTokenID'] = this.logInTokenID; - data['TokenID'] = this.tokenID; - return data; - } - - set setLogInTokenID(String? token) => logInTokenID = token; - - set setTokenID(String? token) => tokenID = token; -} diff --git a/lib/models/profile/branch.dart b/lib/models/profile/branch.dart deleted file mode 100644 index b401131..0000000 --- a/lib/models/profile/branch.dart +++ /dev/null @@ -1,89 +0,0 @@ -// To parse this JSON data, do -// -// final branch = branchFromJson(jsonString); - -import 'dart:convert'; - -Branch branchFromJson(String str) => Branch.fromJson(json.decode(str)); - -String branchToJson(Branch data) => json.encode(data.toJson()); - -class Branch { - Branch({ - this.totalItemsCount, - this.data, - this.messageStatus, - this.message, - }); - - int? totalItemsCount; - List? data; - int? messageStatus; - String? message; - - factory Branch.fromJson(Map json) => Branch( - totalItemsCount: json["totalItemsCount"] == null ? null : json["totalItemsCount"], - data: json["data"] == null ? null : List.from(json["data"].map((x) => BranchData.fromJson(x))), - messageStatus: json["messageStatus"] == null ? null : json["messageStatus"], - message: json["message"] == null ? null : json["message"], - ); - - Map toJson() => { - "totalItemsCount": totalItemsCount == null ? null : totalItemsCount, - "data": data == null ? null : List.from(data!.map((x) => x.toJson())), - "messageStatus": messageStatus == null ? null : messageStatus, - "message": message == null ? null : message, - }; -} - -class BranchData { - BranchData({ - this.id, - this.serviceProviderId, - this.branchName, - this.branchDescription, - this.countryID, - this.cityId, - this.address, - this.latitude, - this.longitude, - this.status, - }); - - int? id; - int? serviceProviderId; - String? branchName; - String? branchDescription; - int? countryID; - int? cityId; - String? address; - String? latitude; - String? longitude; - int? status; - - - factory BranchData.fromJson(Map json) => BranchData( - id: json["id"] == null ? null : json["id"], - serviceProviderId: json["serviceProviderID"] == null ? null : json["serviceProviderID"], - branchName: json["branchName"] == null ? null : json["branchName"], - branchDescription: json["branchDescription"] == null ? null : json["branchDescription"], - countryID: json["countryID"] == null ? null : json["countryID"], - cityId: json["cityID"] == null ? null : json["cityID"], - address: json["address"] == null ? null : json["address"], - latitude: json["latitude"] == null ? null : json["latitude"], - longitude: json["longitude"] == null ? null : json["longitude"], - status: json["status"] == null ? null : json["status"], - ); - - Map toJson() => { - "id": id == null ? null : id, - "serviceProviderID": serviceProviderId == null ? null : serviceProviderId, - "branchName": branchName == null ? null : branchName, - "branchDescription": branchDescription == null ? null : branchDescription, - "cityID": cityId == null ? null : cityId, - "address": address == null ? null : address, - "latitude": latitude == null ? null : latitude, - "longitude": longitude == null ? null : longitude, - "status": status == null ? null : status, - }; -} diff --git a/lib/models/profile/branch2.dart b/lib/models/profile/branch2.dart deleted file mode 100644 index 25e1141..0000000 --- a/lib/models/profile/branch2.dart +++ /dev/null @@ -1,182 +0,0 @@ -// To parse this JSON data, do -// -// final branch2 = branch2FromJson(jsonString); - -import 'dart:convert'; - -import 'categroy.dart'; - -Branch2 branch2FromJson(String str) => Branch2.fromJson(json.decode(str)); - -String branch2ToJson(Branch2 data) => json.encode(data.toJson()); - -class Branch2 { - Branch2({ - this.messageStatus, - this.totalItemsCount, - this.data, - this.message, - }); - - final int? messageStatus; - final int? totalItemsCount; - final Data? data; - final String? message; - - factory Branch2.fromJson(Map json) => Branch2( - messageStatus: json["messageStatus"] == null ? null : json["messageStatus"], - totalItemsCount: json["totalItemsCount"] == null ? null : json["totalItemsCount"], - data: json["data"] == null ? null : Data.fromJson(json["data"]), - message: json["message"] == null ? null : json["message"], - ); - - Map toJson() => { - "messageStatus": messageStatus == null ? null : messageStatus, - "totalItemsCount": totalItemsCount == null ? null : totalItemsCount, - "data": data == null ? null : data!.toJson(), - "message": message == null ? null : message, - }; -} - -class Data { - Data({ - this.id, - this.companyName, - this.countryName, - this.companyDescription, - this.allDocStatus, - this.isValidSubscription, - this.userId, - this.serviceProviderBranch, - this.countryID, - }); - - final int? id; - final String? companyName; - final String? countryName; - int? countryID; - final String? companyDescription; - final int? allDocStatus; - final bool? isValidSubscription; - final String? userId; - final List? serviceProviderBranch; - - factory Data.fromJson(Map json) => Data( - id: json["id"] == null ? null : json["id"], - companyName: json["companyName"] == null ? null : json["companyName"], - countryName: json["countryName"] == null ? null : json["countryName"], - countryID: json["countryID"] == null ? null : json["countryID"], - companyDescription: json["companyDescription"] == null ? null : json["companyDescription"], - allDocStatus: json["allDocStatus"] == null ? null : json["allDocStatus"], - isValidSubscription: json["isValidSubscription"] == null ? null : json["isValidSubscription"], - userId: json["userID"] == null ? null : json["userID"], - serviceProviderBranch: json["serviceProviderBranch"] == null ? null : List.from(json["serviceProviderBranch"].map((x) => ServiceProviderBranch.fromJson(x))), - ); - - Map toJson() => { - "id": id == null ? null : id, - "companyName": companyName == null ? null : companyName, - "companyDescription": companyDescription == null ? null : companyDescription, - "allDocStatus": allDocStatus == null ? null : allDocStatus, - "isValidSubscription": isValidSubscription == null ? null : isValidSubscription, - "userID": userId == null ? null : userId, - "serviceProviderBranch": serviceProviderBranch == null ? null : List.from(serviceProviderBranch!.map((x) => x.toJson())), - }; -} - -class ServiceProviderBranch { - ServiceProviderBranch({ - this.id, - this.cityId, - this.cityName, - this.branchName, - this.branchDescription, - this.address, - this.latitude, - this.longitude, - this.status, - this.serviceProviderServices, - this.countryID, - this.countryName, - this.categories, - }); - - final int? id; - int? countryID; - String? countryName; - final int? cityId; - final dynamic? cityName; - final String? branchName; - final String? branchDescription; - final String? address; - final String? latitude; - final String? longitude; - final int? status; - final List? serviceProviderServices; - List? categories; - - factory ServiceProviderBranch.fromJson(Map json) => ServiceProviderBranch( - id: json["id"] == null ? null : json["id"], - countryID: 0, - countryName: "", - cityId: json["cityID"] == null ? null : json["cityID"], - cityName: json["cityName"], - branchName: json["branchName"] == null ? null : json["branchName"], - branchDescription: json["branchDescription"] == null ? null : json["branchDescription"], - address: json["address"] == null ? null : json["address"], - latitude: json["latitude"] == null ? null : json["latitude"], - longitude: json["longitude"] == null ? null : json["longitude"], - status: json["status"] == null ? null : json["status"], - serviceProviderServices: json["serviceProviderServices"] == null ? null : List.from(json["serviceProviderServices"].map((x) => ServiceProviderService.fromJson(x))), - categories: [], - ); - - Map toJson() => { - "id": id == null ? null : id, - "cityID": cityId == null ? null : cityId, - "cityName": cityName, - "branchName": branchName == null ? null : branchName, - "branchDescription": branchDescription == null ? null : branchDescription, - "address": address == null ? null : address, - "latitude": latitude == null ? null : latitude, - "longitude": longitude == null ? null : longitude, - "status": status == null ? null : status, - "serviceProviderServices": serviceProviderServices == null ? null : List.from(serviceProviderServices!.map((x) => x.toJson())), - }; -} - -class ServiceProviderService { - ServiceProviderService({ - this.serviceId, - this.serviceName, - this.serviceNameN, - this.categoryId, - this.categoryName, - this.serviceStatus, - }); - - final int? serviceId; - final String? serviceName; - final String? serviceNameN; - final int? categoryId; - final String? categoryName; - final int? serviceStatus; - - factory ServiceProviderService.fromJson(Map json) => ServiceProviderService( - serviceId: json["serviceID"] == null ? null : json["serviceID"], - serviceName: json["serviceName"] == null ? null : json["serviceName"], - serviceNameN: json["serviceNameN"] == null ? null : json["serviceNameN"], - categoryId: json["categoryID"] == null ? null : json["categoryID"], - categoryName: json["categoryName"] == null ? null : json["categoryName"], - serviceStatus: json["serviceStatus"] == null ? null : json["serviceStatus"], - ); - - Map toJson() => { - "serviceID": serviceId == null ? null : serviceId, - "serviceName": serviceName == null ? null : serviceName, - "serviceNameN": serviceNameN == null ? null : serviceNameN, - "categoryID": categoryId == null ? null : categoryId, - "categoryName": categoryName == null ? null : categoryName, - "serviceStatus": serviceStatus == null ? null : serviceStatus, - }; -} diff --git a/lib/models/profile/categroy.dart b/lib/models/profile/categroy.dart deleted file mode 100644 index a8395d3..0000000 --- a/lib/models/profile/categroy.dart +++ /dev/null @@ -1,80 +0,0 @@ -// To parse this JSON data, do -// -// final category = categoryFromJson(jsonString); - -import 'dart:convert'; - -import 'package:equatable/equatable.dart'; - -import 'branch2.dart'; - -Category categoryFromJson(String str) => Category.fromJson(json.decode(str)); - -String categoryToJson(Category data) => json.encode(data.toJson()); - -class Category { - Category({ - this.totalItemsCount, - this.data, - this.messageStatus, - this.message, - }); - - int? totalItemsCount; - List? data; - int? messageStatus; - String? message; - - factory Category.fromJson(Map json) => Category( - totalItemsCount: json["totalItemsCount"] == null ? null : json["totalItemsCount"], - data: json["data"] == null ? null : List.from(json["data"].map((x) => CategoryData.fromJson(x))), - messageStatus: json["messageStatus"] == null ? null : json["messageStatus"], - message: json["message"] == null ? null : json["message"], - ); - - Map toJson() => { - "totalItemsCount": totalItemsCount == null ? null : totalItemsCount, - "data": data == null ? null : List.from(data!.map((x) => x.toJson())), - "messageStatus": messageStatus == null ? null : messageStatus, - "message": message == null ? null : message, - }; -} - -// ignore: must_be_immutable -class CategoryData extends Equatable { - CategoryData({ - this.id, - this.categoryName, - this.categoryNameN, - this.serviceCategoryIconUrl, - this.serviceCategoryImageUrl, - this.services, - }); - - int? id; - String? categoryName; - String? categoryNameN; - dynamic? serviceCategoryIconUrl; - dynamic? serviceCategoryImageUrl; - List? services; - - factory CategoryData.fromJson(Map json) => CategoryData( - id: json["id"] == null ? null : json["id"], - categoryName: json["categoryName"] == null ? null : json["categoryName"], - categoryNameN: json["categoryNameN"] == null ? null : json["categoryNameN"], - serviceCategoryIconUrl: json["serviceCategoryIconUrl"], - serviceCategoryImageUrl: json["serviceCategoryImageUrl"], - services: [], - ); - - Map toJson() => { - "id": id == null ? null : id, - "categoryName": categoryName == null ? null : categoryName, - "categoryNameN": categoryNameN == null ? null : categoryNameN, - "serviceCategoryIconUrl": serviceCategoryIconUrl, - "serviceCategoryImageUrl": serviceCategoryImageUrl, - }; - - @override - List get props => [id ?? 0]; -} diff --git a/lib/models/profile/document.dart b/lib/models/profile/document.dart deleted file mode 100644 index 0876cb0..0000000 --- a/lib/models/profile/document.dart +++ /dev/null @@ -1,86 +0,0 @@ -// To parse this JSON data, do -// -// final document = documentFromJson(jsonString); - -import 'dart:convert'; - -Document documentFromJson(String str) => Document.fromJson(json.decode(str)); - -String documentToJson(Document data) => json.encode(data.toJson()); - -class Document { - Document({ - this.totalItemsCount, - this.data, - this.messageStatus, - this.message, - }); - - int? totalItemsCount; - List? data; - int? messageStatus; - String? message; - - factory Document.fromJson(Map json) => Document( - totalItemsCount: json["totalItemsCount"] == null ? null : json["totalItemsCount"], - data: json["data"] == null ? null : List.from(json["data"].map((x) => DocumentData.fromJson(x))), - messageStatus: json["messageStatus"] == null ? null : json["messageStatus"], - message: json["message"] == null ? null : json["message"], - ); - - Map toJson() => { - "totalItemsCount": totalItemsCount == null ? null : totalItemsCount, - "data": data == null ? null : List.from(data!.map((x) => x.toJson())), - "messageStatus": messageStatus == null ? null : messageStatus, - "message": message == null ? null : message, - }; -} - -class DocumentData { - DocumentData({ - this.id, - this.serviceProviderId, - this.documentId, - this.documentUrl, - this.status, - this.comment, - this.isActive, - this.document, - this.fileExt, - this.documentName, - }); - - int? id; - int? serviceProviderId; - int? documentId; - dynamic? documentUrl; - int? status; - dynamic? comment; - bool? isActive; - String? document; - String? fileExt; - String? documentName; - - factory DocumentData.fromJson(Map json) => DocumentData( - id: json["id"] == null ? null : json["id"], - serviceProviderId: json["serviceProviderID"] == null ? null : json["serviceProviderID"], - documentId: json["documentID"] == null ? null : json["documentID"], - documentUrl: json["documentURL"], - status: json["status"] == null ? null : json["status"], - comment: json["comment"], - isActive: json["isActive"] == null ? null : json["isActive"], - document: null, - fileExt: null, - documentName: json["documentName"] == null ? null : json["documentName"], - ); - - Map toJson() => { - "id": id == null ? null : id, - "serviceProviderID": serviceProviderId == null ? null : serviceProviderId, - "documentID": documentId == null ? null : documentId, - "documentURL": documentUrl, - "status": status == null ? null : status, - "comment": comment, - "isActive": isActive == null ? null : isActive, - }; -} diff --git a/lib/models/profile/services.dart b/lib/models/profile/services.dart deleted file mode 100644 index d296300..0000000 --- a/lib/models/profile/services.dart +++ /dev/null @@ -1,80 +0,0 @@ -// To parse this JSON data, do -// -// final services = servicesFromJson(jsonString); - -import 'dart:convert'; - -Services servicesFromJson(String str) => Services.fromJson(json.decode(str)); - -String servicesToJson(Services data) => json.encode(data.toJson()); - -class Services { - Services({ - this.totalItemsCount, - this.data, - this.messageStatus, - this.message, - }); - - int? totalItemsCount; - List? data; - int? messageStatus; - String? message; - - factory Services.fromJson(Map json) => Services( - totalItemsCount: json["totalItemsCount"] == null ? null : json["totalItemsCount"], - data: json["data"] == null ? null : List.from(json["data"].map((x) => ServicesData.fromJson(x))), - messageStatus: json["messageStatus"] == null ? null : json["messageStatus"], - message: json["message"] == null ? null : json["message"], - ); - - Map toJson() => { - "totalItemsCount": totalItemsCount == null ? null : totalItemsCount, - "data": data == null ? null : List.from(data!.map((x) => x.toJson())), - "messageStatus": messageStatus == null ? null : messageStatus, - "message": message == null ? null : message, - }; -} - -class ServicesData { - ServicesData({ - this.id, - this.description, - this.descriptionN, - this.serviceIconUrl, - this.serviceImageUrl, - this.serviceCategoryId, - this.categoryName, - this.isSelected, - }); - - int? id; - String? description; - String? descriptionN; - dynamic? serviceIconUrl; - dynamic? serviceImageUrl; - int? serviceCategoryId; - dynamic? categoryName; - bool? isSelected; - - factory ServicesData.fromJson(Map json) => ServicesData( - id: json["id"] == null ? null : json["id"], - description: json["description"] == null ? null : json["description"], - descriptionN: json["descriptionN"] == null ? null : json["descriptionN"], - serviceIconUrl: json["serviceIconUrl"], - serviceImageUrl: json["serviceImageUrl"], - serviceCategoryId: json["serviceCategoryID"] == null ? null : json["serviceCategoryID"], - categoryName: json["categoryName"], - isSelected: false, - ); - - Map toJson() => { - "id": id == null ? null : id, - "description": description == null ? null : description, - "descriptionN": descriptionN == null ? null : descriptionN, - "serviceIconUrl": serviceIconUrl, - "serviceImageUrl": serviceImageUrl, - "serviceCategoryID": serviceCategoryId == null ? null : serviceCategoryId, - "categoryName": categoryName, - }; -} diff --git a/lib/models/response_models.dart b/lib/models/response_models.dart deleted file mode 100644 index 872893b..0000000 --- a/lib/models/response_models.dart +++ /dev/null @@ -1,34 +0,0 @@ -/// -/// This example was taken from -/// https://flutter.dev/docs/development/data-and-backend/json -/// - -/// This allows the `User` class to access private members in -/// the generated file. The value for this is *.g.dart, where -/// the star denotes the source file name. - -/// An annotation for the code generator to know that this class needs the -/// JSON serialization logic to be generated. - -class BackendResponse { - BackendResponse({required this.id, required this.isOk, required this.result}); - - int id; - bool isOk; - dynamic result; - - /// A necessary factory constructor for creating a new User instance - /// from a map. Pass the map to the generated `_$UserFromJson()` constructor. - /// The constructor is named after the source class, in this case, User. - factory BackendResponse.fromJson(Map json) => - BackendResponse( - id: 1, - isOk: false, - result: null, - ); -// -// /// `toJson` is the convention for a class to declare support for serialization -// /// to JSON. The implementation simply calls the private, generated -// /// helper method `_$UserToJson`. -// Map toJson() => _$BackendResponseToJson(this); -} diff --git a/lib/models/surah_model.dart b/lib/models/surah_model.dart deleted file mode 100644 index acc171a..0000000 --- a/lib/models/surah_model.dart +++ /dev/null @@ -1,74 +0,0 @@ -class SurahModel { - int? totalItemsCount; - int? statusCode; - String? message; - List? data; - - SurahModel({this.totalItemsCount, this.statusCode, this.message, this.data}); - - SurahModel.fromJson(Map json) { - totalItemsCount = json['totalItemsCount']; - statusCode = json['statusCode']; - message = json['message']; - if (json['data'] != null) { - data = []; - json['data'].forEach((v) { - data?.add(SurahModelData.fromJson(v)); - }); - } - } - - Map toJson() { - final Map data = new Map(); - data['totalItemsCount'] = totalItemsCount; - data['statusCode'] = statusCode; - data['message'] = message; - if (this.data != null) { - data['data'] = this.data?.map((v) => v.toJson()).toList(); - } - return data; - } -} - -class SurahModelData { - int? id; - int? surahID; - String? nameAR; - String? nameEN; - int? numberOfAyahs; - String? englishNameTranslation; - int? revelationID; - String? revelationType; - int? startPageNo; - int? endPageNo; - - SurahModelData({this.id, this.surahID, this.nameAR, this.nameEN, this.numberOfAyahs, this.englishNameTranslation, this.revelationID, this.revelationType, this.startPageNo, this.endPageNo}); - - SurahModelData.fromJson(Map json) { - id = json['id']; - surahID = json['surahID']; - nameAR = json['nameAR']; - nameEN = json['nameEN']; - numberOfAyahs = json['numberOfAyahs']; - englishNameTranslation = json['englishNameTranslation']; - revelationID = json['revelation_ID']; - revelationType = json['revelationType']; - startPageNo = json['startPageNo']; - endPageNo = json['endPageNo']; - } - - Map toJson() { - final Map data = new Map(); - data['id'] = this.id; - data['surahID'] = this.surahID; - data['nameAR'] = this.nameAR; - data['nameEN'] = this.nameEN; - data['numberOfAyahs'] = this.numberOfAyahs; - data['englishNameTranslation'] = this.englishNameTranslation; - data['revelation_ID'] = this.revelationID; - data['revelationType'] = this.revelationType; - data['startPageNo'] = this.startPageNo; - data['endPageNo'] = this.endPageNo; - return data; - } -} diff --git a/lib/models/user/basic_otp.dart b/lib/models/user/basic_otp.dart deleted file mode 100644 index 647a488..0000000 --- a/lib/models/user/basic_otp.dart +++ /dev/null @@ -1,61 +0,0 @@ -// To parse this JSON data, do -// -// final basicOtp = basicOtpFromJson(jsonString); - -import 'dart:convert'; - -BasicOtp basicOtpFromJson(String str) => BasicOtp.fromJson(json.decode(str)); - -String basicOtpToJson(BasicOtp data) => json.encode(data.toJson()); - -class BasicOtp { - BasicOtp({ - this.totalItemsCount, - this.data, - this.messageStatus, - this.message, - }); - - dynamic totalItemsCount; - Data? data; - int? messageStatus; - String? message; - - factory BasicOtp.fromJson(Map json) => BasicOtp( - 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 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 json) => Data( - userToken: checkValue(json), - ); - - static String checkValue(Map json) { - try { - return json["userToken"] == null ? null : json["userToken"]; - } catch (e) { - return json["token"] == null ? null : json["token"]; - } - } - - Map toJson() => { - "userToken": userToken == null ? null : userToken, - }; -} diff --git a/lib/models/user/change_email.dart b/lib/models/user/change_email.dart deleted file mode 100644 index f7f6af5..0000000 --- a/lib/models/user/change_email.dart +++ /dev/null @@ -1,51 +0,0 @@ - - -import 'dart:convert'; - -ChanEmail changeEmailFromJson(String str) => ChanEmail.fromJson(json.decode(str)); - -String changeEmailToJson(ChanEmail data) => json.encode(data.toJson()); - -class ChanEmail { - int? messageStatus; - Null? totalItemsCount; - Data? data; - String? message; - - ChanEmail( - {this.messageStatus, this.totalItemsCount, this.data, this.message}); - - ChanEmail.fromJson(Map json) { - messageStatus = json['messageStatus']; - totalItemsCount = json['totalItemsCount']; - data = json['data'] != null ? new Data.fromJson(json['data']) : null; - message = json['message']; - } - - Map toJson() { - final Map data = new Map(); - data['messageStatus'] = this.messageStatus; - data['totalItemsCount'] = this.totalItemsCount; - if (this.data != null) { - data['data'] = this.data!.toJson(); - } - data['message'] = this.message; - return data; - } -} - -class Data { - String? userToken; - - Data({this.userToken}); - - Data.fromJson(Map json) { - userToken = json['userToken']; - } - - Map toJson() { - final Map data = new Map(); - data['userToken'] = this.userToken; - return data; - } -} \ No newline at end of file diff --git a/lib/models/user/change_mobile.dart b/lib/models/user/change_mobile.dart deleted file mode 100644 index fed5923..0000000 --- a/lib/models/user/change_mobile.dart +++ /dev/null @@ -1,51 +0,0 @@ - - -import 'dart:convert'; - -ChangeMobile changeMobileFromJson(String str) => ChangeMobile.fromJson(json.decode(str)); - -String changeMobileToJson(ChangeMobile data) => json.encode(data.toJson()); - -class ChangeMobile { - int? messageStatus; - Null? totalItemsCount; - Data? data; - String? message; - - ChangeMobile( - {this.messageStatus, this.totalItemsCount, this.data, this.message}); - - ChangeMobile.fromJson(Map json) { - messageStatus = json['messageStatus']; - totalItemsCount = json['totalItemsCount']; - data = json['data'] != null ? new Data.fromJson(json['data']) : null; - message = json['message']; - } - - Map toJson() { - final Map data = new Map(); - data['messageStatus'] = this.messageStatus; - data['totalItemsCount'] = this.totalItemsCount; - if (this.data != null) { - data['data'] = this.data!.toJson(); - } - data['message'] = this.message; - return data; - } -} - -class Data { - String? userToken; - - Data({this.userToken}); - - Data.fromJson(Map json) { - userToken = json['userToken']; - } - - Map toJson() { - final Map data = new Map(); - data['userToken'] = this.userToken; - return data; - } -} \ No newline at end of file diff --git a/lib/models/user/change_password.dart b/lib/models/user/change_password.dart deleted file mode 100644 index fc74d4b..0000000 --- a/lib/models/user/change_password.dart +++ /dev/null @@ -1,34 +0,0 @@ - - - -import 'dart:convert'; - -ChangePassword changePasswordFromJson(String str) => ChangePassword.fromJson(json.decode(str)); - -String changePasswordToJson(ChangePassword data) => json.encode(data.toJson()); - -class ChangePassword { - int? messageStatus; - Null? totalItemsCount; - bool? data; - String? message; - - ChangePassword( - {this.messageStatus, this.totalItemsCount, this.data, this.message}); - - ChangePassword.fromJson(Map json) { - messageStatus = json['messageStatus']; - totalItemsCount = json['totalItemsCount']; - data = json['data']; - message = json['message']; - } - - Map toJson() { - final Map data = new Map(); - data['messageStatus'] = this.messageStatus; - data['totalItemsCount'] = this.totalItemsCount; - data['data'] = this.data; - data['message'] = this.message; - return data; - } -} \ No newline at end of file diff --git a/lib/models/user/cities.dart b/lib/models/user/cities.dart deleted file mode 100644 index 5c32405..0000000 --- a/lib/models/user/cities.dart +++ /dev/null @@ -1,65 +0,0 @@ -// To parse this JSON data, do -// -// final cities = citiesFromJson(jsonString); - -import 'dart:convert'; - -Cities citiesFromJson(String str) => Cities.fromJson(json.decode(str)); - -String citiesToJson(Cities data) => json.encode(data.toJson()); - -class Cities { - Cities({ - this.totalItemsCount, - this.data, - this.messageStatus, - this.message, - }); - - int? totalItemsCount; - List? data; - int? messageStatus; - String? message; - - factory Cities.fromJson(Map json) => Cities( - totalItemsCount: json["totalItemsCount"] == null ? null : json["totalItemsCount"], - data: json["data"] == null ? null : List.from(json["data"].map((x) => CityData.fromJson(x))), - messageStatus: json["messageStatus"] == null ? null : json["messageStatus"], - message: json["message"] == null ? null : json["message"], - ); - - Map toJson() => { - "totalItemsCount": totalItemsCount == null ? null : totalItemsCount, - "data": data == null ? null : List.from(data!.map((x) => x.toJson())), - "messageStatus": messageStatus == null ? null : messageStatus, - "message": message == null ? null : message, - }; -} - -class CityData { - CityData({ - this.id, - this.cityName, - this.cityNameN, - this.countryId, - }); - - int? id; - String? cityName; - String? cityNameN; - int? countryId; - - factory CityData.fromJson(Map json) => CityData( - id: json["id"] == null ? null : json["id"], - cityName: json["cityName"] == null ? null : json["cityName"], - cityNameN: json["cityNameN"] == null ? null : json["cityNameN"], - countryId: json["countryID"] == null ? null : json["countryID"], - ); - - Map toJson() => { - "id": id == null ? null : id, - "cityName": cityName == null ? null : cityName, - "cityNameN": cityNameN == null ? null : cityNameN, - "countryID": countryId == null ? null : countryId, - }; -} diff --git a/lib/models/user/confirm_email.dart b/lib/models/user/confirm_email.dart deleted file mode 100644 index e64dc25..0000000 --- a/lib/models/user/confirm_email.dart +++ /dev/null @@ -1,51 +0,0 @@ - - -import 'dart:convert'; - -ConfirmEmail confirmEmailFromJson(String str) => ConfirmEmail.fromJson(json.decode(str)); - -String confirmEmailToJson(ConfirmEmail data) => json.encode(data.toJson()); - -class ConfirmEmail { - int? messageStatus; - Null? totalItemsCount; - Data? data; - String? message; - - ConfirmEmail( - {this.messageStatus, this.totalItemsCount, this.data, this.message}); - - ConfirmEmail.fromJson(Map json) { - messageStatus = json['messageStatus']; - totalItemsCount = json['totalItemsCount']; - data = json['data'] != null ? new Data.fromJson(json['data']) : null; - message = json['message']; - } - - Map toJson() { - final Map data = new Map(); - data['messageStatus'] = this.messageStatus; - data['totalItemsCount'] = this.totalItemsCount; - if (this.data != null) { - data['data'] = this.data!.toJson(); - } - data['message'] = this.message; - return data; - } -} - -class Data { - String? userID; - - Data({this.userID}); - - Data.fromJson(Map json) { - userID = json['userID']; - } - - Map toJson() { - final Map data = new Map(); - data['userID'] = this.userID; - return data; - } -} \ No newline at end of file diff --git a/lib/models/user/confirm_mobile.dart b/lib/models/user/confirm_mobile.dart deleted file mode 100644 index 5ea817b..0000000 --- a/lib/models/user/confirm_mobile.dart +++ /dev/null @@ -1,53 +0,0 @@ - - - -import 'dart:convert'; - -ConfirmMobile confirmMobileFromJson(String str) => ConfirmMobile.fromJson(json.decode(str)); - -String confirmMobileToJson(ConfirmMobile data) => json.encode(data.toJson()); - - -class ConfirmMobile { - int? messageStatus; - Null? totalItemsCount; - Data? data; - String? message; - - ConfirmMobile( - {this.messageStatus, this.totalItemsCount, this.data, this.message}); - - ConfirmMobile.fromJson(Map json) { - messageStatus = json['messageStatus']; - totalItemsCount = json['totalItemsCount']; - data = json['data'] != null ? new Data.fromJson(json['data']) : null; - message = json['message']; - } - - Map toJson() { - final Map data = new Map(); - data['messageStatus'] = this.messageStatus; - data['totalItemsCount'] = this.totalItemsCount; - if (this.data != null) { - data['data'] = this.data!.toJson(); - } - data['message'] = this.message; - return data; - } -} - -class Data { - String? userID; - - Data({this.userID}); - - Data.fromJson(Map json) { - userID = json['userID']; - } - - Map toJson() { - final Map data = new Map(); - data['userID'] = this.userID; - return data; - } -} \ No newline at end of file diff --git a/lib/models/user/confirm_password.dart b/lib/models/user/confirm_password.dart deleted file mode 100644 index 03891f9..0000000 --- a/lib/models/user/confirm_password.dart +++ /dev/null @@ -1,30 +0,0 @@ - -import 'dart:convert'; - -ConfirmPassword confirmPasswordFromJson(String str) => ConfirmPassword.fromJson(json.decode(str)); - -String confirmPasswordToJson(ConfirmPassword data) => json.encode(data.toJson()); - -class ConfirmPassword { - dynamic totalItemsCount; - int? messageStatus; - String? message; - - ConfirmPassword( - {this.totalItemsCount, this.messageStatus, this.message}); - - ConfirmPassword.fromJson(Map json) { - totalItemsCount = json['totalItemsCount']; - messageStatus = json['messageStatus']; - message = json['message']; - } - - Map toJson() { - final Map data = new Map(); - data['totalItemsCount'] = this.totalItemsCount; - data['messageStatus'] = this.messageStatus; - data['message'] = this.message; - return data; - } -} - diff --git a/lib/models/user/country.dart b/lib/models/user/country.dart deleted file mode 100644 index f4036cf..0000000 --- a/lib/models/user/country.dart +++ /dev/null @@ -1,81 +0,0 @@ -// To parse this JSON data, do -// -// final country = countryFromJson(jsonString); - -import 'dart:convert'; - -Country countryFromJson(String str) => Country.fromJson(json.decode(str)); - -String countryToJson(Country data) => json.encode(data.toJson()); - -class Country { - Country({ - this.totalItemsCount, - this.data, - this.messageStatus, - this.message, - }); - - int? totalItemsCount; - List? data; - int? messageStatus; - String? message; - - factory Country.fromJson(Map json) => Country( - totalItemsCount: json["totalItemsCount"] == null ? null : json["totalItemsCount"], - data: json["data"] == null ? null : List.from(json["data"].map((x) => CountryData.fromJson(x))), - messageStatus: json["messageStatus"] == null ? null : json["messageStatus"], - message: json["message"] == null ? null : json["message"], - ); - - Map toJson() => { - "totalItemsCount": totalItemsCount == null ? null : totalItemsCount, - "data": data == null ? null : List.from(data!.map((x) => x.toJson())), - "messageStatus": messageStatus == null ? null : messageStatus, - "message": message == null ? null : message, - }; -} - -class CountryData { - CountryData({ - this.id, - this.countryName, - this.countryNameN, - this.nationality, - this.nationalityN, - this.countryCode, - this.alpha2Code, - this.alpha3Code, - }); - - int? id; - String? countryName; - String? countryNameN; - String? nationality; - String? nationalityN; - String? countryCode; - String? alpha2Code; - String? alpha3Code; - - factory CountryData.fromJson(Map json) => CountryData( - id: json["id"] == null ? null : json["id"], - countryName: json["countryName"] == null ? null : json["countryName"], - countryNameN: json["countryNameN"] == null ? null : json["countryNameN"], - nationality: json["nationality"] == null ? null : json["nationality"], - nationalityN: json["nationalityN"] == null ? null : json["nationalityN"], - countryCode: json["countryCode"] == null ? null : json["countryCode"], - alpha2Code: json["alpha2Code"] == null ? null : json["alpha2Code"], - alpha3Code: json["alpha3Code"] == null ? null : json["alpha3Code"], - ); - - Map toJson() => { - "id": id == null ? null : id, - "countryName": countryName == null ? null : countryName, - "countryNameN": countryNameN == null ? null : countryNameN, - "nationality": nationality == null ? null : nationality, - "nationalityN": nationalityN == null ? null : nationalityN, - "countryCode": countryCode == null ? null : countryCode, - "alpha2Code": alpha2Code == null ? null : alpha2Code, - "alpha3Code": alpha3Code == null ? null : alpha3Code, - }; -} diff --git a/lib/models/user/forget_password_otp_compare.dart b/lib/models/user/forget_password_otp_compare.dart deleted file mode 100644 index 20c260b..0000000 --- a/lib/models/user/forget_password_otp_compare.dart +++ /dev/null @@ -1,48 +0,0 @@ -import 'dart:convert'; - -PasswordOTPCompare otpCompareFromJson(String str) => PasswordOTPCompare.fromJson(json.decode(str)); - -String otpCompareToJson(PasswordOTPCompare data) => json.encode(data.toJson()); - -class PasswordOTPCompare { - dynamic totalItemsCount; - Data? data; - int? messageStatus; - String? message; - - PasswordOTPCompare({this.totalItemsCount, this.data, this.messageStatus, this.message}); - - PasswordOTPCompare.fromJson(Map json) { - totalItemsCount = json['totalItemsCount']; - data = json['data'] != null ? new Data.fromJson(json['data']) : null; - messageStatus = json['messageStatus']; - message = json['message']; - } - - Map toJson() { - final Map data = new Map(); - data['totalItemsCount'] = this.totalItemsCount; - if (this.data != null) { - data['data'] = this.data!.toJson(); - } - data['messageStatus'] = this.messageStatus; - data['message'] = this.message; - return data; - } -} - -class Data { - String? userToken; - - Data({this.userToken}); - - Data.fromJson(Map json) { - userToken = json['userToken']; - } - - Map toJson() { - final Map data = new Map(); - data['userToken'] = this.userToken; - return data; - } -} diff --git a/lib/models/user/forget_password_otp_request.dart b/lib/models/user/forget_password_otp_request.dart deleted file mode 100644 index 7ab7e5c..0000000 --- a/lib/models/user/forget_password_otp_request.dart +++ /dev/null @@ -1,50 +0,0 @@ - -import 'dart:convert'; - -PasswordOTPRequest otpRequestFromJson(String str) => PasswordOTPRequest.fromJson(json.decode(str)); - -String otpRequestToJson(PasswordOTPRequest data) => json.encode(data.toJson()); - -class PasswordOTPRequest { - dynamic totalItemsCount; - Data? data; - int? messageStatus; - String? message; - - PasswordOTPRequest( - {this.totalItemsCount, this.data, this.messageStatus, this.message}); - - PasswordOTPRequest.fromJson(Map json) { - totalItemsCount = json['totalItemsCount']; - data = json['data'] != null ? new Data.fromJson(json['data']) : null; - messageStatus = json['messageStatus']; - message = json['message']; - } - - Map toJson() { - final Map data = new Map(); - data['totalItemsCount'] = this.totalItemsCount; - if (this.data != null) { - data['data'] = this.data!.toJson(); - } - data['messageStatus'] = this.messageStatus; - data['message'] = this.message; - return data; - } -} - -class Data { - String? userToken; - - Data({this.userToken}); - - Data.fromJson(Map json) { - userToken = json['userToken']; - } - - Map toJson() { - final Map data = new Map(); - data['userToken'] = this.userToken; - return data; - } -} \ No newline at end of file diff --git a/lib/models/user/image_response.dart b/lib/models/user/image_response.dart deleted file mode 100644 index 6ca0b41..0000000 --- a/lib/models/user/image_response.dart +++ /dev/null @@ -1,37 +0,0 @@ -// To parse this JSON data, do -// -// final imageResponse = imageResponseFromJson(jsonString); - -import 'dart:convert'; - -ImageResponse imageResponseFromJson(String str) => ImageResponse.fromJson(json.decode(str)); - -String imageResponseToJson(ImageResponse data) => json.encode(data.toJson()); - -class ImageResponse { - ImageResponse({ - this.totalItemsCount, - this.data, - this.messageStatus, - this.message, - }); - - dynamic? totalItemsCount; - String? data; - int? messageStatus; - String? message; - - factory ImageResponse.fromJson(Map json) => ImageResponse( - totalItemsCount: json["totalItemsCount"], - data: json["data"] == null ? null : json["data"], - messageStatus: json["messageStatus"] == null ? null : json["messageStatus"], - message: json["message"] == null ? null : json["message"], - ); - - Map toJson() => { - "totalItemsCount": totalItemsCount, - "data": data == null ? null : data, - "messageStatus": messageStatus == null ? null : messageStatus, - "message": message == null ? null : message, - }; -} diff --git a/lib/models/user/login_password.dart b/lib/models/user/login_password.dart deleted file mode 100644 index 616e860..0000000 --- a/lib/models/user/login_password.dart +++ /dev/null @@ -1,53 +0,0 @@ -// 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 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 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 json) => Data( - userToken: json["userToken"] == null ? null : json["userToken"], - ); - - Map toJson() => { - "userToken": userToken == null ? null : userToken, - }; -} diff --git a/lib/models/user/refresh_token.dart b/lib/models/user/refresh_token.dart deleted file mode 100644 index 7de1e59..0000000 --- a/lib/models/user/refresh_token.dart +++ /dev/null @@ -1,65 +0,0 @@ -// 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 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 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 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 toJson() => { - "accessToken": accessToken == null ? null : accessToken, - "refreshToken": refreshToken == null ? null : refreshToken, - "expiryDate": expiryDate == null ? null : expiryDate!.toIso8601String(), - "userInfo": userInfo, - }; -} diff --git a/lib/models/user/register_user.dart b/lib/models/user/register_user.dart deleted file mode 100644 index fef636f..0000000 --- a/lib/models/user/register_user.dart +++ /dev/null @@ -1,117 +0,0 @@ -// To parse this JSON data, do -// -// final user = userFromMap(jsonString); - -import 'dart:convert'; - -RegisterUser userFromMap(String str) => RegisterUser.fromJson(json.decode(str)); - -String userToMap(RegisterUser data) => json.encode(data.toMap()); - -class RegisterUser { - RegisterUser({ - this.totalItemsCount, - this.data, - this.messageStatus, - this.message, - }); - - dynamic totalItemsCount; - Data? data; - int? messageStatus; - String? message; - - factory RegisterUser.fromJson(Map json) => RegisterUser( - totalItemsCount: json["totalItemsCount"], - data: json["data"] == null ? null : Data.fromMap(json["data"]), - messageStatus: json["messageStatus"] == null ? null : json["messageStatus"], - message: json["message"] == null ? null : json["message"], - ); - - Map toMap() => { - "totalItemsCount": totalItemsCount, - "data": data == null ? null : data!.toMap(), - "messageStatus": messageStatus == null ? null : messageStatus, - "message": message == null ? null : message, - }; -} - -class Data { - Data({ - this.id, - this.userId, - this.firstName, - this.lastName, - this.mobileNo, - this.email, - this.userImageUrl, - this.roleId, - this.roleName, - this.isEmailVerified, - this.serviceProviderBranch, - this.isVerified, - this.userRoles, - this.isCustomer, - this.isProvider, - this.providerId, - this.customerId, - }); - - int? id; - String? userId; - dynamic? firstName; - dynamic? lastName; - String? mobileNo; - String? email; - dynamic? userImageUrl; - int? roleId; - dynamic? roleName; - bool? isEmailVerified; - List? serviceProviderBranch; - bool? isVerified; - List? userRoles; - bool? isCustomer; - bool? isProvider; - dynamic? providerId; - dynamic? customerId; - - factory Data.fromMap(Map 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"] == null ? null : json["mobileNo"], - email: json["email"] == null ? null : json["email"], - userImageUrl: json["userImageUrl"], - roleId: json["roleID"] == null ? null : json["roleID"], - roleName: json["roleName"], - isEmailVerified: json["isEmailVerified"] == null ? null : json["isEmailVerified"], - serviceProviderBranch: json["serviceProviderBranch"] == null ? null : List.from(json["serviceProviderBranch"].map((x) => x)), - isVerified: json["isVerified"] == null ? null : json["isVerified"], - userRoles: json["userRoles"] == null ? null : List.from(json["userRoles"].map((x) => x)), - isCustomer: json["isCustomer"] == null ? null : json["isCustomer"], - isProvider: json["isProvider"] == null ? null : json["isProvider"], - providerId: json["providerID"], - customerId: json["customerID"], - ); - - Map toMap() => { - "id": id == null ? null : id, - "userID": userId == null ? null : userId, - "firstName": firstName, - "lastName": lastName, - "mobileNo": mobileNo == null ? null : mobileNo, - "email": email == null ? null : email, - "userImageUrl": userImageUrl, - "roleID": roleId == null ? null : roleId, - "roleName": roleName, - "isEmailVerified": isEmailVerified == null ? null : isEmailVerified, - "serviceProviderBranch": serviceProviderBranch == null ? null : List.from(serviceProviderBranch!.map((x) => x)), - "isVerified": isVerified == null ? null : isVerified, - "userRoles": userRoles == null ? null : List.from(userRoles!.map((x) => x)), - "isCustomer": isCustomer == null ? null : isCustomer, - "isProvider": isProvider == null ? null : isProvider, - "providerID": providerId, - "customerID": customerId, - }; -} diff --git a/lib/models/user/role.dart b/lib/models/user/role.dart deleted file mode 100644 index 2ea0054..0000000 --- a/lib/models/user/role.dart +++ /dev/null @@ -1,65 +0,0 @@ -// To parse this JSON data, do -// -// final role = roleFromJson(jsonString); - -import 'dart:convert'; - -Role roleFromJson(String str) => Role.fromJson(json.decode(str)); - -String roleToJson(Role data) => json.encode(data.toJson()); - -class Role { - Role({ - this.totalItemsCount, - this.data, - this.messageStatus, - this.message, - }); - - int? totalItemsCount; - List? data; - int? messageStatus; - String? message; - - factory Role.fromJson(Map json) => Role( - totalItemsCount: json["totalItemsCount"] == null ? null : json["totalItemsCount"], - data: json["data"] == null ? null : List.from(json["data"].map((x) => RoleData.fromJson(x))), - messageStatus: json["messageStatus"] == null ? null : json["messageStatus"], - message: json["message"] == null ? null : json["message"], - ); - - Map toJson() => { - "totalItemsCount": totalItemsCount == null ? null : totalItemsCount, - "data": data == null ? null : List.from(data!.map((x) => x.toJson())), - "messageStatus": messageStatus == null ? null : messageStatus, - "message": message == null ? null : message, - }; -} - -class RoleData { - RoleData({ - this.id, - this.roleName, - this.roleNameN, - this.isActive, - }); - - int? id; - String? roleName; - String? roleNameN; - bool? isActive; - - factory RoleData.fromJson(Map json) => RoleData( - id: json["id"] == null ? null : json["id"], - roleName: json["roleName"] == null ? null : json["roleName"], - roleNameN: json["roleNameN"] == null ? null : json["roleNameN"], - isActive: json["isActive"] == null ? null : json["isActive"], - ); - - Map toJson() => { - "id": id == null ? null : id, - "roleName": roleName == null ? null : roleName, - "roleNameN": roleNameN == null ? null : roleNameN, - "isActive": isActive == null ? null : isActive, - }; -} diff --git a/lib/models/user/user.dart b/lib/models/user/user.dart deleted file mode 100644 index f1f0ee7..0000000 --- a/lib/models/user/user.dart +++ /dev/null @@ -1,153 +0,0 @@ -// To parse this JSON data, do -// -// final user = userFromJson(jsonString); - -import 'dart:convert'; - -User userFromJson(String str) => User.fromJson(json.decode(str)); - -String userToJson(User data) => json.encode(data.toJson()); - -class User { - User({ - this.totalItemsCount, - this.data, - this.messageStatus, - this.message, - }); - - dynamic totalItemsCount; - UserData? data; - int? messageStatus; - String? message; - - factory User.fromJson(Map json) => User( - totalItemsCount: json["totalItemsCount"], - data: json["data"] == null ? null : UserData.fromJson(json["data"]), - messageStatus: json["messageStatus"] == null ? null : json["messageStatus"], - message: json["message"] == null ? null : json["message"], - ); - - Map toJson() => { - "totalItemsCount": totalItemsCount, - "data": data == null ? null : data!.toJson(), - "messageStatus": messageStatus == null ? null : messageStatus, - "message": message == null ? null : message, - }; -} - -class UserData { - UserData({ - this.accessToken, - this.refreshToken, - this.expiryDate, - this.userInfo, - }); - - String? accessToken; - String? refreshToken; - DateTime? expiryDate; - UserInfo? userInfo; - - factory UserData.fromJson(Map 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"]), - userInfo: json["userInfo"] == null ? null : UserInfo.fromJson(json["userInfo"]), - ); - - Map toJson() => { - "accessToken": accessToken == null ? null : accessToken, - "refreshToken": refreshToken == null ? null : refreshToken, - "expiryDate": expiryDate == null ? null : expiryDate!.toIso8601String(), - "userInfo": userInfo == null ? null : userInfo!.toJson(), - }; -} - -class UserInfo { - UserInfo({ - this.id, - this.userId, - this.firstName, - this.lastName, - this.mobileNo, - this.email, - this.userImageUrl, - this.roleId, - this.roleName, - this.isEmailVerified, - this.serviceProviderBranch, - this.isVerified, - this.userRoles, - this.isCustomer, - this.isProviderDealership, - this.isDealershipUser, - this.providerId, - this.customerId, - this.dealershipId, - }); - - int? id; - String? userId; - String? firstName; - String? lastName; - String? mobileNo; - String? email; - dynamic userImageUrl; - int? roleId; - String? roleName; - bool? isEmailVerified; - List? serviceProviderBranch; - bool? isVerified; - List? userRoles; - bool? isCustomer; - bool? isProviderDealership; - bool? isDealershipUser; - dynamic providerId; - int? customerId; - dynamic dealershipId; - - factory UserInfo.fromJson(Map json) => UserInfo( - id: json["id"] == null ? null : json["id"], - userId: json["userID"] == null ? null : json["userID"], - firstName: json["firstName"] == null ? null : json["firstName"], - lastName: json["lastName"] == null ? null : json["lastName"], - mobileNo: json["mobileNo"] == null ? null : json["mobileNo"], - email: json["email"] == null ? null : json["email"], - userImageUrl: json["userImageUrl"], - roleId: json["roleID"] == null ? null : json["roleID"], - roleName: json["roleName"] == null ? null : json["roleName"], - isEmailVerified: json["isEmailVerified"] == null ? null : json["isEmailVerified"], - serviceProviderBranch: json["serviceProviderBranch"] == null ? null : List.from(json["serviceProviderBranch"].map((x) => x)), - isVerified: json["isVerified"] == null ? null : json["isVerified"], - userRoles: json["userRoles"] == null ? null : List.from(json["userRoles"].map((x) => x)), - isCustomer: json["isCustomer"] == null ? null : json["isCustomer"], - isProviderDealership: json["isProviderDealership"] == null ? null : json["isProviderDealership"], - isDealershipUser: json["isDealershipUser"] == null ? null : json["isDealershipUser"], - providerId: json["providerID"], - customerId: json["customerID"] == null ? null : json["customerID"], - dealershipId: json["dealershipID"], - ); - - Map toJson() => { - "id": id == null ? null : id, - "userID": userId == null ? null : userId, - "firstName": firstName == null ? null : firstName, - "lastName": lastName == null ? null : lastName, - "mobileNo": mobileNo == null ? null : mobileNo, - "email": email == null ? null : email, - "userImageUrl": userImageUrl, - "roleID": roleId == null ? null : roleId, - "roleName": roleName == null ? null : roleName, - "isEmailVerified": isEmailVerified == null ? null : isEmailVerified, - "serviceProviderBranch": serviceProviderBranch == null ? null : List.from(serviceProviderBranch!.map((x) => x)), - "isVerified": isVerified == null ? null : isVerified, - "userRoles": userRoles == null ? null : List.from(userRoles!.map((x) => x)), - "isCustomer": isCustomer == null ? null : isCustomer, - "isProviderDealership": isProviderDealership == null ? null : isProviderDealership, - "isDealershipUser": isDealershipUser == null ? null : isDealershipUser, - "providerID": providerId, - "customerID": customerId == null ? null : customerId, - "dealershipID": dealershipId, - }; -} diff --git a/lib/models/user/verify_email.dart b/lib/models/user/verify_email.dart deleted file mode 100644 index bf0858f..0000000 --- a/lib/models/user/verify_email.dart +++ /dev/null @@ -1,53 +0,0 @@ - - - -import 'dart:convert'; - -VerifyEmail verifyEmailFromJson(String str) => VerifyEmail.fromJson(json.decode(str)); - -String verifyEmailToJson(VerifyEmail data) => json.encode(data.toJson()); - - -class VerifyEmail { - Null? totalItemsCount; - Data? data; - int? messageStatus; - String? message; - - VerifyEmail( - {this.totalItemsCount, this.data, this.messageStatus, this.message}); - - VerifyEmail.fromJson(Map json) { - totalItemsCount = json['totalItemsCount']; - data = json['data'] != null ? new Data.fromJson(json['data']) : null; - messageStatus = json['messageStatus']; - message = json['message']; - } - - Map toJson() { - final Map data = new Map(); - data['totalItemsCount'] = this.totalItemsCount; - if (this.data != null) { - data['data'] = this.data!.toJson(); - } - data['messageStatus'] = this.messageStatus; - data['message'] = this.message; - return data; - } -} - -class Data { - String? userToken; - - Data({this.userToken}); - - Data.fromJson(Map json) { - userToken = json['userToken']; - } - - Map toJson() { - final Map data = new Map(); - data['userToken'] = this.userToken; - return data; - } -} \ No newline at end of file diff --git a/lib/models/user/verify_email_otp.dart b/lib/models/user/verify_email_otp.dart deleted file mode 100644 index aa0827c..0000000 --- a/lib/models/user/verify_email_otp.dart +++ /dev/null @@ -1,27 +0,0 @@ - - - -import 'dart:convert'; - -VerifyEmailOTP verifyEmailOTPFromJson(String str) => VerifyEmailOTP.fromJson(json.decode(str)); - -String verifyEmailOTPToJson(VerifyEmailOTP data) => json.encode(data.toJson()); - -class VerifyEmailOTP { - bool? success; - Null? errors; - - VerifyEmailOTP({this.success, this.errors}); - - VerifyEmailOTP.fromJson(Map json) { - success = json['success']; - errors = json['errors']; - } - - Map toJson() { - final Map data = new Map(); - data['success'] = this.success; - data['errors'] = this.errors; - return data; - } -} \ No newline at end of file diff --git a/lib/pages/dashboard/dashboard_page.dart b/lib/pages/dashboard/dashboard_page.dart deleted file mode 100644 index e194628..0000000 --- a/lib/pages/dashboard/dashboard_page.dart +++ /dev/null @@ -1,387 +0,0 @@ -import 'package:badges/badges.dart' as b; -import 'package:car_provider_app/api/api_client.dart'; -import 'package:car_provider_app/api/client/user_api_client.dart'; -import 'package:car_provider_app/api/shared_prefrence.dart'; -import 'package:car_provider_app/classes/app_state.dart'; -import 'package:car_provider_app/classes/colors.dart'; -import 'package:car_provider_app/classes/consts.dart'; -import 'package:car_provider_app/classes/utils.dart'; -import 'package:car_provider_app/config/routes.dart'; -import 'package:car_provider_app/models/m_response.dart'; -import 'package:car_provider_app/models/user/image_response.dart'; -import 'package:car_provider_app/pages/dashboard/widget/bottom_nav_bar.dart'; -import 'package:car_provider_app/pages/settings/branch/branch_list_page.dart'; -import 'package:car_provider_app/theme/colors.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/button/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:easy_localization/easy_localization.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_svg/flutter_svg.dart'; -import 'package:google_maps_flutter/google_maps_flutter.dart'; -import 'package:http/http.dart'; -import 'package:image_picker/image_picker.dart'; -import 'package:shared_preferences/shared_preferences.dart'; -import 'package:sizer/sizer.dart'; -import 'dart:io'; - -import '../../generated/locale_keys.g.dart'; -import '../../utils/location/Location.dart'; -import 'fragments/home_fragment.dart'; - -class DashboardPage extends StatefulWidget { - @override - State createState() => _DashboardPageState(); -} - -enum ImageSourceType { gallery, camera } - -class _DashboardPageState extends State { - final GlobalKey _scaffoldKey = new GlobalKey(); - String userName = ""; - - // void _handleURLButtonPress(BuildContext context, var type) { - // Navigator.push(context, - // MaterialPageRoute(builder: (context) => ImageFromGalleryEx(type))); - // } - - int _selectedIndex = 2; - File? imagePicked; - String image64 = ""; - final _picker = ImagePicker(); - - @override - void initState() { - // TODO: implement initState - super.initState(); - fetchUsernameAndLocation(); - } - - fetchUsernameAndLocation() async { - userName = await SharedPrefManager.getPhoneOrEmail(); - Location.getCurrentLocation( - (LatLng? latlng) { - AppState().currentLocation = latlng ?? new LatLng(0, 0); - }, - ); - - setState(() {}); - } - - @override - Widget build(BuildContext context) { - return Scaffold( - key: _scaffoldKey, - appBar: appBar(context, - leadingWidth: 100, - leading: InkWell( - onTap: () => _scaffoldKey.currentState!.openDrawer(), - child: Row( - children: [ - 21.width, - Image.asset( - "assets/images/bn_car.jpeg", - height: 38, - width: 38, - fit: BoxFit.cover, - ).toCircle(), - 6.width, - const Icon(Icons.menu), - ], - ), - ), - actions: [ - IconButton( - onPressed: () {}, - icon: const b.Badge( - badgeContent: Text( - '3', - style: TextStyle( - fontSize: 10, - color: Colors.white, - ), - ), - child: Icon(Icons.notifications_active), - badgeStyle: b.BadgeStyle( - badgeColor: MyColors.primaryColor, - padding: EdgeInsets.all(5), - ), - ), - ), - 10.width, - ]), - drawer: showDrawer(context), - body: _selectedIndex == 0 - ? BranchListPage( - isNeedAppBar: false, - ) - : const HomeFragment(), - bottomNavigationBar: mBottomNavBar( - _selectedIndex, - (int i) { - setState(() { - _selectedIndex = i; - }); - }, - ), - ); - } - - Widget showDrawer(BuildContext context) { - return Drawer( - child: Container( - child: Column( - children: [ - Stack(children: [ - Container( - width: double.infinity, - height: 200, - color: MyColors.darkPrimaryColor.withOpacity(0.01), - child: Image.network(ApiConsts.baseUrlServices + AppState().getUser.data!.userInfo!.userImageUrl.toString()), - ), - Positioned( - top: 10, - right: 10, - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Column( - children: [ - Container( - width: 40, - height: 40, - decoration: BoxDecoration( - color: Colors.grey[200], - borderRadius: BorderRadius.circular(30), - ), - child: Icon( - Icons.edit, - color: MyColors.darkPrimaryColor, - ).onPress(() { - _openImagePicker(); - // _handleURLButtonPress(context, ImageSourceType.camera); - }), - ), - 12.height, - Container( - width: 40, - height: 40, - decoration: BoxDecoration( - color: Colors.grey[200], - borderRadius: BorderRadius.circular(30), - ), - child: Icon( - Icons.delete, - color: Colors.red, - ).onPress(() async { - Utils.showLoading(context); - ImageResponse response = await UserApiClent().UpdateUserImage(""); - if (response.messageStatus == 1) { - Utils.showToast("Image is Deleted"); - setState(() { - AppState().getUser.data!.userInfo!.userImageUrl = response.data; - }); - } - Utils.hideLoading(context); - }), - ), - ], - ), - ], - ), - ) - ]), - Container( - width: double.infinity, - color: MyColors.darkPrimaryColor.withOpacity(0.1), - padding: EdgeInsets.all(20), - child: Row( - children: [ - Expanded( - child: Column( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - userName.toText20(isBold: true), - AppState().getUser.data!.userInfo!.roleName!.toText10(), - ], - ), - ), - ShowFillButton( - title: LocaleKeys.edit.tr(), - fontSize: 12, - maxHeight: 35, - maxWidth: 70, - onPressed: () { - navigateWithName(context, AppRoutes.editAccoundPage); - }, - ), - ], - ), - ), - ListTile( - leading: SvgPicture.asset("assets/images/ic_notification.svg", color: MyColors.darkPrimaryColor), - title: LocaleKeys.notifications.tr().toText12(), - ), - ListTile( - leading: SvgPicture.asset("assets/images/ic_settings.svg", color: MyColors.darkPrimaryColor), - title: LocaleKeys.general.tr().toText12(), - ), - ListTile( - leading: SvgPicture.asset("assets/images/ic_notes.svg", color: MyColors.darkPrimaryColor), - title: LocaleKeys.defineLicences.tr().toText12(), - onTap: () { - navigateWithName(context, AppRoutes.defineLicense); - }, - ), - ListTile( - leading: SvgPicture.asset("assets/images/ic_car.svg", color: MyColors.darkPrimaryColor), - title: LocaleKeys.dealershipSettings.tr().toText12(), - onTap: () { - navigateWithName(context, AppRoutes.dealershipSetting); - }, - ), - ListTile( - leading: Image.asset( - "assets/images/ic_world.png", - width: 20, - height: 20, - color: MyColors.darkPrimaryColor, - ), - 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: SvgPicture.asset("assets/images/ic_lock.svg"), - // title: "Change Password".toText12(), - // onTap: (){ - // navigateWithName(context, AppRoutes.changePassword); - // }, - // ), - // ListTile( - // leading: SvgPicture.asset("assets/images/ic_mobile.svg"), - // title: "Change Mobile".toText12(), - // onTap: () { - // navigateWithName(context, AppRoutes.changeMobilePage); - // }, - // ), - // ListTile( - // leading: Icon(Icons.email_outlined, color: Colors.blue,), - // title: "Change Email".toText12(), - // onTap: () { - // navigateWithName(context, AppRoutes.changeEmailPage); - // }, - // ), - ListTile( - leading: SvgPicture.asset("assets/images/ic_logout.svg", color: MyColors.darkPrimaryColor), - title: LocaleKeys.signOut.tr().toText12(), - onTap: () async { - final pref = await SharedPreferences.getInstance(); - await pref.clear(); - pop(context); - navigateReplaceWithName(context, AppRoutes.registerSelection); - }, - ), - ], - ), - ), - ); - } - - // Implementing the image picker - // Future _openImagePicker() async { - // final XFile? pickedImage = - // await _picker.pickImage(source: ImageSource.gallery); - // if (pickedImage != null) { - // setState(() { - // // _image = File(pickedImage.path); - // }); - // } - // } - - void _openImagePicker() { - showDialog( - context: context, - builder: (context) => AlertDialog(content: Text("Choose image source"), actions: [ - TextButton(child: Text("Camera"), onPressed: () => cameraImage()), - TextButton(child: Text("Gallery"), onPressed: () => gallaryImage()), - ]), - // .then((ImageSource source) async { - // if (source != null) { - // final pickedFile = await ImagePicker().getImage(source: source); - // setState(() => imagePicked = File(pickedFile.path)); - // } - // } - ); - } - - void gallaryImage() async { - final picker = ImagePicker(); - final pickedImage = await picker.pickImage( - source: ImageSource.gallery, - ); - final pickedImageFile = File(pickedImage!.path); - int sizeInBytes = pickedImageFile.lengthSync(); - // double sizeInMb = sizeInBytes / (1024 * 1024); - if (sizeInBytes > 1000) { - Utils.showToast("File is larger then 1KB"); - } else { - image64 = convertFileToBase64(pickedImageFile); - - Utils.showLoading(context); - ImageResponse response = await UserApiClent().UpdateUserImage(image64); - Utils.hideLoading(context); - Navigator.pop(context); - if (response.messageStatus == 1) { - Utils.showToast("Image is uploaded"); - AppState().getUser.data!.userInfo!.userImageUrl = response.data; - } else { - Utils.showToast(response.message ?? ""); - } - - setState(() { - imagePicked = pickedImageFile; - }); - } - } - - void cameraImage() async { - final picker = ImagePicker(); - final pickedImage = await picker.pickImage( - source: ImageSource.camera, - ); - final pickedImageFile = File(pickedImage!.path); - int sizeInBytes = pickedImageFile.lengthSync(); - // double sizeInMb = sizeInBytes / (1024 * 1024); - if (sizeInBytes > 1000) { - Utils.showToast("File is larger then 1KB"); - } else { - image64 = convertFileToBase64(pickedImageFile); - - Utils.showLoading(context); - ImageResponse response = await UserApiClent().UpdateUserImage(image64); - Utils.hideLoading(context); - Navigator.pop(context); - if (response.messageStatus == 1) { - Utils.showToast("Image is uploaded"); - AppState().getUser.data!.userInfo!.userImageUrl = response.data; - } else { - Utils.showToast(response.message ?? ""); - } - - setState(() { - imagePicked = pickedImageFile; - }); - } - } -} diff --git a/lib/pages/dashboard/fragments/home_fragment.dart b/lib/pages/dashboard/fragments/home_fragment.dart deleted file mode 100644 index f35a81a..0000000 --- a/lib/pages/dashboard/fragments/home_fragment.dart +++ /dev/null @@ -1,36 +0,0 @@ -import 'package:car_provider_app/extensions/int_extensions.dart'; -import 'package:car_provider_app/pages/dashboard/widget/ad_widget.dart'; -import 'package:car_provider_app/pages/dashboard/widget/appointment_slider_widget.dart'; -import 'package:car_provider_app/pages/dashboard/widget/my_branches_widget.dart'; -import 'package:flutter/material.dart'; - -import '../widget/view_all_widget.dart'; - -class HomeFragment extends StatelessWidget { - const HomeFragment({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return SizedBox( - width: double.infinity, - height: double.infinity, - child: SingleChildScrollView( - child: Padding( - padding: const EdgeInsets.only(top: 8, left: 21, right: 21, bottom: 21), - child: Column( - children: [ - ViewAllWidget("Upcoming Appointment", "View All"), - const AppointmentSliderWidget(), - 20.height, - ViewAllWidget("My Branch's", "View All"), - MyBranchesWidget(), - 20.height, - ViewAllWidget("Recommended Ads", "View All"), - const AdWidget(), - ], - ), - ), - ), - ); - } -} diff --git a/lib/pages/dashboard/widget/ad_widget.dart b/lib/pages/dashboard/widget/ad_widget.dart deleted file mode 100644 index 49c55e9..0000000 --- a/lib/pages/dashboard/widget/ad_widget.dart +++ /dev/null @@ -1,105 +0,0 @@ -import 'package:car_provider_app/classes/colors.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'; - -class AdWidget extends StatelessWidget { - const AdWidget({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Column( - children: [ - showAd(), - 12.height, - showAd(), - ], - ); - } - - Widget showAd() { - return Row( - children: [ - Image.asset( - "assets/images/bn_car.jpeg", - width: 80, - height: 80, - fit: BoxFit.cover, - ), - 12.width, - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisAlignment: MainAxisAlignment.start, - children: [ - "Toyota Crolla".toText(fontSize: 16, isBold: true), - Row( - children: [ - "Model:".toText10( - color: MyColors.lightTextColor, - ), - 2.width, - "2019".toText10(), - ], - ), - Row( - children: [ - "Mileage:".toText10( - color: MyColors.lightTextColor, - ), - 2.width, - "73,000 km".toText10(), - ], - ), - ], - ), - ), - Column( - crossAxisAlignment: CrossAxisAlignment.end, - mainAxisAlignment: MainAxisAlignment.start, - children: [ - "Riyadh".toText10( - color: MyColors.lightTextColor, - ), - "9 Hours Ago".toText10( - color: MyColors.lightTextColor, - ), - ], - ), - ], - ), - 8.height, - Row( - children: [ - Expanded( - child: Row( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.end, - children: [ - "30,000".toText(fontSize: 16, isBold: true), - 2.width, - "SAR:".toText10( - color: MyColors.lightTextColor, - ), - ], - ), - ), - const Icon(Icons.arrow_forward) - ], - ), - ], - ), - ), - ], - ).toWhiteContainer(width: double.infinity, padding: 12); - } -} diff --git a/lib/pages/dashboard/widget/bottom_nav_bar.dart b/lib/pages/dashboard/widget/bottom_nav_bar.dart deleted file mode 100644 index 5ed5565..0000000 --- a/lib/pages/dashboard/widget/bottom_nav_bar.dart +++ /dev/null @@ -1,47 +0,0 @@ -import 'package:car_provider_app/classes/colors.dart'; -import 'package:flutter/material.dart'; - -import 'package:flutter_svg/flutter_svg.dart'; - -Widget mBottomNavBar(int selectedIndex, Function(int) onSelected) { - return BottomNavigationBar( - items: [ - BottomNavigationBarItem( - icon: SvgPicture.asset("assets/icons/ic_branches.svg"), - activeIcon: SvgPicture.asset("assets/icons/ic_branches.svg", color: MyColors.primaryColor), - label: 'Branches', - ), - BottomNavigationBarItem( - icon: SvgPicture.asset("assets/icons/ic_appoinments.svg"), - activeIcon: SvgPicture.asset("assets/icons/ic_appoinments.svg", color: MyColors.primaryColor), - label: 'Appointments', - ), - BottomNavigationBarItem( - icon: SvgPicture.asset("assets/icons/ic_home.svg"), - activeIcon: SvgPicture.asset("assets/icons/ic_home.svg", color: MyColors.primaryColor), - label: 'Home', - ), - BottomNavigationBarItem( - icon: SvgPicture.asset("assets/icons/ic_ads.svg"), - activeIcon: SvgPicture.asset("assets/icons/ic_ads.svg", color: MyColors.primaryColor), - label: 'Ads', - ), - BottomNavigationBarItem( - icon: SvgPicture.asset("assets/icons/ic_requests.svg"), - activeIcon: SvgPicture.asset("assets/icons/ic_requests.svg", color: MyColors.primaryColor), - label: 'Requests', - ), - ], - currentIndex: selectedIndex, - type: BottomNavigationBarType.fixed, - selectedItemColor: Colors.amber[800], - showSelectedLabels: true, - showUnselectedLabels: true, - unselectedItemColor: MyColors.lightTextColor, - unselectedFontSize: 10, - selectedFontSize: 10, - onTap: (i) { - onSelected(i); - }, - ); -} diff --git a/lib/pages/dashboard/widget/my_branches_widget.dart b/lib/pages/dashboard/widget/my_branches_widget.dart deleted file mode 100644 index 78c898a..0000000 --- a/lib/pages/dashboard/widget/my_branches_widget.dart +++ /dev/null @@ -1,39 +0,0 @@ -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'; - -class MyBranchesWidget extends StatelessWidget { - @override - Widget build(BuildContext context) { - return Container( - width: double.infinity, - child: Row( - children: [ - showBranch("Olaya Branch"), - 12.width, - showBranch("Thakhasusi Branch"), - 12.width, - ], - ), - ); - } - - Widget showBranch(String title) { - return SizedBox( - width: 90, - child: Column( - children: [ - Image.asset( - "assets/images/bn_car.jpeg", - width: 80, - height: 80, - fit: BoxFit.cover, - ).toCircle(borderRadius: 2000), - 8.height, - title.toText(fontSize: 16, isBold: true, textAlign: TextAlign.center), - ], - ), - ); - } -} diff --git a/lib/pages/dashboard/widget/view_all_widget.dart b/lib/pages/dashboard/widget/view_all_widget.dart deleted file mode 100644 index e161ee9..0000000 --- a/lib/pages/dashboard/widget/view_all_widget.dart +++ /dev/null @@ -1,21 +0,0 @@ -import 'package:car_provider_app/classes/colors.dart'; -import 'package:car_provider_app/extensions/string_extensions.dart'; -import 'package:flutter/cupertino.dart'; - -Widget ViewAllWidget(String title, String subTitle) { - return Container( - width: double.infinity, - padding: const EdgeInsets.only(bottom: 10), - child: Row( - children: [ - Expanded(child: title.toText16(isBold: true)), - subTitle.toText( - fontSize: 12, - isBold: true, - color: MyColors.primaryColor, - decoration: TextDecoration.underline, - ) - ], - ), - ); -} diff --git a/lib/pages/settings/branch/branch_detail_page.dart b/lib/pages/settings/branch/branch_detail_page.dart deleted file mode 100644 index 00ed84e..0000000 --- a/lib/pages/settings/branch/branch_detail_page.dart +++ /dev/null @@ -1,193 +0,0 @@ -import 'package:car_provider_app/classes/colors.dart'; -import 'package:car_provider_app/config/constants.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/app_bar.dart'; -import 'package:car_provider_app/widgets/button/show_fill_button.dart'; -import 'package:easy_localization/easy_localization.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_svg/svg.dart'; -import 'package:sizer/sizer.dart'; - -import '../../../config/routes.dart'; -import '../../../generated/locale_keys.g.dart'; -import '../../../models/profile/branch.dart'; -import '../../../models/profile/branch2.dart'; -import '../../../models/profile/categroy.dart'; -import '../../../utils/navigator.dart'; - -class BranchDetailPage extends StatefulWidget { - ServiceProviderBranch branchData; - - BranchDetailPage(this.branchData); - - @override - State createState() => _BranchDetailPageState(); -} - -class _BranchDetailPageState extends State { - List categories = []; - - @override - void initState() { - // TODO: implement initState - super.initState(); - widget.branchData.serviceProviderServices!.forEach((element) { - categories.add( - CategoryData( - id: element.categoryId, - categoryName: element.categoryName, - categoryNameN: element.categoryName, - ), - ); - }); - categories = categories.toSet().toList(); - print(categories); - categories.forEach((pelement) { - widget.branchData.serviceProviderServices!.forEach((element) { - if (pelement.id == element.categoryId) { - if (pelement.services == null) pelement.services = []; - pelement.services!.add(element); - } - }); - }); - widget.branchData.categories = categories; - } - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: appBar( - context, - title: LocaleKeys.branchName.tr(), - ), - body: SizedBox( - width: double.infinity, - height: double.infinity, - child: Column( - children: [ - Expanded( - child: SingleChildScrollView( - padding: EdgeInsets.all(20), - child: Column( - children: [ - Row( - children: [ - Expanded( - child: titleWidget(icons + "ic_branchs.svg", LocaleKeys.branchInfo), - ), - IconButton( - onPressed: () { - navigateWithName(context, AppRoutes.defineBranch, arguments: widget.branchData); - }, - icon: Icon( - Icons.edit, - ), - ) - ], - ), - 8.height, - Column( - children: [ - showData(LocaleKeys.country.tr() + ":", widget.branchData.countryName.toString()), - showData(LocaleKeys.city.tr() + ":", widget.branchData.cityName.toString()), - showData(LocaleKeys.branchName.tr() + ":", widget.branchData.branchName.toString()), - showData(LocaleKeys.branchDescription.tr() + ":", widget.branchData.branchDescription.toString()), - showData(LocaleKeys.address.tr() + ":", widget.branchData.address.toString()), - ], - ), - Container( - width: double.infinity, - height: 1, - color: Colors.grey, - margin: EdgeInsets.symmetric(vertical: 12), - ), - categories.length == 0 - ? LocaleKeys.no_branch.tr().toText12() - : ListView.builder( - itemBuilder: (context, pIndex) { - return Container( - width: double.infinity, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisAlignment: MainAxisAlignment.start, - children: [ - categories[pIndex].categoryName.toString().toText16(isBold: true), - ListView.builder( - itemBuilder: (context, index) { - return Container( - child: ("- " + - (EasyLocalization.of(context)?.currentLocale?.countryCode == "SA" - ? categories[pIndex].services![index].serviceNameN.toString() - : categories[pIndex].services![index].serviceName.toString())) - .toText14(), - ); - }, - itemCount: categories[pIndex].services?.length, - physics: NeverScrollableScrollPhysics(), - shrinkWrap: true, - ) - ], - ), - ); - }, - itemCount: categories.length, - physics: NeverScrollableScrollPhysics(), - shrinkWrap: true, - ), - ], - ), - ), - ), - Container( - width: double.infinity, - height: 1, - color: Colors.grey, - ), - Padding( - padding: const EdgeInsets.all(12.0), - child: ShowFillButton( - title: LocaleKeys.editServices, - maxWidth: double.infinity, - onPressed: () { - navigateWithName( - context, - AppRoutes.createServices, - arguments: widget.branchData, - ); - }, - ), - ), - ], - ), - ), - ); - } - - Widget titleWidget(String icon, String title) { - return Row( - children: [ - SvgPicture.asset( - icon, - width: 18, - height: 18, - color: MyColors.darkPrimaryColor, - ), - 12.width, - title.toText16(color: Colors.black, isBold: true), - ], - ); - } - - Widget showData(String title, String value) { - return Row( - children: [ - title.toText10(color: Colors.black, isBold: true), - 8.width, - value.toText12( - color: MyColors.textColor, - ) - ], - ); - } -} diff --git a/lib/pages/settings/branch/branch_list_page.dart b/lib/pages/settings/branch/branch_list_page.dart deleted file mode 100644 index 1f06da0..0000000 --- a/lib/pages/settings/branch/branch_list_page.dart +++ /dev/null @@ -1,175 +0,0 @@ -import 'package:car_provider_app/api/client/branch_api_client.dart'; -import 'package:car_provider_app/classes/app_state.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:car_provider_app/utils/utils.dart'; -import 'package:car_provider_app/widgets/app_bar.dart'; -import 'package:easy_localization/easy_localization.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_svg/svg.dart'; -import 'package:geolocator/geolocator.dart'; - -import '../../../classes/colors.dart'; -import '../../../classes/utils.dart'; -import '../../../config/routes.dart'; -import '../../../generated/locale_keys.g.dart'; - -import '../../../models/m_response.dart'; -import '../../../models/profile/branch.dart'; -import '../../../models/profile/branch2.dart'; -import '../../../utils/navigator.dart'; -import '../../../widgets/button/show_fill_button.dart'; - -class BranchListPage extends StatefulWidget { - bool isNeedAppBar; - - BranchListPage({Key? key, this.isNeedAppBar = true}) : super(key: key); - - @override - State createState() => _BranchListPageState(); -} - -class _BranchListPageState extends State { - @override - void initState() { - super.initState(); - } - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar:!widget.isNeedAppBar?null: appBar( - context, - title: LocaleKeys.myServiceBranches.tr(), - ), - floatingActionButton: FloatingActionButton( - child: Icon( - Icons.add, - color: Colors.white, - ), - onPressed: () async { - await navigateWithName(context, AppRoutes.defineBranch); - setState(() {}); - }, - ), - body: Container( - width: double.infinity, - height: double.infinity, - child: Builder(builder: (context) { - return FutureBuilder( - future: BranchApiClent().getBranchAndServices(), - builder: (context, snapshot) { - if (snapshot.hasData) { - return snapshot.data!.data == null - ? const Center(child: Text("No Branch Found")) - : snapshot.data!.data!.serviceProviderBranch!.isEmpty - ? Center(child: Text(LocaleKeys.no_branch.tr())) - : ListView.separated( - itemBuilder: (context, index) { - return Row( - children: [ - Container( - width: 74, - height: 50, - decoration: const BoxDecoration( - color: MyColors.darkPrimaryColor, - borderRadius: BorderRadius.all(Radius.circular(8)), - ), - padding: EdgeInsets.all(6), - child: SvgPicture.asset( - "assets/icons/ic_branchs.svg", - color: Colors.white, - ), - ), - 12.width, - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisAlignment: MainAxisAlignment.start, - children: [ - Row( - children: [ - const Icon( - Icons.place, - size: 12, - color: MyColors.darkPrimaryColor, - ), - Geolocator.distanceBetween( - AppState().currentLocation.latitude, - AppState().currentLocation.latitude, - double.parse(snapshot.data!.data!.serviceProviderBranch![index].latitude ?? "0"), - double.parse(snapshot.data!.data!.serviceProviderBranch![index].longitude ?? "0")) - .toStringAsFixed(2) - .toText12( - color: MyColors.darkPrimaryColor, - ) - ], - ), - Text( - snapshot.data!.data!.serviceProviderBranch![index].branchName ?? "", - style: const TextStyle( - fontSize: 14, - fontWeight: FontWeight.bold, - ), - ), - LocaleKeys.tapToEdit.tr().toText10(color: MyColors.grey70Color), - ], - ), - ), - 12.width, - IconButton( - onPressed: () async { - Utils.showLoading(context); - MResponse res = await BranchApiClent().updateBranch( - snapshot.data!.data!.serviceProviderBranch![index].id ?? 0, - snapshot.data!.data!.serviceProviderBranch![index].branchName ?? "", - snapshot.data!.data!.serviceProviderBranch![index].branchDescription ?? "", - snapshot.data!.data!.serviceProviderBranch![index].cityId.toString(), - snapshot.data!.data!.serviceProviderBranch![index].address ?? "", - snapshot.data!.data!.serviceProviderBranch![index].latitude.toString(), - snapshot.data!.data!.serviceProviderBranch![index].longitude.toString(), - isNeedToDelete: false); - Utils.hideLoading(context); - if (res.messageStatus == 1) { - Utils.showToast(LocaleKeys.branch_deleted.tr()); - setState(() {}); - } else { - Utils.showToast(res.message ?? ""); - } - }, - icon: const Icon(Icons.delete), - color: Colors.red, - ), - const Icon( - Icons.arrow_forward_rounded, - size: 16, - ), - ], - ).toContainer().onPress(() async { - // await navigateWithName(context, AppRoutes.defineBranch, arguments: snapshot.data!.data![index]); - // setState(() {}); - snapshot.data!.data!.serviceProviderBranch![index].countryID = snapshot.data!.data!.countryID; - snapshot.data!.data!.serviceProviderBranch![index].countryName = snapshot.data!.data!.countryName; - await navigateWithName(context, AppRoutes.branchDetail, arguments: snapshot.data!.data!.serviceProviderBranch![index]); - setState(() {}); - }); - }, - separatorBuilder: (context, index) { - return 12.height; - }, - itemCount: snapshot.data!.data!.serviceProviderBranch!.length, - padding: const EdgeInsets.all(12), - ); - } else { - return const Center( - child: CircularProgressIndicator(), - ); - } - }, - ); - }), - ), - ); - } -} diff --git a/lib/pages/settings/branch/define_branch_page.dart b/lib/pages/settings/branch/define_branch_page.dart deleted file mode 100644 index 277b7c4..0000000 --- a/lib/pages/settings/branch/define_branch_page.dart +++ /dev/null @@ -1,274 +0,0 @@ -import 'package:car_provider_app/api/client/branch_api_client.dart'; -import 'package:car_provider_app/api/client/user_api_client.dart'; -import 'package:car_provider_app/classes/utils.dart'; -import 'package:car_provider_app/extensions/int_extensions.dart'; -import 'package:car_provider_app/extensions/string_extensions.dart'; -import 'package:car_provider_app/models/m_response.dart'; -import 'package:car_provider_app/models/profile/branch.dart'; -import 'package:car_provider_app/models/user/cities.dart'; -import 'package:car_provider_app/models/user/country.dart'; -import 'package:car_provider_app/pages/location/pick_location_page.dart'; -import 'package:car_provider_app/utils/utils.dart'; -import 'package:car_provider_app/widgets/app_bar.dart'; -import 'package:car_provider_app/widgets/dropdown/dropdow_field.dart'; -import 'package:car_provider_app/widgets/button/show_fill_button.dart'; -import 'package:car_provider_app/widgets/txt_field.dart'; -import 'package:easy_localization/easy_localization.dart'; -import 'package:flutter/material.dart'; - -import '../../../classes/colors.dart'; -import '../../../generated/locale_keys.g.dart'; -import '../../../models/profile/branch2.dart'; -import '../../../utils/navigator.dart'; - -class DefineBranchPage extends StatefulWidget { - ServiceProviderBranch? branchData; - - DefineBranchPage(this.branchData); - - @override - State createState() => _DefineBranchPageState(); -} - -class _DefineBranchPageState extends State { - String countryCode = "", address = "", branchName = "", branchDescription = ""; - double latitude = 0, longitude = 0; - int role = -1, countryId = -1, cityId = -1; - - List countryDropList = []; - List citiesDropList = []; - DropValue? countryValue; - DropValue? cityValue; - - Country? country; - Cities? cities; - - @override - void initState() { - // TODO: implement initState - super.initState(); - - fetchCountry(); - } - - fetchCountry() async { - country = await UserApiClent().getAllCountries(); - setState(() { - country!.data?.forEach((element) { - if (widget.branchData != null) if (widget.branchData!.id != null) { - if (element.id == widget.branchData!.countryID) { - countryValue = new DropValue( - element.id ?? 0, EasyLocalization.of(context)?.currentLocale?.countryCode == "SA" ? (element.countryNameN ?? "") : (element.countryName ?? ""), element.countryCode ?? ""); - } - } - countryDropList.add( - new DropValue(element.id ?? 0, EasyLocalization.of(context)?.currentLocale?.countryCode == "SA" ? (element.countryNameN ?? "") : (element.countryName ?? ""), element.countryCode ?? "")); - }); - if (widget.branchData != null) if (widget.branchData!.id != null) fetchCites(); - }); - } - - fetchCites() async { - print("objectfffffff"); - citiesDropList.clear(); - cities = null; - cityId = -1; - cities = await UserApiClent().getAllCites(countryId.toString()); - setState(() { - cities!.data?.forEach((element) { - if (widget.branchData != null) if (widget.branchData!.id != null) { - if (element.id == widget.branchData!.cityId) { - address = widget.branchData!.address!; - branchName = widget.branchData!.branchName!; - branchDescription = widget.branchData!.branchDescription!; - latitude = double.parse(widget.branchData!.latitude ?? ""); - longitude = double.parse(widget.branchData!.longitude ?? ""); - countryId = widget.branchData!.countryID!; - cityId = widget.branchData!.cityId!; - cityValue = - new DropValue(element.id ?? 0, EasyLocalization.of(context)?.currentLocale?.countryCode == "SA" ? (element.cityNameN ?? "") : (element.cityName ?? ""), element.id.toString() ?? ""); - } - } - citiesDropList - .add(new DropValue(element.id ?? 0, EasyLocalization.of(context)?.currentLocale?.countryCode == "SA" ? (element.cityNameN ?? "") : (element.cityName ?? ""), element.id.toString() ?? "")); - }); - }); - } - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: appBar(context), - body: Container( - width: double.infinity, - height: double.infinity, - child: Column( - children: [ - Expanded( - child: SingleChildScrollView( - child: Padding( - padding: const EdgeInsets.all(20.0), - child: Column( - children: [ - LocaleKeys.defineBranches.tr().toText20(isBold: true), - 12.height, - LocaleKeys.branchLocation.tr().toText14(color: MyColors.lightTextColor), - 20.height, - LocaleKeys.chooseCountry.tr().toText14(color: MyColors.lightTextColor), - 8.height, - country != null - ? DropdownField( - (DropValue value) { - setState(() { - countryCode = value.subValue; - countryId = value.id; - fetchCites(); - }); - }, - list: countryDropList, - dropdownValue: countryValue, - hint: LocaleKeys.chooseCountry.tr() + "*", - ) - : CircularProgressIndicator(), - 12.height, - if (countryId != -1) - cities != null - ? citiesDropList.length == 0 - ? Text(LocaleKeys.no_city_available.tr()) - : DropdownField( - (DropValue value) { - setState(() { - // countryCode = value.subValue; - cityId = value.id; - }); - }, - list: citiesDropList, - dropdownValue: cityValue, - hint: LocaleKeys.chooseCity.tr() + "*", - ) - : CircularProgressIndicator(), - 12.height, - if (cityId != -1) - Column( - children: [ - TxtField( - hint: LocaleKeys.branchName.tr() + "*", - value: branchName, - onChanged: (v) { - branchName = v; - }, - ), - 12.height, - TxtField( - hint: LocaleKeys.branchDescription.tr() + "*", - value: branchDescription, - onChanged: (v) { - branchDescription = v; - }, - ), - 12.height, - TxtField( - hint: LocaleKeys.address.tr(), - isNeedClickAll: false, - maxLines: 5, - value: address, - onChanged: (v) { - address = v; - }, - ), - 12.height, - InkWell( - onTap: () { - navigateTo( - context, - PickLocationPage( - onPickAddress: (double latitude, double longitude, String address) { - setState(() { - this.latitude = latitude; - this.longitude = longitude; - this.address = address; - }); - }, - ), - ); - }, - child: Container( - width: double.infinity, - height: 45, - decoration: BoxDecoration( - color: Colors.transparent, - border: Border.all(color: MyColors.darkPrimaryColor, width: 2), - borderRadius: BorderRadius.all(Radius.circular(8)), - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Icon( - Icons.place_outlined, - size: 18, - color: MyColors.darkPrimaryColor, - ), - 8.width, - Text( - LocaleKeys.pickAddress.tr(), - style: TextStyle( - color: MyColors.darkPrimaryColor, - ), - ), - Icon( - Icons.place_outlined, - size: 18, - color: Colors.transparent, - ), - ], - ), - ), - ), - ], - ), - ], - ), - ), - ), - ), - Container( - width: double.infinity, - child: Padding( - padding: const EdgeInsets.only(left: 20, right: 20, bottom: 20), - child: ShowFillButton( - title: widget.branchData != null ? (widget.branchData!.id == null ? LocaleKeys.createBranch.tr() : LocaleKeys.updateBranch.tr()) : LocaleKeys.createBranch.tr(), - onPressed: () async { - if (widget.branchData == null) { - Utils.showLoading(context); - MResponse res = await BranchApiClent().createBranch(branchName, branchDescription, cityId.toString(), address, latitude.toString(), longitude.toString()); - Utils.hideLoading(context); - if (res.messageStatus == 1) { - Utils.showToast(LocaleKeys.branch_created.tr()); - pop(context); - } else { - Utils.showToast(res.message ?? ""); - } - } else { - Utils.showLoading(context); - MResponse res = - await BranchApiClent().updateBranch(widget.branchData!.id ?? 0, branchName, branchDescription, cityId.toString(), address, latitude.toString(), longitude.toString()); - Utils.hideLoading(context); - if (res.messageStatus == 1) { - Utils.showToast(LocaleKeys.branch_updated.tr()); - pop(context); - pop(context); - } else { - Utils.showToast(res.message ?? ""); - } - } - }, - ), - ), - ), - ], - ), - ), - ); - } -} diff --git a/lib/pages/settings/create_services_page.dart b/lib/pages/settings/create_services_page.dart deleted file mode 100644 index 227aa1d..0000000 --- a/lib/pages/settings/create_services_page.dart +++ /dev/null @@ -1,263 +0,0 @@ -import 'package:car_provider_app/api/client/branch_api_client.dart'; -import 'package:car_provider_app/classes/utils.dart'; -import 'package:car_provider_app/generated/locale_keys.g.dart'; -import 'package:car_provider_app/models/m_response.dart'; -import 'package:car_provider_app/models/profile/branch.dart'; -import 'package:car_provider_app/models/profile/categroy.dart'; -import 'package:car_provider_app/models/profile/services.dart'; -import 'package:car_provider_app/models/user/country.dart'; -import 'package:car_provider_app/utils/navigator.dart'; -import 'package:car_provider_app/widgets/app_bar.dart'; -import 'package:car_provider_app/widgets/dropdown/dropdow_field.dart'; -import 'package:car_provider_app/widgets/button/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 'package:car_provider_app/extensions/int_extensions.dart'; -import 'package:car_provider_app/extensions/string_extensions.dart'; - -import '../../classes/colors.dart'; -import '../../models/profile/branch2.dart'; -import '../../utils/utils.dart'; - -class CreateServicesPage extends StatefulWidget { - ServiceProviderBranch? serviceProviderBranch; - - CreateServicesPage(this.serviceProviderBranch); - - @override - State createState() => _CreateServicesPageState(); -} - -class _CreateServicesPageState extends State { - String? branchName; - int categoryId = -1, branchId = -1; - DropValue? branchValue; - - List countryDropList = []; - List categoryDropList = []; - - Branch? branch; - Category? category; - Services? services; - - @override - void initState() { - // TODO: implement initState - super.initState(); - if (widget.serviceProviderBranch != null) { - branchId = widget.serviceProviderBranch!.id ?? -1; - branchValue = new DropValue(branchId, widget.serviceProviderBranch!.branchName ?? "", ""); - print("llll1 " + branchId.toString() + " " + widget.serviceProviderBranch!.branchName.toString()); - if (branchId != 1) fetchBrancheCategory(); - } - fetchBranches(); - } - - fetchBranches() async { - branch = await BranchApiClent().fetchAllBranches(); - setState(() { - branch!.data?.forEach((element) { - countryDropList.add(new DropValue(element.id ?? 0, ((element.branchName!.isEmpty ? "N/A" : element.branchName) ?? "N/A"), "")); - }); - }); - } - - fetchBrancheCategory() async { - category = await BranchApiClent().fetchBranchCategory(); - setState(() { - category!.data?.forEach((element) { - categoryDropList.add(new DropValue( - element.id ?? 0, - ((element.categoryName!.isEmpty - ? "N/A" - : EasyLocalization.of(context)?.currentLocale?.countryCode == "SA" - ? element.categoryNameN - : element.categoryName) ?? - "N/A"), - "")); - }); - }); - } - - fetchServices() async { - services = await BranchApiClent().fetchServices(categoryId.toString()); - setState(() {}); - } - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: appBar(context, title: LocaleKeys.defineServices.tr()), - body: Container( - width: double.infinity, - height: double.infinity, - child: Column( - children: [ - Expanded( - child: SingleChildScrollView( - child: Padding( - padding: const EdgeInsets.all(12.0), - child: Column( - children: [ - branch != null - ? (branchValue != null && branchId != -1) - ? Container( - width: double.infinity, - child: Text( - branchValue!.value ?? "", - style: TextStyle( - fontSize: 12, - fontWeight: FontWeight.bold, - ), - ), - decoration: containerColorRadiusBorderWidth( - MyColors.textFieldColor, - 8, - MyColors.textFieldColor, - 0, - ), - margin: EdgeInsets.all(0), - padding: EdgeInsets.only(left: 8, right: 8, bottom: 12, top: 12), - ) - : DropdownField( - (DropValue value) { - setState(() { - // countryCode = value.subValue; - // countryId = value.id; - // fetchCites(); - branchId = value.id; - fetchBrancheCategory(); - }); - }, - list: countryDropList, - hint: LocaleKeys.selectBranch.tr(), - dropdownValue: branchValue, - ) - : CircularProgressIndicator(), - 12.height, - (category != null) - ? DropdownField((DropValue value) { - setState(() { - // countryCode = value.subValue; - // countryId = value.id; - // fetchCites(); - categoryId = value.id; - fetchServices(); - }); - }, list: categoryDropList, hint: LocaleKeys.selectServiceCategory.tr()) - : branchId == -1 - ? Container() - : CircularProgressIndicator(), - 12.height, - if ((categoryId != -1)) - services == null - ? CircularProgressIndicator() - : ListView.separated( - itemBuilder: (context, index) { - return Padding( - padding: const EdgeInsets.all(8.0), - child: Row( - children: [ - Checkbox( - value: services!.data![index].isSelected, - onChanged: (v) { - setState(() { - services!.data![index].isSelected = v; - }); - }, - ), - 12.width, - ((EasyLocalization.of(context)?.currentLocale?.countryCode == "SA" ? services!.data![index].descriptionN : services!.data![index].description) ?? "").toText12() - ], - ), - ); - }, - separatorBuilder: (context, index) { - return 1.height; - }, - itemCount: services!.data!.length, - physics: NeverScrollableScrollPhysics(), - shrinkWrap: true, - ) - ], - ), - ), - ), - ), - if (checkServicesSelection()) - Padding( - padding: const EdgeInsets.all(12.0), - child: ShowFillButton( - title: LocaleKeys.save.tr(), - maxWidth: double.infinity, - onPressed: () { - createService(); - }, - ), - ), - ], - ), - ), - ); - } - - bool checkServicesSelection() { - bool isServiceSelected = false; - try { - services!.data!.forEach((element) { - if (element.isSelected ?? false) isServiceSelected = true; - }); - } catch (e) { - isServiceSelected = false; - } - - return isServiceSelected; - } - - createService() async { - List> map = []; - if (widget.serviceProviderBranch != null && branchId != -1) { - for (int i = 0; i < services!.data!.length; i++) { - if (services!.data![i].isSelected ?? false) { - var postParams = { - // "id": services!.data![i].id, - "providerBranchID": branchId, - "serviceID": services!.data![i].id, - "isAllowAppointment": true, - "isActive": true - }; - map.add(postParams); - } - } - Utils.showLoading(context); - MResponse mResponse = await BranchApiClent().createService(map); - Utils.hideLoading(context); - - if (widget.serviceProviderBranch != null) { - Utils.showToast(mResponse.message ?? ""); - if (mResponse.messageStatus != 2) { - pop(context); - pop(context); - } - } - } else { - for (int i = 0; i < services!.data!.length; i++) { - if (services!.data![i].isSelected ?? false) { - var postParams = { - // "id": services!.data![i].id, - "providerBranchID": branchId, - "serviceID": services!.data![i].id, - "isAllowAppointment": true, - "isActive": true - }; - map.add(postParams); - } - } - Utils.showLoading(context); - MResponse mResponse = await BranchApiClent().createService(map); - Utils.hideLoading(context); - Utils.showToast(mResponse.message ?? ""); - } - } -} diff --git a/lib/pages/user/change_email_page.dart b/lib/pages/user/change_email_page.dart deleted file mode 100644 index d1fddbf..0000000 --- a/lib/pages/user/change_email_page.dart +++ /dev/null @@ -1,92 +0,0 @@ -import 'package:car_provider_app/api/client/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/extensions/int_extensions.dart'; -import 'package:car_provider_app/extensions/string_extensions.dart'; -import 'package:car_provider_app/generated/locale_keys.g.dart'; -import 'package:car_provider_app/models/user/change_email.dart'; -import 'package:car_provider_app/models/user/confirm_email.dart'; -import 'package:car_provider_app/utils/navigator.dart'; -import 'package:car_provider_app/widgets/app_bar.dart'; -import 'package:car_provider_app/widgets/dialog/dialogs.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/button/show_fill_button.dart'; -import 'package:car_provider_app/widgets/txt_field.dart'; -import 'package:easy_localization/src/public_ext.dart'; -import 'package:flutter/material.dart'; - -import 'dart:convert'; -import 'package:http/http.dart'; - -class ChangeEmailPage extends StatefulWidget { - @override - State createState() => _ChangeEmailPageState(); -} - -class _ChangeEmailPageState extends State { - String password = ""; - String email = ''; - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: appBar(context, title: LocaleKeys.changeEmail.tr()), - body: SingleChildScrollView( - child: Container( - // width: double.infinity, - // height: double.infinity, - padding: EdgeInsets.all(20), - child: Column( - children: [ - LocaleKeys.enterEmail.tr().toText24(), - 12.height, - TxtField(hint: LocaleKeys.enterNewEmail.tr(), onChanged: (v) => email = v,), - 12.height, - TxtField(hint: LocaleKeys.enterCurrentPassword.tr(), onChanged: (v) => password = v,), - 40.height, - ShowFillButton( - title: LocaleKeys.confirm.tr(), - maxWidth: double.infinity, - onPressed: () { - changeEmail(context); - }, - ), - ], - ), - ), - ), - ); - } - - Future changeEmail(BuildContext context) async { - Utils.showLoading(context); - ChanEmail otpRequest = await UserApiClent().ChangeEmailOTPRequest(email, password); - Utils.hideLoading(context); - if (otpRequest.messageStatus == 1) { - showMDialog(context, child: OtpDialog( - onClick: (String code) async { - pop(context); - Utils.showLoading(context); - ConfirmEmail otpCompare = await UserApiClent().ChangeEmail(otpRequest.data!.userToken ?? "", code); - Utils.hideLoading(context); - if (otpCompare.messageStatus == 1) { - showMDialog( - context, - child: MessageDialog( - title: LocaleKeys.emailChangedSuccessfully.tr(), - onClick: () { - Navigator.of(context).pushNamedAndRemoveUntil(AppRoutes.loginWithPassword, (Route route) => false); - }, - ), - ); - } else { - Utils.showToast(otpCompare.message ?? ""); - } - }, - )); - } else { - Utils.showToast(otpRequest.message ?? ""); - } - } -} diff --git a/lib/pages/user/change_mobile_page.dart b/lib/pages/user/change_mobile_page.dart deleted file mode 100644 index ac69288..0000000 --- a/lib/pages/user/change_mobile_page.dart +++ /dev/null @@ -1,100 +0,0 @@ -import 'package:car_provider_app/api/client/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/extensions/int_extensions.dart'; -import 'package:car_provider_app/extensions/string_extensions.dart'; -import 'package:car_provider_app/generated/locale_keys.g.dart'; -import 'package:car_provider_app/models/user/change_mobile.dart'; -import 'package:car_provider_app/models/user/confirm_mobile.dart'; -import 'package:car_provider_app/utils/navigator.dart'; -import 'package:car_provider_app/widgets/app_bar.dart'; -import 'package:car_provider_app/widgets/dialog/dialogs.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/button/show_fill_button.dart'; -import 'package:car_provider_app/widgets/txt_field.dart'; -import 'package:easy_localization/src/public_ext.dart'; -import 'package:flutter/material.dart'; - -import 'dart:convert'; -import 'package:http/http.dart'; - -class ChangeMobilePage extends StatefulWidget { - @override - State createState() => _ChangeMobilePageState(); -} - -class _ChangeMobilePageState extends State { - int countryID = 1; - - String mobileNo = ''; - String password = ''; - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: appBar(context, title: LocaleKeys.changeMobile.tr()), - body: SingleChildScrollView( - child: Container( - // width: double.infinity, - // height: double.infinity, - padding: EdgeInsets.all(20), - child: Column( - children: [ - LocaleKeys.enterNewPhoneNumber.tr().toText24(), - 12.height, - TxtField( - hint: LocaleKeys.enterNewPhoneNumber.tr(), - onChanged: (v) => mobileNo = v, - ), - 12.height, - TxtField( - hint: LocaleKeys.enterCurrentPassword.tr(), - onChanged: (v) => password = v, - ), - 20.height, - ShowFillButton( - title: LocaleKeys.confirm.tr(), - maxWidth: double.infinity, - onPressed: () { - changeMobile(context); - }, - ), - ], - ), - ), - ), - ); - } - - Future changeMobile(BuildContext context) async { - Utils.showLoading(context); - ChangeMobile otpRequest = await UserApiClent().ChangeMobileNoOTPRequest(countryID, mobileNo, password); - Utils.hideLoading(context); - if (otpRequest.messageStatus == 1) { - showMDialog(context, child: OtpDialog( - onClick: (String code) async { - pop(context); - Utils.showLoading(context); - ConfirmMobile otpCompare = await UserApiClent().ChangeMobileNo(otpRequest.data!.userToken ?? "", code); - Utils.hideLoading(context); - if (otpCompare.messageStatus == 1) { - showMDialog( - context, - child: MessageDialog( - title: LocaleKeys.phoneNumberVerified.tr(), - onClick: () { - Navigator.of(context).pushNamedAndRemoveUntil(AppRoutes.loginWithPassword, (Route route) => false); - }, - ), - ); - } else { - Utils.showToast(otpCompare.message ?? ""); - } - }, - )); - } else { - Utils.showToast(otpRequest.message ?? ""); - } - } -} diff --git a/lib/pages/user/change_password_page.dart b/lib/pages/user/change_password_page.dart deleted file mode 100644 index e050968..0000000 --- a/lib/pages/user/change_password_page.dart +++ /dev/null @@ -1,98 +0,0 @@ -import 'package:car_provider_app/api/client/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/generated/locale_keys.g.dart'; -import 'package:car_provider_app/models/user/change_password.dart'; -import 'package:car_provider_app/models/user/confirm_password.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/dialog/dialogs.dart'; -import 'package:car_provider_app/widgets/dialog/message_dialog.dart'; -import 'package:car_provider_app/widgets/button/show_fill_button.dart'; -import 'package:car_provider_app/extensions/string_extensions.dart'; -import 'package:car_provider_app/extensions/int_extensions.dart'; -import 'package:car_provider_app/widgets/txt_field.dart'; -import 'package:easy_localization/src/public_ext.dart'; -import 'package:flutter/material.dart'; - -import 'dart:convert'; -import 'package:http/http.dart'; - -import '../../models/m_response.dart'; - -class ChangePasswordPage extends StatefulWidget { - ChangePasswordPage({Key? key}) : super(key: key); - - @override - State createState() => _ChangePasswordPageState(); -} - -class _ChangePasswordPageState extends State { - String newPassword = ""; - String currentPasswor = ''; - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: appBar(context, title: LocaleKeys.changePassword.tr()), - body: SingleChildScrollView( - child: Container( - // width: double.infinity, - // height: double.infinity, - padding: EdgeInsets.all(40), - child: Column( - children: [ - LocaleKeys.enterNewPassword.tr().toText24(), - 12.height, - TxtField( - hint: LocaleKeys.enterOldPassword.tr(), - onChanged: (v) => currentPasswor = v, - ), - 12.height, - TxtField( - hint: LocaleKeys.enterNewPassword.tr(), - onChanged: (v) => newPassword = v, - ), - 20.height, - ShowFillButton( - title: LocaleKeys.confirm.tr(), - maxWidth: double.infinity, - onPressed: () { - changePassword(context); - }, - ), - ], - ), - ), - ), - ); - } - - Future changePassword(BuildContext context) async { - if (validateStructure(newPassword ?? "")) { - Utils.showLoading(context); - MResponse res = await UserApiClent().ChangePassword(currentPasswor, newPassword); - Utils.hideLoading(context); - if (res.messageStatus == 1) { - Utils.showToast(LocaleKeys.passwordIsUpdated.tr()); - //("Password is Updated"); - // navigateWithName(context, AppRoutes.loginWithPassword); - Navigator.of(context) - .pushNamedAndRemoveUntil(AppRoutes.loginWithPassword, (Route route) => false); - } else { - Utils.showToast(res.message ?? ""); - } - } else { - Utils.showToast(LocaleKeys.passwordShouldContains.tr()); - //("Password Should contains Character, Number, Capital and small letters"); - } - } - - bool validateStructure(String value) { - String pattern = r'^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[!@#\$&*~]).{6,}$'; - RegExp regExp = new RegExp(pattern); - return regExp.hasMatch(value); - } -} diff --git a/lib/pages/user/complete_profile_page.dart b/lib/pages/user/complete_profile_page.dart deleted file mode 100644 index f654dab..0000000 --- a/lib/pages/user/complete_profile_page.dart +++ /dev/null @@ -1,257 +0,0 @@ -import 'package:car_provider_app/api/client/user_api_client.dart'; -import 'package:car_provider_app/classes/colors.dart'; -import 'package:car_provider_app/classes/utils.dart'; -import 'package:car_provider_app/config/routes.dart'; -import 'package:car_provider_app/models/m_response.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/dialog/dialogs.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/button/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:easy_localization/src/public_ext.dart'; -import 'package:flutter/material.dart'; - -import '../../generated/locale_keys.g.dart'; - -class CompleteProfilePage extends StatefulWidget { - RegisterUser user; - - CompleteProfilePage(this.user); - - @override - State createState() => _CompleteProfilePageState(); -} - -class _CompleteProfilePageState extends State { - String? firstName = "", lastName = "", email = "", password = "", confirmPassword = ""; - bool isChecked = false; - - @override - void initState() { - // TODO: implement initState - super.initState(); - } - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: appBar( - context, - title: LocaleKeys.signUp.tr(), - ), - body: Container( - width: double.infinity, - height: double.infinity, - child: SingleChildScrollView( - child: Padding( - padding: EdgeInsets.all(20), - child: Column( - children: [ - 6.height, - LocaleKeys.completeProfile.tr().toText24(), - 12.height, - Padding( - padding: const EdgeInsets.symmetric(horizontal: 20), - child: LocaleKeys.profileMsg.tr().toText14( - color: MyColors.lightTextColor, - textAlign: TextAlign.center, - ), - ), - 12.height, - TxtField( - hint: LocaleKeys.firstName.tr(), - value: firstName, - onChanged: (v) { - firstName = v; - }, - ), - 12.height, - TxtField( - hint: LocaleKeys.surname.tr(), - value: lastName, - onChanged: (v) { - lastName = v; - }, - ), - 12.height, - TxtField( - hint: LocaleKeys.email.tr(), - value: email, - // isButtonEnable: email!.length > 0 ? true : false, - buttonTitle: LocaleKeys.verify.tr(), - onChanged: (v) { - email = v; - }, - ), - 12.height, - TxtField( - hint: LocaleKeys.createPass.tr(), - isPasswordEnabled: true, - maxLines: 1, - value: password, - onChanged: (v) { - password = v; - }, - ), - 12.height, - TxtField( - hint: LocaleKeys.confirmPass.tr(), - isPasswordEnabled: true, - maxLines: 1, - value: confirmPassword, - onChanged: (v) { - confirmPassword = v; - }, - ), - // 12.height, - // TxtField( - // hint: "Phone Number", - // ), - 50.height, - Row( - children: [ - buildCheckbox(), - Expanded( - child: Column( - children: [ - LocaleKeys.termsOfService.tr().toText12(), - LocaleKeys.terms.tr().toText12(color: MyColors.darkPrimaryColor), - ], - ), - ), - Theme( - data: ThemeData(unselectedWidgetColor: Colors.transparent), - child: Checkbox( - value: false, - onChanged: (_) {}, - ), - ) - ], - ), - 16.height, - ShowFillButton( - title: LocaleKeys.save.tr(), - maxWidth: double.infinity, - onPressed: () { - if (validation()) performCompleteProfile(); - }, - ), - 16.height, - ], - ), - ), - ), - ), - ); - } - - Widget buildCheckbox() => Checkbox( - value: isChecked, - activeColor: Colors.blue, - onChanged: (value) { - setState(() { - isChecked = value!; - }); - }, - ); - - // Future performCompleteProfile() async { - // if(validateStructure(password??"")){ - // 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( "Successfully registered, Please login once"); - // pop(context); - // // pop(context); - // // navigateReplaceWithName(context, AppRoutes.dashboard,arguments: user); - // } else { - // Utils.showToast(user.message ?? ""); - // } - // } else { - // Utils.showToast("Please enter same password"); - // } - // }else{ - // Utils.showToast("Password Should contains character, Number, Capital and small letters"); - // } - // - // } - - Future performCompleteProfile() async { - if (validateStructure(password ?? "")) { - 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( - LocaleKeys.successfullyRegistered.tr(), - ); - //("Successfully Registered, Please login once"); - pop(context); - // navigateReplaceWithName(context, AppRoutes.dashboard,arguments: user); - } else { - Utils.showToast(user.message ?? ""); - } - } else { - Utils.showToast( - LocaleKeys.pleaseEnterSamePassword.tr(), - ); - //("Please enter same password"); - } - } else { - Utils.showToast( - LocaleKeys.passwordShouldContains.tr(), - ); - //("Password Should contains Character, Number, Capital and small letters"); - } - } - - bool validateStructure(String value) { - String pattern = r'^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[!@#\$&*~]).{6,}$'; - RegExp regExp = new RegExp(pattern); - return regExp.hasMatch(value); - } - - bool isEmail(String em) { - String p = r'^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$'; - RegExp regExp = new RegExp(p); - return regExp.hasMatch(em); - } - - bool validation() { - bool isValid = true; - if (firstName!.isEmpty) { - Utils.showToast("First name is mandatory"); - isValid = false; - } else if (lastName!.isEmpty) { - Utils.showToast("Surname is mandatory"); - isValid = false; - } else if (email!.isNotEmpty) { - if (!isEmail(email!)) { - Utils.showToast(LocaleKeys.enterValidEmail.tr()); - //("Enter Valid Email"); - isValid = false; - } - } else if (password!.isEmpty) { - Utils.showToast(LocaleKeys.passwordNameMandatory.tr()); - //("Password is mandatory"); - isValid = false; - } else if (!isChecked) { - Utils.showToast("Please accept terms"); - isValid = false; - } - return isValid; - } -} diff --git a/lib/pages/user/confirm_new_password_page.dart b/lib/pages/user/confirm_new_password_page.dart deleted file mode 100644 index d7ff962..0000000 --- a/lib/pages/user/confirm_new_password_page.dart +++ /dev/null @@ -1,123 +0,0 @@ -import 'package:car_provider_app/api/client/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/generated/locale_keys.g.dart'; -import 'package:car_provider_app/models/user/confirm_password.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/dialog/dialogs.dart'; -import 'package:car_provider_app/widgets/dialog/message_dialog.dart'; -import 'package:car_provider_app/widgets/button/show_fill_button.dart'; -import 'package:car_provider_app/extensions/string_extensions.dart'; -import 'package:car_provider_app/extensions/int_extensions.dart'; -import 'package:car_provider_app/widgets/txt_field.dart'; -import 'package:easy_localization/src/public_ext.dart'; -import 'package:flutter/material.dart'; - -import 'dart:convert'; -import 'package:http/http.dart'; - -class ConfirmNewPasswordPage extends StatefulWidget { - String userToken; - - ConfirmNewPasswordPage(this.userToken, {Key? key}) : super(key: key); - - @override - State createState() => _ConfirmNewPasswordPageState(); -} - -class _ConfirmNewPasswordPageState extends State { - String newPassword = ""; - String confirmPassword = ''; - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: appBar(context,title:LocaleKeys.forgetPassword.tr()), - body: SingleChildScrollView( - child: Container( - // width: double.infinity, - // height: double.infinity, - padding: EdgeInsets.all(40), - child: Column( - children: [ - LocaleKeys.newPassword.tr().toText24(), - 12.height, - TextFormField( - decoration: InputDecoration( - hintText: LocaleKeys.enterNewPassword.tr(), - hintStyle: TextStyle(color: Colors.grey), - border: OutlineInputBorder( - borderRadius: const BorderRadius.all( - const Radius.circular(5.0), - ), - ), - ), - obscureText: true, - onChanged: (v) => newPassword = v, - ), - 12.height, - TextFormField( - decoration: InputDecoration( - hintText: LocaleKeys.confirmPassword.tr(), - hintStyle: TextStyle(color: Colors.grey), - border: OutlineInputBorder( - borderRadius: const BorderRadius.all( - const Radius.circular(5.0), - ), - ), - ), - obscureText: true, - onChanged: (v) => confirmPassword = v, - ), - 40.height, - ShowFillButton( - title: LocaleKeys.confirm.tr(), - maxWidth: double.infinity, - onPressed: () { - if (validation()) confirmPasswordOTP(context); - }, - ), - ], - ), - ), - ), - ); - } - - Future confirmPasswordOTP(BuildContext context) async { - if(validateStructure(newPassword??"")){ - Utils.showLoading(context); - Response res = await UserApiClent().ForgetPassword(widget.userToken, newPassword); - Utils.hideLoading(context); - ConfirmPassword data = ConfirmPassword.fromJson(jsonDecode(res.body)); - if (data.messageStatus == 1) { - Utils.showToast(LocaleKeys.passwordIsUpdated.tr()); - //("Password is Updated"); - navigateWithName(context, AppRoutes.loginWithPassword); - } else { - Utils.showToast(data.message ?? ""); - } - }else{ - Utils.showToast(LocaleKeys.passwordShouldContains.tr()); - //("Password Should contains Character, Number, Capital and small letters"); - } - } - - bool validation() { - bool isValid = true; - if (newPassword != confirmPassword) { - Utils.showToast("Confirmation password does not match the entered password"); - isValid = false; - } - return isValid; - } - - bool validateStructure(String value){ - String pattern = r'^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[!@#\$&*~]).{6,}$'; - RegExp regExp = new RegExp(pattern); - return regExp.hasMatch(value); - } -} diff --git a/lib/pages/user/edit_account_page.dart b/lib/pages/user/edit_account_page.dart deleted file mode 100644 index d1131d8..0000000 --- a/lib/pages/user/edit_account_page.dart +++ /dev/null @@ -1,203 +0,0 @@ -import 'dart:convert'; - -import 'package:car_provider_app/api/client/user_api_client.dart'; -import 'package:car_provider_app/classes/app_state.dart'; -import 'package:car_provider_app/classes/colors.dart'; -import 'package:car_provider_app/classes/utils.dart'; -import 'package:car_provider_app/config/routes.dart'; -import 'package:car_provider_app/extensions/int_extensions.dart'; -import 'package:car_provider_app/extensions/string_extensions.dart'; -import 'package:car_provider_app/models/m_response.dart'; -import 'package:car_provider_app/models/user/verify_email.dart'; -import 'package:car_provider_app/models/user/verify_email_otp.dart'; -import 'package:car_provider_app/utils/navigator.dart'; -import 'package:car_provider_app/widgets/app_bar.dart'; -import 'package:car_provider_app/widgets/dialog/dialogs.dart'; -import 'package:car_provider_app/widgets/dialog/message_dialog.dart'; -import 'package:car_provider_app/widgets/dialog/otp_dialog.dart'; -import 'package:easy_localization/easy_localization.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_svg/flutter_svg.dart'; -import 'package:sizer/sizer.dart'; - -import '../../generated/locale_keys.g.dart'; - -class EditAccountPage extends StatefulWidget { - @override - State createState() => _EditAccountPageState(); -} - -class _EditAccountPageState extends State { - String userID = ""; - String email = ''; - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: appBar(context, title: LocaleKeys.editAccount.tr()), - body: Container( - width: double.infinity, - height: double.infinity, - padding: EdgeInsets.all(20), - child: Column( - children: [ - 20.height, - Row( - crossAxisAlignment: CrossAxisAlignment.center, - mainAxisAlignment: MainAxisAlignment.start, - children: [ - SvgPicture.asset( - "assets/images/ic_lock.svg", - color: MyColors.darkPrimaryColor, - width: 16, - ), - 20.width, - Expanded(child: LocaleKeys.changePassword.tr().toText12(isBold: true)), - ElevatedButton( - style: ElevatedButton.styleFrom( - textStyle: const TextStyle(color: Colors.white), - backgroundColor: MyColors.darkPrimaryColor, - padding: EdgeInsets.symmetric(horizontal: 8, vertical: 8), - ), - onPressed: () { - navigateWithName(context, AppRoutes.changePassword); - }, - child: Text( - LocaleKeys.change.tr(), - style: TextStyle( - fontSize: 14, - fontWeight: FontWeight.w600, - ), - ), - ), - ], - ), - 15.height, - Row( - crossAxisAlignment: CrossAxisAlignment.center, - mainAxisAlignment: MainAxisAlignment.start, - children: [ - SvgPicture.asset( - "assets/images/ic_mobile.svg", - color: MyColors.darkPrimaryColor, - width: 16, - ), - 20.width, - Expanded(child: LocaleKeys.changeMobile.tr().toText12(isBold: true)), - LocaleKeys.verify.tr().toText12(color: Colors.green), - 20.width, - ElevatedButton( - style: ElevatedButton.styleFrom( - textStyle: const TextStyle(color: Colors.white), - backgroundColor: MyColors.darkPrimaryColor, - padding: EdgeInsets.symmetric(horizontal: 8, vertical: 8), - ), - onPressed: () { - navigateWithName(context, AppRoutes.changeMobilePage); - }, - child: Text( - LocaleKeys.change.tr(), - style: TextStyle( - fontSize: 14, - fontWeight: FontWeight.w600, - ), - ), - ) - ], - ), - 20.height, - Row( - crossAxisAlignment: CrossAxisAlignment.center, - mainAxisAlignment: MainAxisAlignment.start, - children: [ - SvgPicture.asset( - "assets/images/ic_email.svg", - color: MyColors.darkPrimaryColor, - width: 16, - ), - 20.width, - Expanded(child: LocaleKeys.changeEmail.tr().toText12(isBold: true)), - InkWell( - child: ((AppState().getUser.data!.userInfo!.isEmailVerified ?? false) ? LocaleKeys.verified.tr() : LocaleKeys.verify.tr()).toText12(color: Colors.green), - onTap: (AppState().getUser.data!.userInfo!.isEmailVerified ?? false) - ? null - : () { - verifyEmail(context); - }, - ), - 20.width, - ElevatedButton( - style: ElevatedButton.styleFrom( - textStyle: const TextStyle(color: Colors.white), - backgroundColor: MyColors.darkPrimaryColor, - padding: EdgeInsets.symmetric(horizontal: 8, vertical: 8), - ), - onPressed: () { - navigateWithName(context, AppRoutes.changeEmailPage); - }, - child: Text( - LocaleKeys.change.tr(), - style: TextStyle( - fontSize: 14, - fontWeight: FontWeight.w600, - ), - ), - ), - ], - ) - - // ListTile( - // leading: SvgPicture.asset("assets/images/ic_mobile.svg"), - // title: "Change Mobile".toText12(), - // onTap: () { - // navigateWithName(context, AppRoutes.changeMobilePage); - // }, - // ), - // ListTile( - // leading: Icon(Icons.email_outlined, color: Colors.blue,), - // title: "Change Email".toText12(), - // onTap: () { - // navigateWithName(context, AppRoutes.changeEmailPage); - // }, - // ), - ], - ), - ), - ); - } - - Future verifyEmail(BuildContext context) async { - Utils.showLoading(context); - VerifyEmail otpRequest = await UserApiClent().EmailVerify(email, userID); - Utils.hideLoading(context); - if (otpRequest.messageStatus == 1) { - showMDialog(context, child: OtpDialog( - onClick: (String code) async { - pop(context); - Utils.showLoading(context); - MResponse otpCompare = await UserApiClent().EmailVerifyOTPVerify(otpRequest.data!.userToken ?? "", code); - Utils.hideLoading(context); - if (otpCompare.messageStatus == 1) { - AppState().getUser.data!.userInfo!.isEmailVerified = true; - setState(() {}); - Utils.showToast(LocaleKeys.emailVerified.tr()); - // Navigator.of(context).pushNamedAndRemoveUntil(AppRoutes.dashboard, (Route route) => false); - // showMDialog( - // context, - // child: MessageDialog( - // title: "Email is Verified", - // onClick: () { - // Navigator.of(context).pushNamedAndRemoveUntil(AppRoutes.dashboard, (Route route) => false); - // }, - // ), - // ); - } else { - Utils.showToast(otpCompare.message ?? ""); - } - }, - )); - } else { - Utils.showToast(otpRequest.message ?? ""); - } - } -} diff --git a/lib/pages/user/forget_password_method_page.dart b/lib/pages/user/forget_password_method_page.dart deleted file mode 100644 index fd79a08..0000000 --- a/lib/pages/user/forget_password_method_page.dart +++ /dev/null @@ -1,94 +0,0 @@ -import 'dart:convert'; -import 'package:car_provider_app/api/client/user_api_client.dart'; -import 'package:car_provider_app/classes/utils.dart'; -import 'package:car_provider_app/config/constants.dart'; -import 'package:car_provider_app/config/routes.dart'; -import 'package:car_provider_app/extensions/int_extensions.dart'; -import 'package:car_provider_app/extensions/string_extensions.dart'; -import 'package:car_provider_app/generated/locale_keys.g.dart'; -import 'package:car_provider_app/models/user/forget_password_otp_compare.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/button/show_image_button.dart'; -import 'package:car_provider_app/widgets/dialog/dialogs.dart'; -import 'package:car_provider_app/widgets/dialog/otp_dialog.dart'; -import 'package:easy_localization/src/public_ext.dart'; -import 'package:flutter/material.dart'; -import 'package:http/http.dart'; - -class ForgetPasswordMethodPage extends StatefulWidget { - String userToken; - - ForgetPasswordMethodPage(this.userToken); - - @override - State createState() => _ForgetPasswordMethodPageState(); -} - -class _ForgetPasswordMethodPageState extends State { - int otpType = 1; - String userOTP = ""; - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: appBar(context, title: LocaleKeys.forgetPassword.tr()), - body: Container( - width: double.infinity, - height: double.infinity, - padding: EdgeInsets.all(40), - child: Column( - children: [ - LocaleKeys.selectMethod.tr().toText24(), - 12.height, - Row( - children: [ - Expanded( - child: ShowImageButton( - onClick: () { - otpType = 1; - forgetPasswordOTPMethod(context); - }, - title: LocaleKeys.SMS.tr(), - icon: icons + "ic_sms.svg", - ), - ), - 20.width, - Expanded( - child: ShowImageButton( - onClick: () { - otpType = 1; - forgetPasswordOTPMethod(context); - }, - title: LocaleKeys.whatsapp.tr(), - icon: icons + "ic_whatsapp.svg", - ), - ), - ], - ), - mFlex(10), - ], - ), - ), - ); - } - - Future forgetPasswordOTPMethod(BuildContext context) async { - showMDialog(context, child: OtpDialog( - onClick: (String code) async { - pop(context); - Utils.showLoading(context); - Response res = await UserApiClent().ForgetPasswordOTPCompare(widget.userToken ?? "", code); - Utils.hideLoading(context); - PasswordOTPCompare otpCompare = PasswordOTPCompare.fromJson(jsonDecode(res.body)); - if (otpCompare.messageStatus == 1) { - var userToken = otpCompare.data!.userToken; - navigateWithName(context, AppRoutes.confirmNewPasswordPage, arguments: userToken); - } else { - Utils.showToast(otpCompare.message ?? ""); - } - }, - )); - } -} diff --git a/lib/pages/user/forget_password_page.dart b/lib/pages/user/forget_password_page.dart deleted file mode 100644 index 9b81392..0000000 --- a/lib/pages/user/forget_password_page.dart +++ /dev/null @@ -1,200 +0,0 @@ -import 'package:car_provider_app/api/client/user_api_client.dart'; -import 'package:car_provider_app/api/shared_prefrence.dart'; - -import 'package:car_provider_app/classes/utils.dart'; -import 'package:car_provider_app/config/constants.dart'; -import 'package:car_provider_app/config/routes.dart'; -import 'package:car_provider_app/models/user/forget_password_otp_compare.dart'; -import 'package:car_provider_app/models/user/forget_password_otp_request.dart'; -import 'package:car_provider_app/pages/user/vertify_password_page.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/button/show_image_button.dart'; -import 'package:car_provider_app/widgets/dialog/dialogs.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/button/show_fill_button.dart'; -import 'package:car_provider_app/extensions/string_extensions.dart'; -import 'package:car_provider_app/extensions/int_extensions.dart'; -import 'package:car_provider_app/extensions/widget_extensions.dart'; -import 'package:car_provider_app/widgets/txt_field.dart'; -import 'package:easy_localization/easy_localization.dart'; -import 'package:flutter/material.dart'; -import 'package:car_provider_app/models/user/user.dart'; - -import 'dart:convert'; -import 'package:http/http.dart'; - -import '../../classes/colors.dart'; -import '../../generated/locale_keys.g.dart'; -import '../../models/user/country.dart'; -import '../../widgets/dropdown/dropdow_field.dart'; -import '../../widgets/tab/login_email_tab.dart'; - -class ForgetPasswordPage extends StatefulWidget { - @override - State createState() => _ForgetPasswordPageState(); -} - -class _ForgetPasswordPageState extends State { - int otpType = 1; - - String userName = ""; - ClassType type = ClassType.EMAIL; - Country? _country; - String countryCode = ""; - - @override - void initState() { - super.initState(); - getCountryList(); - } - - getCountryList() async { - _country = await UserApiClent().getAllCountries(); - setState(() {}); - } - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: appBar(context, title: ""), - body: Container( - width: double.infinity, - height: double.infinity, - padding: EdgeInsets.all(20), - child: SingleChildScrollView( - child: Container( - height: MediaQuery.of(context).size.height, - child: Column( - children: [ - 12.height, - LocaleKeys.forgetPassword.tr().toText20(), - 20.height, - LocaleKeys.retrievePassword.tr().toText14( - color: MyColors.lightTextColor, - textAlign: TextAlign.center, - ), - 30.height, - LoginEmailTab( - onSelection: (ClassType type) { - setState(() { - this.type = type; - }); - }, - ), - 12.height, - type == ClassType.NUMBER - ? Column( - children: [ - getCountry(), - 6.height, - TxtField( - hint: "5********", - value: userName, - onChanged: (v) { - userName = v; - }, - ) - ], - ) - : TxtField( - hint: LocaleKeys.emailAddress.tr(), - value: userName, - onChanged: (v) { - userName = v; - }, - ), - 20.height, - (type == ClassType.NUMBER ? LocaleKeys.retriveOnPhone.tr() : LocaleKeys.retriveOnEmail.tr()).toText14( - color: MyColors.lightTextColor, - textAlign: TextAlign.center, - ), - 30.height, - ShowFillButton( - title: LocaleKeys.send.tr(), - maxWidth: double.infinity, - onPressed: () { - if (userName.isNum() && type == ClassType.NUMBER) { - forgetPasswordPhoneOTP(context); - } else if (!userName.isNum() && type == ClassType.EMAIL) { - forgetPasswordEmailOTP(context); - } - }, - ), - mFlex(10), - ], - ), - ), - ), - ), - ); - } - - Widget getCountry() { - if (_country != null) { - List dropList = []; - _country!.data?.forEach((element) { - dropList.add(new DropValue( - element.id ?? 0, - EasyLocalization.of(context)?.currentLocale?.countryCode == "SA" - ? ((element.countryNameN ?? "") + " " + (element.countryCode ?? "")) - : (element.countryName ?? "") + " " + (element.countryCode ?? ""), - element.countryCode ?? "")); - }); - return Padding( - padding: const EdgeInsets.all(0.0), - child: DropdownField((DropValue value) { - countryCode = value.subValue; - }, list: dropList, hint: LocaleKeys.chooseCountry.tr()), - ); - } else { - return Center( - child: CircularProgressIndicator(), - ); - } - } - - Future forgetPasswordPhoneOTP(BuildContext context) async { - Utils.showLoading(context); - Response response = await UserApiClent().ForgetPasswordOTPRequest(countryCode + userName, otpType); - Utils.hideLoading(context); - PasswordOTPRequest otpRequest = PasswordOTPRequest.fromJson(jsonDecode(response.body)); - if (otpRequest.messageStatus == 1) { - var userToken = otpRequest.data!.userToken; - navigateReplaceWithName(context, AppRoutes.forgetPasswordMethodPage, arguments: userToken); - } else { - Utils.showToast(otpRequest.message ?? ""); - } - } - - Future forgetPasswordEmailOTP(BuildContext context) async { - Utils.showLoading(context); - Response response = await UserApiClent().ForgetPasswordOTPRequest(userName, otpType); - Utils.hideLoading(context); - PasswordOTPRequest otpRequest = PasswordOTPRequest.fromJson(jsonDecode(response.body)); - if (otpRequest.messageStatus == 1) { - Utils.showToast(LocaleKeys.codeSentToEmail.tr()); - showMDialog(context, child: OtpDialog( - onClick: (String code) async { - pop(context); - Utils.showLoading(context); - Response res = await UserApiClent().ForgetPasswordOTPCompare(otpRequest.data!.userToken ?? "", code); - Utils.hideLoading(context); - PasswordOTPCompare otpCompare = PasswordOTPCompare.fromJson(jsonDecode(res.body)); - if (otpCompare.messageStatus == 1) { - var userToken = otpCompare.data!.userToken; - print("token is ________"); - print(userToken); - navigateWithName(context, AppRoutes.confirmNewPasswordPage, arguments: userToken); - } else { - Utils.showToast(otpCompare.message ?? ""); - } - }, - )); - } else { - Utils.showToast(otpRequest.message ?? ""); - } - } -} diff --git a/lib/pages/user/login_method_selection_page.dart b/lib/pages/user/login_method_selection_page.dart deleted file mode 100644 index 30d1deb..0000000 --- a/lib/pages/user/login_method_selection_page.dart +++ /dev/null @@ -1,144 +0,0 @@ -import 'dart:convert'; - -import 'package:car_provider_app/api/shared_prefrence.dart'; -import 'package:car_provider_app/api/client/user_api_client.dart'; -import 'package:car_provider_app/classes/app_state.dart'; -import 'package:car_provider_app/classes/utils.dart'; -import 'package:car_provider_app/config/constants.dart'; -import 'package:car_provider_app/config/routes.dart'; -import 'package:car_provider_app/generated/locale_keys.g.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/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/button/show_image_button.dart'; -import 'package:car_provider_app/widgets/dialog/dialogs.dart'; -import 'package:car_provider_app/widgets/dialog/message_dialog.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:car_provider_app/widgets/dialog/otp_dialog.dart'; -import 'package:car_provider_app/widgets/txt_field.dart'; -import 'package:easy_localization/src/public_ext.dart'; -import 'package:flutter/material.dart'; -import 'package:http/http.dart'; - -class LoginMethodSelectionPage extends StatelessWidget { - String? userToken, userName; - - @override - Widget build(BuildContext context) { - if (userToken == null && userName == null) { - Map map = ModalRoute.of(context)!.settings.arguments as Map; - userToken = map["userToke"]; - userName = map["userName"]; - } - return Scaffold( - appBar: appBar(context, title: LocaleKeys.log_in.tr()), - body: Container( - width: double.infinity, - height: double.infinity, - padding: EdgeInsets.all(20), - child: SingleChildScrollView( - child: Column( - children: [ - LocaleKeys.loginSelection.tr().toText20(), - 30.height, - LocaleKeys.welcomeBack.tr().toText20(), - 40.height, - Row( - children: [ - Expanded( - child: ShowImageButton( - onClick: () { - performBasicOtp(context); - }, - title: LocaleKeys.fingerPrint.tr(), - icon: icons + "ic_fingerprint.svg", - ), - ), - 20.width, - Expanded( - child: ShowImageButton( - onClick: () { - performBasicOtp(context); - }, - title: LocaleKeys.faceRecognition.tr(), - icon: icons + "ic_face.svg", - ), - ), - ], - ), - 40.height, - Row( - children: [ - Expanded( - child: ShowImageButton( - onClick: () { - performBasicOtp(context); - }, - title: LocaleKeys.SMS.tr(), - icon: icons + "ic_sms.svg", - ), - ), - 20.width, - Expanded( - child: ShowImageButton( - onClick: () { - // navigateWithName(context, AppRoutes.dashboard); - performBasicOtp(context); - }, - title: LocaleKeys.whatsapp.tr(), - icon: icons + "ic_whatsapp.svg", - ), - ), - ], - ), - ], - ), - ), - ), - ); - } - - Future performBasicOtp(BuildContext context) 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( - userName: userName, - 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)); - if (user.data!.userInfo!.roleId == 5 || user.data!.userInfo!.roleId == 6) { - 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())); - // pop(context); - navigateReplaceWithNameTillLast(context, AppRoutes.dashboard); - } else { - Utils.showToast("Sorry, Only Provider's can log in this app"); - } - } else { - Utils.showToast(verifiedUser.message ?? ""); - } - }, - )); - } else { - Utils.showToast(user.message ?? ""); - } - } -} diff --git a/lib/pages/user/login_verification_page.dart b/lib/pages/user/login_verification_page.dart deleted file mode 100644 index 3c05ae5..0000000 --- a/lib/pages/user/login_verification_page.dart +++ /dev/null @@ -1,182 +0,0 @@ -import 'dart:convert'; - -import 'package:car_provider_app/api/shared_prefrence.dart'; -import 'package:car_provider_app/api/client/user_api_client.dart'; -import 'package:car_provider_app/classes/app_state.dart'; -import 'package:car_provider_app/classes/utils.dart'; -import 'package:car_provider_app/config/constants.dart'; -import 'package:car_provider_app/config/routes.dart'; -import 'package:car_provider_app/generated/locale_keys.g.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/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/button/show_image_button.dart'; -import 'package:car_provider_app/widgets/dialog/dialogs.dart'; -import 'package:car_provider_app/widgets/dialog/message_dialog.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:car_provider_app/widgets/dialog/otp_dialog.dart'; -import 'package:car_provider_app/widgets/txt_field.dart'; -import 'package:easy_localization/src/public_ext.dart'; -import 'package:flutter/material.dart'; -import 'package:http/http.dart'; - -class LoginVerificationPage extends StatefulWidget { - @override - State createState() => _LoginVerificationPageState(); -} - -class _LoginVerificationPageState extends State { - 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 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)); - AppState().setUser = user; - print(user.data!.userInfo!.providerId.toString()); - navigateReplaceWithName(context, AppRoutes.dashboard); - } else { - Utils.showToast(verifiedUser.message ?? ""); - } - }, - )); - } else { - Utils.showToast(user.message ?? ""); - } - } - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: appBar(context,title: LocaleKeys.login.tr()), - body: Container( - width: double.infinity, - height: double.infinity, - padding: EdgeInsets.all(40), - child: Column( - children: [ - LocaleKeys.verifyAccount.tr().toText24(), - mFlex(2), - Row( - children: [ - Expanded( - child: ShowImageButton( - onClick: () { - performBasicOtp(context, userToken); - }, - title: LocaleKeys.fingerPrint.tr(), - icon: icons + "ic_fingerprint.png", - ), - ), - 20.width, - Expanded( - child: ShowImageButton( - onClick: () { - performBasicOtp(context, userToken); - }, - title: LocaleKeys.faceRecognition.tr(), - icon: icons + "ic_face_id.png", - ), - ), - ], - ), - 40.height, - Row( - children: [ - Expanded( - child: ShowImageButton( - onClick: () { - performBasicOtp(context, userToken); - }, - title: LocaleKeys.SMS.tr(), - icon: icons + "ic_sms.png", - ), - ), - 20.width, - Expanded( - child: ShowImageButton( - onClick: () { - performBasicOtp(context, userToken); - }, - title: LocaleKeys.whatsapp.tr(), - icon: icons + "ic_whatsapp.png", - ), - ), - ], - ), - mFlex(10), - ], - ), - ), - ); - } - -// Future performBasicOtp(BuildContext context) async { -// Utils.showLoading(context); -// String userToken=await SharedPrefManager.getUserToken(); -// Response response = await UserApiClent().login_V2_OTP(userToken, "1"); -// Utils.hideLoading(context); -// if (response.statusCode == 200) { -// String userToken = jsonDecode(response.body)["token"]; -// showMDialog(context, child: OtpDialog( -// onClick: (String code) async { -// pop(context); -// Utils.showLoading(context); -// Response response2 = await UserApiClent().login_V2_OTPVerify(userToken, code); -// Utils.hideLoading(context); -// if (response2.statusCode == 200) { -// User user = User.fromJson(jsonDecode(response2.body)); -// SharedPrefManager.setUserToken(user.data!.accessToken ?? ""); -// SharedPrefManager.setUserId(user.data!.userInfo!.userId ?? ""); -// navigateWithName(context, AppRoutes.dashboard); -// } else { -// Utils.showToast("Something went wrong"); -// } -// }, -// )); -// } else { -// String res = jsonDecode(response.body)["errors"][0] ?? ""; -// Utils.showToast(res); -// } -// } -} diff --git a/lib/pages/user/login_verify_account_page.dart b/lib/pages/user/login_verify_account_page.dart deleted file mode 100644 index 1f28282..0000000 --- a/lib/pages/user/login_verify_account_page.dart +++ /dev/null @@ -1,146 +0,0 @@ -import 'package:car_provider_app/api/client/user_api_client.dart'; -import 'package:car_provider_app/classes/utils.dart'; -import 'package:car_provider_app/config/constants.dart'; -import 'package:car_provider_app/config/routes.dart'; -import 'package:car_provider_app/generated/locale_keys.g.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/button/show_image_button.dart'; -import 'package:car_provider_app/widgets/dialog/dialogs.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/extensions/int_extensions.dart'; -import 'package:car_provider_app/extensions/string_extensions.dart'; -import 'package:car_provider_app/extensions/widget_extensions.dart'; -import 'package:car_provider_app/widgets/txt_field.dart'; -import 'package:easy_localization/src/public_ext.dart'; -import 'package:flutter/material.dart'; - -class LoginVerifyAccountPage extends StatelessWidget { - int otpType = 1; - String phoneNum = ""; - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: appBar(context,title: LocaleKeys.login.tr()), - body: Container( - width: double.infinity, - height: double.infinity, - padding: EdgeInsets.all(40), - child: Column( - children: [ - LocaleKeys.verifyAccount.tr().toText24(), - mFlex(1), - TxtField( - hint: "966501234567", - value: phoneNum, - onChanged: (v) { - phoneNum = v; - }, - ), - mFlex(2), - Row( - children: [ - Expanded( - child: ShowImageButton( - onClick: () { - otpType = 1; - performBasicOtp(context); - // showMDialog(context, child: OtpDialog( - // onClick: (String code) { - // pop(context); - // delay(300).then( - // (value) => showMDialog( - // context, - // child: MessageDialog( - // title: "Phone Number Verified", - // onClick: () { - // otpType=1; - // performBasicOtp(context); - // // navigateWithName(context, AppRoutes.completeProfile); - // }, - // ), - // ), - // ); - // }, - // )); - }, - title: 'With SMS', - icon: icons + "ic_sms.png", - ), - ), - 20.width, - Expanded( - child: ShowImageButton( - onClick: () { - otpType = 1; - performBasicOtp(context); - // showMDialog(context, child: OtpDialog( - // onClick: (String code) { - // pop(context); - // delay(300).then( - // (value) => showMDialog( - // context, - // child: MessageDialog( - // title: "Phone Number Verified", - // onClick: () { - // otpType=2; - // performBasicOtp(context); - // // navigateWithName(context, AppRoutes.completeProfile); - // }, - // ), - // ), - // ); - // }, - // )); - }, - title: 'With Whatsapp', - icon: icons + "ic_whatsapp.png", - ), - ), - ], - ), - mFlex(10), - ], - ), - ), - ); - } - - Future performBasicOtp(BuildContext context) async { - Utils.showLoading(context); - BasicOtp basicOtp = await UserApiClent().basicOtp(phoneNum, otpType: otpType); - Utils.hideLoading(context); - if (basicOtp.messageStatus == 1) { - showMDialog(context, child: OtpDialog( - onClick: (String code) async { - pop(context); - Utils.showLoading(context); - RegisterUser user = await UserApiClent().basicVerify(phoneNum, code, basicOtp.data!.userToken ?? ""); - Utils.hideLoading(context); - if (user.messageStatus == 1) { - Utils.showToast(user.message ?? ""); - showMDialog( - context, - child: MessageDialog( - title: LocaleKeys.phoneNumberVerified.tr(), - onClick: () { - pop(context); - navigateWithName(context, AppRoutes.profile1, arguments: user); - }, - ), - ); - } else { - Utils.showToast(user.message ?? ""); - } - }, - )); - } else { - Utils.showToast(basicOtp.message ?? ""); - } - } -} diff --git a/lib/pages/user/login_with_password_page.dart b/lib/pages/user/login_with_password_page.dart deleted file mode 100644 index 47085c5..0000000 --- a/lib/pages/user/login_with_password_page.dart +++ /dev/null @@ -1,181 +0,0 @@ -import 'dart:convert'; - -import 'package:car_provider_app/api/shared_prefrence.dart'; -import 'package:car_provider_app/api/client/user_api_client.dart'; -import 'package:car_provider_app/classes/utils.dart'; -import 'package:car_provider_app/config/constants.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/login_password.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/button/show_image_button.dart'; -import 'package:car_provider_app/widgets/dialog/dialogs.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/extensions/int_extensions.dart'; -import 'package:car_provider_app/extensions/string_extensions.dart'; -import 'package:car_provider_app/extensions/widget_extensions.dart'; -import 'package:car_provider_app/widgets/button/show_fill_button.dart'; -import 'package:car_provider_app/widgets/tab/login_email_tab.dart'; -import 'package:car_provider_app/widgets/txt_field.dart'; -import 'package:easy_localization/easy_localization.dart'; -import 'package:flutter/material.dart'; -import 'package:http/http.dart'; -import 'package:sizer/sizer.dart'; - -import '../../classes/colors.dart'; -import '../../generated/locale_keys.g.dart'; -import '../../models/user/country.dart'; -import '../../widgets/dropdown/dropdow_field.dart'; - -class LoginWithPassword extends StatefulWidget { - @override - State createState() => _LoginWithPasswordState(); -} - -class _LoginWithPasswordState extends State { - int otpType = 1; - - ClassType type = ClassType.EMAIL; - String phoneNum = "", password = ""; - String email = ""; - String countryCode = ""; - Country? _country; - - @override - void initState() { - super.initState(); - getCountryList(); - } - - getCountryList() async { - _country = await UserApiClent().getAllCountries(); - setState(() {}); - } - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: appBar(context, title: ""), - body: Container( - width: double.infinity, - height: double.infinity, - padding: EdgeInsets.all(20), - child: SingleChildScrollView( - child: Column( - children: [ - 12.height, - LocaleKeys.login.tr().toText20(), - // 20.height, - // (type == ClassType.NUMBER ? LocaleKeys.enterPhoneNumber.tr() : LocaleKeys.enterEmail.tr()).toText14( - // color: MyColors.lightTextColor, - // textAlign: TextAlign.center, - // ), - 30.height, - LoginEmailTab( - onSelection: (ClassType type) { - setState(() { - this.type = type; - }); - }, - ), - 10.height, - Column( - children: [ - if (type == ClassType.NUMBER) getCountry(context), - 10.height, - TxtField( - hint: type == ClassType.NUMBER ? LocaleKeys.enterPhoneNumber.tr() : LocaleKeys.enterEmail.tr(), - value: phoneNum, - isSidePaddingZero: true, - onChanged: (v) { - phoneNum = v; - }, - ), - 10.height, - TxtField( - hint: LocaleKeys.EnterPass.tr(), - value: password, - isPasswordEnabled: true, - isSidePaddingZero: true, - maxLines: 1, - onChanged: (v) { - password = v; - }, - ), - ], - ), - 20.height, - LocaleKeys.forgetPasswordQ.tr().toText14(color: MyColors.textColor), - ShowFillButton( - title: LocaleKeys.recover.tr(), - isFlatButton: true, - isBold: false, - fontSize: 14, - maxHeight: 24, - txtColor: MyColors.darkPrimaryColor, - onPressed: () { - navigateWithName(context, AppRoutes.forgetPassword); - }, - ), - 30.height, - ShowFillButton( - title: LocaleKeys.continu.tr(), - maxWidth: double.infinity, - onPressed: () { - performBasicOtp(context); - }, - ), - 20.height, - ], - ), - ), - ), - ); - } - - Widget getCountry(BuildContext context) { - if (_country != null) { - List dropList = []; - _country!.data?.forEach((element) { - dropList.add(new DropValue( - element.id ?? 0, - EasyLocalization.of(context)?.currentLocale?.countryCode == "SA" - ? ((element.countryNameN ?? "") + " " + (element.countryCode ?? "")) - : (element.countryName ?? "") + " " + (element.countryCode ?? ""), - element.countryCode ?? "")); - }); - return DropdownField( - (DropValue value) { - countryCode = value.subValue; - }, - list: dropList, - hint: LocaleKeys.chooseCountry.tr(), - ); - } else { - return Center( - child: Padding( - padding: const EdgeInsets.all(8.0), - child: CircularProgressIndicator(), - ), - ); - } - } - - Future performBasicOtp(BuildContext context) async { - Utils.showLoading(context); - Response response = await UserApiClent().login_V1(type == ClassType.NUMBER ? countryCode + phoneNum : phoneNum, password); - Utils.hideLoading(context); - LoginPassword user = LoginPassword.fromJson(jsonDecode(response.body)); - if (user.messageStatus == 1) { - SharedPrefManager.setPhoneOrEmail(type == ClassType.NUMBER ? countryCode + phoneNum : phoneNum); - SharedPrefManager.setUserPassword(password); - navigateReplaceWithName(context, AppRoutes.loginMethodSelection, arguments: {"userToke": user.data!.userToken, "userName": type == ClassType.NUMBER ? countryCode + phoneNum : phoneNum}); - } else { - Utils.showToast(user.message ?? ""); - } - } -} diff --git a/lib/pages/user/profile/profile_1_page.dart b/lib/pages/user/profile/profile_1_page.dart deleted file mode 100644 index 18e45d5..0000000 --- a/lib/pages/user/profile/profile_1_page.dart +++ /dev/null @@ -1,72 +0,0 @@ -import 'package:car_provider_app/config/routes.dart'; -import 'package:car_provider_app/generated/locale_keys.g.dart'; -import 'package:car_provider_app/utils/navigator.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/extensions/string_extensions.dart'; -import 'package:car_provider_app/widgets/button/show_fill_button.dart'; -import 'package:car_provider_app/widgets/txt_field.dart'; -import 'package:easy_localization/src/public_ext.dart'; -import 'package:flutter/material.dart'; - -class Profile1Page extends StatelessWidget { - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: appBar(context,title: LocaleKeys.signUp.tr()), - body: Container( - width: double.infinity, - height: double.infinity, - child: SingleChildScrollView( - child: Padding( - padding: EdgeInsets.all(40), - child: Column( - children: [ - LocaleKeys.completeProfile1.tr().toText16(), - LocaleKeys.userInformation.tr().toText14(), - 12.height, - TxtField( - hint: LocaleKeys.provider.tr(), - ), - 12.height, - TxtField( - hint: LocaleKeys.firstName.tr(), - ), - 12.height, - TxtField( - hint:LocaleKeys.surname.tr(), - ), - 12.height, - TxtField( - hint: LocaleKeys.email.tr(), - ), - 12.height, - TxtField( - hint: LocaleKeys.createPassword.tr(), - ), - 12.height, - TxtField( - hint:LocaleKeys.confirmPassword.tr(), - ), - 12.height, - TxtField( - hint: LocaleKeys.enterPhoneNumber.tr(), - ), - 50.height, - LocaleKeys.termsOfService.tr().toText14(), - 16.height, - ShowFillButton( - title: LocaleKeys.continu.tr(), - maxWidth: double.infinity, - onPressed: () { - navigateWithName(context, AppRoutes.profile2); - }, - ), - ], - ), - ), - ), - ), - ); - } -} diff --git a/lib/pages/user/profile/profile_2_page.dart b/lib/pages/user/profile/profile_2_page.dart deleted file mode 100644 index f51a13e..0000000 --- a/lib/pages/user/profile/profile_2_page.dart +++ /dev/null @@ -1,62 +0,0 @@ -import 'package:car_provider_app/config/routes.dart'; -import 'package:car_provider_app/generated/locale_keys.g.dart'; -import 'package:car_provider_app/utils/navigator.dart'; -import 'package:car_provider_app/utils/utils.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/extensions/string_extensions.dart'; -import 'package:car_provider_app/widgets/button/show_fill_button.dart'; -import 'package:car_provider_app/widgets/txt_field.dart'; -import 'package:easy_localization/src/public_ext.dart'; -import 'package:flutter/material.dart'; - -class Profile2Page extends StatelessWidget { - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: appBar(context,title: LocaleKeys.signUp.tr()), - body: Container( - width: double.infinity, - height: double.infinity, - child: SingleChildScrollView( - child: Padding( - padding: EdgeInsets.all(40), - child: Column( - children: [ - LocaleKeys.completeProfile2.tr().toText16(), - LocaleKeys.licensesAndCertifications.tr().toText14(), - 12.height, - TxtField( - hint: "Commercial Record N.O", - // isButtonEnable: true, - isNeedFilterButton: true, - postfixData: Icons.attach_file, - ), - 12.height, - TxtField( - hint: "Chamber of Commerce N.O", - isNeedFilterButton: true, - postfixData: Icons.attach_file, - ), - 12.height, - TxtField( - hint: "VET Certificate N.O", - isNeedFilterButton: true, - postfixData: Icons.attach_file, - ), - 30.height, - ShowFillButton( - title: LocaleKeys.save.tr(), - maxWidth: double.infinity, - onPressed: () { - navigateWithName(context, AppRoutes.profile3); - }, - ), - ], - ), - ), - ), - ), - ); - } -} diff --git a/lib/pages/user/profile/profile_3_page.dart b/lib/pages/user/profile/profile_3_page.dart deleted file mode 100644 index 7d182aa..0000000 --- a/lib/pages/user/profile/profile_3_page.dart +++ /dev/null @@ -1,64 +0,0 @@ -import 'package:car_provider_app/generated/locale_keys.g.dart'; -import 'package:car_provider_app/widgets/app_bar.dart'; -import 'package:car_provider_app/widgets/dialog/dialogs.dart'; -import 'package:car_provider_app/widgets/dialog/message_dialog.dart'; -import 'package:car_provider_app/widgets/dropdown/dropdow_field.dart'; -import 'package:car_provider_app/widgets/extensions/int_extensions.dart'; -import 'package:car_provider_app/widgets/extensions/string_extensions.dart'; -import 'package:car_provider_app/widgets/button/show_fill_button.dart'; -import 'package:car_provider_app/widgets/txt_field.dart'; -import 'package:easy_localization/src/public_ext.dart'; -import 'package:flutter/material.dart'; - -class Profile3Page extends StatelessWidget { - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: appBar(context,title: LocaleKeys.signUp.tr()), - body: Container( - width: double.infinity, - height: double.infinity, - child: SingleChildScrollView( - child: Padding( - padding: EdgeInsets.all(40), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - LocaleKeys.completeProfile3.tr().toText16(), - LocaleKeys.branchInfo.tr().toText14(), - 12.height, - // DropdownField( - // hint: "Country", - // ), - // 12.height, - // DropdownField( - // hint: "City", - // ), - 12.height, - TxtField( - hint: LocaleKeys.address.tr(), - maxLines: 5, - ), - 12.height, - LocaleKeys.selectLocationMap.tr().toText14(), - 12.height, - Image.asset("assets/images/bn_map.png"), - 50.height, - ShowFillButton( - title: LocaleKeys.save.tr(), - maxWidth: double.infinity, - onPressed: () { - showMDialog(context, - child: MessageDialog( - title: LocaleKeys.profileCompleted.tr(), - )); - }, - ), - ], - ), - ), - ), - ), - ); - } -} diff --git a/lib/pages/user/register_page.dart b/lib/pages/user/register_page.dart deleted file mode 100644 index ddd6008..0000000 --- a/lib/pages/user/register_page.dart +++ /dev/null @@ -1,251 +0,0 @@ -import 'package:car_provider_app/api/api_client.dart'; -import 'package:car_provider_app/api/client/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/country.dart'; -import 'package:car_provider_app/models/user/register_user.dart'; -import 'package:car_provider_app/models/user/role.dart'; -import 'package:car_provider_app/provider/counter.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/dialog/dialogs.dart'; -import 'package:car_provider_app/widgets/dialog/otp_dialog.dart'; -import 'package:car_provider_app/widgets/dropdown/dropdow_field.dart'; -import 'package:car_provider_app/widgets/button/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:car_provider_app/widgets/tab/role_type_tab.dart'; -import 'package:car_provider_app/widgets/txt_field.dart'; -import 'package:easy_localization/easy_localization.dart'; -import 'package:flutter/material.dart'; -import 'package:sizer/sizer.dart'; - -import '../../classes/colors.dart'; -import '../../generated/locale_keys.g.dart'; - -class RegisterPage extends StatefulWidget { - @override - State createState() => _RegisterPageState(); -} - -class _RegisterPageState extends State { - String phoneNum = "", countryCode = ""; - - int role = -1, countryId = -1; - - TextEditingController emailController = TextEditingController(); - - late Future futureRoles; - late Future futureCountries; - - @override - void initState() { - super.initState(); - fetchData(); - } - - fetchData() { - UserApiClent().getRoles().then((value) { - setState(() { - futureRoles = Future.value(value); - }); - }); - UserApiClent().getAllCountries().then((value) { - setState(() { - futureCountries = Future.value(value); - }); - }); - } - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: appBar(context, title: ""), - body: Container( - width: double.infinity, - height: double.infinity, - padding: const EdgeInsets.all(20), - child: SingleChildScrollView( - child: SizedBox( - height: MediaQuery.of(context).size.height, - child: Column( - children: [ - 12.height, - LocaleKeys.signUp.tr().toText20(), - 20.height, - LocaleKeys.enterPhoneNumber.tr().toText14( - color: MyColors.lightTextColor, - textAlign: TextAlign.center, - ), - 30.height, - FutureBuilder( - future: futureRoles, - builder: (context, snapshot) { - if (snapshot.hasData) { - List dropList = []; - snapshot.data?.data?.forEach((element) { - dropList.add(DropValue(element.id ?? 0, EasyLocalization.of(context)?.currentLocale?.countryCode == "SA" ? element.roleNameN ?? "" : element.roleName ?? "", "")); - }); - return RoleTypeTab( - 0, - dropList, - onSelect: (DropValue value) { - role = value.id; - }, - ); - } else { - return const CircularProgressIndicator(); - } - }, - ), - 18.height, - FutureBuilder( - future: futureCountries, - builder: (context, snapshot) { - if (snapshot.hasData) { - List dropList = []; - snapshot.data?.data?.forEach((element) { - dropList.add(DropValue( - element.id ?? 0, - EasyLocalization.of(context)?.currentLocale?.countryCode == "SA" - ? (element.countryNameN ?? "") + " " + (element.countryCode ?? "") - : (element.countryName ?? "") + " " + (element.countryCode ?? ""), - element.countryCode ?? "")); - }); - return Column( - children: [ - LocaleKeys.selectYourCountry.tr().toText14( - color: MyColors.lightTextColor, - textAlign: TextAlign.center, - ), - 10.height, - DropdownField( - (DropValue value) { - setState(() { - countryCode = value.subValue; - countryId = value.id; - }); - }, - list: dropList, - hint: LocaleKeys.chooseCountry.tr(), - ), - ], - ); - } else { - return CircularProgressIndicator(); - } - }, - ), - 18.height, - LocaleKeys.enterPhoneForVerfication.tr().toText14( - color: MyColors.lightTextColor, - textAlign: TextAlign.center, - ), - 10.height, - Row( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - mExp(1), - Expanded( - flex: 3, - child: Row( - children: [ - Text( - (countryCode.isEmpty ? "+00" : "+" + countryCode), - style: const TextStyle( - fontSize: 20, - color: MyColors.black, - fontWeight: FontWeight.bold, - ), - ), - const Text( - " | ", - style: TextStyle( - fontSize: 20, - color: MyColors.black, - fontWeight: FontWeight.bold, - ), - ), - Flexible( - child: TextField( - controller: emailController, - onChanged: (v) { - phoneNum = v; - }, - style: const TextStyle( - fontSize: 20, - color: MyColors.black, - ), - decoration: const InputDecoration( - hintStyle: TextStyle(color: MyColors.lightTextColor, fontSize: 20), - hintText: "546758594", - contentPadding: EdgeInsets.zero, - border: InputBorder.none, - ), - ), - ), - ], - ), - ), - mExp(1), - ], - ), - 40.height, - ShowFillButton( - title: LocaleKeys.continu.tr(), - maxWidth: double.infinity, - onPressed: () { - if (validation()) performBasicOtp(context); - }, - ), - ], - ), - ), - ), - ), - ); - } - - Future performBasicOtp(BuildContext context) async { - Utils.showLoading(context); - BasicOtp basicOtp = await UserApiClent().basicOtp(countryCode + phoneNum, roleId: role); - Utils.hideLoading(context); - if (basicOtp.messageStatus == 1) { - showMDialog(context, child: OtpDialog( - onClick: (String code) async { - pop(context); - Utils.showLoading(context); - RegisterUser user = await UserApiClent().basicVerify(countryCode + phoneNum, code, basicOtp.data!.userToken ?? ""); - Utils.hideLoading(context); - if (user.messageStatus == 1) { - Utils.showToast(user.message ?? ""); - navigateReplaceWithName(context, AppRoutes.completeProfile, arguments: user); - } else { - Utils.showToast(user.message ?? ""); - } - }, - )); - } else { - Utils.showToast(basicOtp.message ?? ""); - } - } - - bool validation() { - bool isValid = true; - if (role == -1) { - Utils.showToast("Please select Provider Role"); - isValid = false; - } else if (countryCode.isEmpty) { - Utils.showToast("Please select Country Code"); - isValid = false; - } else if (phoneNum.isEmpty) { - Utils.showToast("Please add Phone No"); - isValid = false; - } - return isValid; - } -} diff --git a/lib/pages/user/register_selection_page.dart b/lib/pages/user/register_selection_page.dart deleted file mode 100644 index 423c1bb..0000000 --- a/lib/pages/user/register_selection_page.dart +++ /dev/null @@ -1,84 +0,0 @@ -import 'package:car_provider_app/classes/colors.dart'; -import 'package:car_provider_app/config/routes.dart'; -import 'package:car_provider_app/generated/locale_keys.g.dart'; -import 'package:car_provider_app/utils/navigator.dart'; -import 'package:car_provider_app/utils/utils.dart'; -import 'package:car_provider_app/widgets/app_bar.dart'; -import 'package:car_provider_app/widgets/button/show_fill_button.dart'; -import 'package:car_provider_app/extensions/string_extensions.dart'; -import 'package:car_provider_app/extensions/int_extensions.dart'; -import 'package:car_provider_app/extensions/widget_extensions.dart'; -import 'package:easy_localization/src/public_ext.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_svg/flutter_svg.dart'; - -class RegisterSelectionPage extends StatelessWidget { - @override - Widget build(BuildContext context) { - return Scaffold( - // appBar: appBar(title: LocaleKeys.login.tr()), - body: Container( - width: double.infinity, - height: double.infinity, - decoration: BoxDecoration( - image: DecorationImage( - image: AssetImage("assets/images/bn_Intro.png"), - fit: BoxFit.cover, - ), - ), - child: Column( - children: [ - mFlex(6), - SvgPicture.asset("assets/images/logo.svg"), - mFlex(4), - LocaleKeys.welcomeMessage.tr().toText20(), - LocaleKeys.welcomeDes.tr().toText14(color: MyColors.lightTextColor), - mFlex(1), - ShowFillButton( - title: LocaleKeys.login.tr(), - maxWidth: double.infinity, - horizontalMargin: 20, - onPressed: () { - navigateWithName(context, AppRoutes.loginWithPassword); - }, - ), - 20.height, - ShowFillButton( - title: LocaleKeys.signUp.tr(), - maxWidth: double.infinity, - isFlatButton: true, - txtColor: Colors.black, - onPressed: () { - navigateWithName(context, AppRoutes.register); - }, - ), - 10.height, - // ShowFillButton( - // title: LocaleKeys.forgetPassword.tr(), - // maxWidth: double.infinity, - // isFlatButton: true, - // isBold: false, - // txtColor: MyColors.darkPrimaryColor, - // onPressed: () { - // navigateWithName(context, AppRoutes.forgetPassword); - // }, - // ), - mFlex(3), - TextButton( - onPressed: () {}, - child: const Text( - "Continue as Guest", - style: TextStyle( - color: MyColors.darkPrimaryColor, - fontWeight: FontWeight.bold, - decoration: TextDecoration.underline, - ), - ), - ), - mFlex(3), - ], - ), - ), - ); - } -} diff --git a/lib/pages/user/selection_page.dart b/lib/pages/user/selection_page.dart deleted file mode 100644 index aed3e9e..0000000 --- a/lib/pages/user/selection_page.dart +++ /dev/null @@ -1,99 +0,0 @@ -import 'dart:async'; -import 'dart:convert'; - -import 'package:car_provider_app/classes/colors.dart'; -import 'package:car_provider_app/config/routes.dart'; -import 'package:car_provider_app/extensions/int_extensions.dart'; -import 'package:car_provider_app/extensions/string_extensions.dart'; -import 'package:car_provider_app/generated/locale_keys.g.dart'; -import 'package:car_provider_app/utils/navigator.dart'; -import 'package:car_provider_app/utils/utils.dart'; -import 'package:car_provider_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'; -import 'package:flutter_svg/flutter_svg.dart'; - -import '../../api/client/user_api_client.dart'; -import '../../api/shared_prefrence.dart'; -import '../../classes/app_state.dart'; -import '../../classes/utils.dart'; -import '../../models/user/refresh_token.dart'; -import '../../models/user/user.dart'; - -class SelectionPage extends StatelessWidget { - @override - Widget build(BuildContext context) { - return Scaffold( - body: Container( - width: double.infinity, - height: double.infinity, - child: Column( - children: [ - mFlex(5), - SvgPicture.asset("assets/images/logo.svg"), - "Logo".toText(fontSize: 45, isBold: true), - mFlex(3), - LocaleKeys.firstTimeLogIn.tr().toText(fontSize: 18, isBold: true).onPress( - () { - navigateWithName(context, AppRoutes.registerSelection); - }, - ), - mFlex(1), - LocaleKeys.alreadySigned.tr().toText(fontSize: 18, isBold: true).onPress( - () async { - String token = await SharedPrefManager.getUserToken(); - String refreshToken = await SharedPrefManager.getRefreshToken(); - if (token.isNotEmpty) { - 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); - } - } else { - Utils.showToast(LocaleKeys.login_once.tr()); - } - }, - ), - 35.height, - TextButton( - style: TextButton.styleFrom( - backgroundColor: Colors.white, - ), - 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), - ], - ), - ), - ); - } -} diff --git a/lib/pages/user/splash_page.dart b/lib/pages/user/splash_page.dart deleted file mode 100644 index ac87258..0000000 --- a/lib/pages/user/splash_page.dart +++ /dev/null @@ -1,53 +0,0 @@ -import 'package:car_provider_app/classes/colors.dart'; -import 'package:car_provider_app/utils/navigator.dart'; -import 'package:car_provider_app/utils/utils.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_svg/flutter_svg.dart'; - -import '../../config/routes.dart'; - -class SplashPage extends StatelessWidget { - @override - Widget build(BuildContext context) { - performTimer(context); - return Scaffold( - body: Container( - width: double.infinity, - height: double.infinity, - color: Colors.black, - child: Column( - children: [ - mExp(1), - Expanded( - child: Image.asset( - "assets/images/ic_logo_white.png", - ), - ), - Expanded( - flex: 10, - child: Image.asset( - "assets/images/bn_car.jpeg", - fit: BoxFit.cover, - width: double.infinity, - height: 00, - ), - ), - Expanded( - flex: 3, - child: Image.asset( - "assets/images/ic_engine.png", - ), - ), - mExp(1), - ], - ), - ), - ); - } - - performTimer(BuildContext context) { - delay(3).whenComplete(() { - navigateReplaceWithName(context, AppRoutes.registerSelection); - }); - } -} diff --git a/lib/pages/user/vertify_password_page.dart b/lib/pages/user/vertify_password_page.dart deleted file mode 100644 index edd7b2a..0000000 --- a/lib/pages/user/vertify_password_page.dart +++ /dev/null @@ -1,164 +0,0 @@ - - -import 'package:car_provider_app/classes/utils.dart'; -import 'package:car_provider_app/config/constants.dart'; -import 'package:car_provider_app/config/routes.dart'; -import 'package:car_provider_app/generated/locale_keys.g.dart'; -import 'package:car_provider_app/models/user/forget_password_otp_compare.dart'; -import 'package:car_provider_app/models/user/forget_password_otp_request.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/button/show_image_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:car_provider_app/widgets/dialog/dialogs.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/txt_field.dart'; -import 'package:easy_localization/src/public_ext.dart'; -import 'package:flutter/material.dart'; - - - -class VerifyPasswordPage extends StatelessWidget { - int otpType = 1; - String phoneNum = ""; - String userName = ""; - String userToken = ""; - String otp = ""; - - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: appBar(context,title: LocaleKeys.changePassword.tr()), - body: Container( - width: double.infinity, - height: double.infinity, - padding: EdgeInsets.all(40), - child: Column( - children: [ - LocaleKeys.verifyNewPassword.tr().toText24(), - mFlex(1), - TxtField( - hint: "966500000000", - value: phoneNum, - onChanged: (v) { - phoneNum = v; - }, - ), - mFlex(2), - Row( - children: [ - Expanded( - child: ShowImageButton( - onClick: () { - otpType = 1; - // sendPasswordOTP(context); - showMDialog(context, child: OtpDialog( - onClick: (String code) { - pop(context); - delay(300).then( - (value) => showMDialog( - context, - child: MessageDialog( - title: LocaleKeys.phoneNumberVerified.tr(), - onClick: () { - otpType=1; - navigateWithName(context, AppRoutes.confirmNewPasswordPage); - // ForgetPasswordOTP(context); - }, - ), - ), - ); - }, - )); - }, - title: 'With SMS', - icon: icons + "ic_sms.png", - ), - ), - 20.width, - Expanded( - child: ShowImageButton( - onClick: () { - otpType = 1; - // sendPasswordOTP(context); - showMDialog(context, child: OtpDialog( - onClick: (String code) { - pop(context); - delay(300).then( - (value) => showMDialog( - context, - child: MessageDialog( - title: LocaleKeys.phoneNumberVerified.tr(), - onClick: () { - otpType=2; - navigateWithName(context, AppRoutes.confirmNewPasswordPage); - // ForgetPasswordOTP(context); - }, - ), - ), - ); - }, - )); - }, - title: 'With Whatsapp', - icon: icons + "ic_whatsapp.png", - ), - ), - ], - ), - mFlex(10), - ], - ), - ), - ); - } - - // Future sendPasswordOTP(BuildContext context) async { - // Utils.showLoading(context); - // PasswordOTPCompare otpCompare = await UserApiClent().ForgetPasswordOTPCompare(userToken, otp); - // Utils.hideLoading(context); - // if (otpCompare.messageStatus == 1) { - // // navigateWithName(context, AppRoutes.confirmNewPasswordPage); - // showMDialog(context, child: OtpDialog( - // onClick: (String code) async { - // pop(context); - // Utils.showLoading(context); - // // PasswordOTPCompare otpCompare = await UserApiClent().ForgetPasswordOTPCompare(userToken, otp); - // Utils.hideLoading(context); - // }, - // )); - // } else { - // Utils.showToast(otpCompare.message ?? ""); - // } - // } - - -// User otpRequest = User.fromJson(jsonDecode(res.body)); -// SharedPrefManager.setUserToken(otpRequest.data!.accessToken ?? ""); -// SharedPrefManager.setUserId(otpRequest.data!.userInfo!.userId ?? ""); -// showMDialog(context, child: OtpDialog( -// onClick: (String code) { -// pop(context); -// delay(300).then( -// (value) => showMDialog( -// context, -// child: MessageDialog( -// title: "Phone Number Verified", -// onClick: () { -// otpType=1; -// navigateWithName(context, AppRoutes.confirmNewPasswordPage); -// // ForgetPasswordOTP(context); -// }, -// ), -// ), -// ); -// }, -// )); - - -} diff --git a/lib/provider/counter.dart b/lib/provider/counter.dart deleted file mode 100644 index 0272327..0000000 --- a/lib/provider/counter.dart +++ /dev/null @@ -1,20 +0,0 @@ -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; - -class Counter with ChangeNotifier, DiagnosticableTreeMixin { - int _count = 0; - - int get count => _count; - - void increment() { - _count++; - notifyListeners(); - } - - /// Makes `Counter` readable inside the devtools by listing all of its properties - @override - void debugFillProperties(DiagnosticPropertiesBuilder properties) { - super.debugFillProperties(properties); - properties.add(IntProperty('count', count)); - } -} \ No newline at end of file diff --git a/lib/repositories/branch_repo.dart b/lib/repositories/branch_repo.dart new file mode 100644 index 0000000..0843a95 --- /dev/null +++ b/lib/repositories/branch_repo.dart @@ -0,0 +1,164 @@ +import 'dart:async'; + +import 'package:mc_common_app/api/api_client.dart'; +import 'package:mc_common_app/classes/app_state.dart'; + + +import 'package:mc_common_app/classes/consts.dart'; +import 'package:mc_common_app/config/dependencies.dart'; +import 'package:mc_common_app/models/m_response.dart'; +import 'package:mc_common_app/models/model/branch2.dart'; +import 'package:mc_common_app/models/profile/branch.dart'; +import 'package:mc_common_app/models/profile/categroy.dart'; +import 'package:mc_common_app/models/profile/document.dart'; +import 'package:mc_common_app/models/profile/services.dart'; +import 'package:flutter/cupertino.dart'; + +abstract class BranchRepo { + Future createBranch(String branchName, String branchDescription, String cityId, String address, String latitude, String longitude); + + Future updateBranch(int id, String branchName, String branchDescription, String cityId, String address, String latitude, String longitude, {bool isNeedToDelete = true}); + + Future fetchAllBranches(); + + Future fetchBranchCategory(); + + Future fetchServicesByCategoryId(String serviceCategoryId); + + Future createNewService(List> map); + + Future getServiceProviderDocument(dynamic userId); + + Future serviceProviderDocumentsUpdate(List? documents); + + Future getBranchAndServices(); + + Future createService(List> map); + + Future updateService(List> map); +} + +class BranchRepoImp implements BranchRepo { + @override + Future createBranch(String branchName, String branchDescription, String cityId, String address, String latitude, String longitude) async { + var postParams = { + "serviceProviderID": AppState().getUser.data?.userInfo?.providerId ?? "", + "branchName": branchName, + "branchDescription": branchDescription, + "cityID": cityId, + "address": address, + "latitude": latitude, + "longitude": longitude, + "isActive": true + }; + String t = AppState().getUser.data!.accessToken ?? ""; + debugPrint("token " + t); + return await injector.get().postJsonForObject((json) => MResponse.fromJson(json), ApiConsts.createProviderBranch, postParams, token: t); + } + + @override + Future fetchAllBranches() async { + var postParams = {"ServiceProviderID": AppState().getUser.data?.userInfo?.providerId.toString() ?? ""}; + String t = AppState().getUser.data!.accessToken ?? ""; + debugPrint("token " + t); + return await injector.get().getJsonForObject((json) => Branch.fromJson(json), ApiConsts.ServiceProviderBranchGet, queryParameters: postParams, token: t); + } + + @override + Future fetchBranchCategory() async { + var postParams = {"ServiceProviderID": AppState().getUser.data?.userInfo?.providerId.toString() ?? ""}; + String t = AppState().getUser.data!.accessToken ?? ""; + debugPrint("token " + t); + return await injector.get().getJsonForObject((json) => Category.fromJson(json), ApiConsts.ServiceCategory_Get, queryParameters: postParams, token: t); + } + + @override + Future fetchServicesByCategoryId(String serviceCategoryId) async { + var postParams = {"ServiceCategoryID": serviceCategoryId}; + String t = AppState().getUser.data!.accessToken ?? ""; + debugPrint("token " + t); + return await injector.get().getJsonForObject((json) => Services.fromJson(json), ApiConsts.Services_Get, queryParameters: postParams, token: t); + } + + @override + Future createNewService(List> map) async { + String t = AppState().getUser.data!.accessToken ?? ""; + return await injector.get().postJsonForObject((json) => MResponse.fromJson(json), ApiConsts.ServiceProviderService_Create, map, token: t); + } + + @override + Future getServiceProviderDocument(dynamic userId) async { + var queryParameters = { + "ServiceProviderID": userId.toString(), + }; + String? token = AppState().getUser.data?.accessToken; + debugPrint(token); + return await injector + .get() + .getJsonForObject((json) => Document.fromJson(json), ApiConsts.GetProviderDocument, queryParameters: queryParameters, token: AppState().getUser.data!.accessToken ?? ""); + } + + @override + Future serviceProviderDocumentsUpdate(List? documents) async { + List> map = []; + for (int i = 0; i < documents!.length; i++) { + if (documents[i].document != null) { + var postParams = { + "id": documents[i].id, + "serviceProviderID": documents[i].serviceProviderId, + "documentID": documents[i].documentId, + "documentExt": documents[i].fileExt, + "documentImage": documents[i].document, + "isActive": true + }; + map.add(postParams); + } + } + String t = AppState().getUser.data!.accessToken ?? ""; + debugPrint("token " + t); + return await injector.get().postJsonForObject((json) => MResponse.fromJson(json), ApiConsts.ServiceProviderDocument_Update, map, token: t); + } + + @override + Future getBranchAndServices() async { + var postParams = {"serviceProviderID": AppState().getUser.data?.userInfo?.providerId.toString() ?? ""}; + String t = AppState().getUser.data!.accessToken ?? ""; + print("tokeen " + t); + return await injector.get().getJsonForObject((json) => Branch2.fromJson(json), ApiConsts.BranchesAndServices, queryParameters: postParams, token: t); + } + + @override + Future updateBranch(int id, String branchName, String branchDescription, String cityId, String address, String latitude, String longitude, {bool isNeedToDelete = true}) async { + String lat = "0", long = "0"; + try { + lat = latitude.substring(0, 9); + long = longitude.substring(0, 9); + } catch (e) {} + var postParams = { + "id": id, + "serviceProviderID": AppState().getUser.data?.userInfo?.providerId ?? "", + "branchName": branchName, + "branchDescription": branchDescription, + "cityID": cityId, + "address": address, + "latitude": lat, + "longitude": long, + "isActive": isNeedToDelete + }; + String t = AppState().getUser.data!.accessToken ?? ""; + print("tokeen " + t); + return await injector.get().postJsonForObject((json) => MResponse.fromJson(json), ApiConsts.updateProviderBranch, postParams, token: t); + } + + @override + Future createService(List> map) async { + String t = AppState().getUser.data!.accessToken ?? ""; + return await injector.get().postJsonForObject((json) => MResponse.fromJson(json), ApiConsts.ServiceProviderService_Create, map, token: t); + } + + @override + Future updateService(List> map) async { + String t = AppState().getUser.data!.accessToken ?? ""; + return await injector.get().postJsonForObject((json) => MResponse.fromJson(json), ApiConsts.ServiceProviderService_Update, map, token: t); + } +} diff --git a/lib/pages/a.dart b/lib/repositories/dashboard_repo.dart similarity index 100% rename from lib/pages/a.dart rename to lib/repositories/dashboard_repo.dart diff --git a/lib/services/backend_service.dart b/lib/services/backend_service.dart deleted file mode 100644 index 311b03e..0000000 --- a/lib/services/backend_service.dart +++ /dev/null @@ -1,127 +0,0 @@ -import 'dart:convert'; -import 'dart:io'; -import 'package:car_provider_app/models/response_models.dart'; -import 'package:car_provider_app/services/secure_storage.dart'; -import 'package:http/http.dart'; -import 'package:injector/injector.dart'; - -import 'http_service.dart'; -import 'network_service.dart'; - -abstract class IBackendApiService { - Future getUnauthenticatedAPI(String route); - - Future getAuthenticatedAPI(String route); - - Future postUnauthenticatedAPI( - String route, String dataAsJson); - - Future postAuthenticatedAPI(String route, String dataAsJson); - - Future deleteAuthenticatedAPI(String route, String id); -} - -class BackendApiService implements IBackendApiService { - static String _homeUrl = "https://check.revotec.eu/check2/"; - static String _serverApiBaseUrl = _homeUrl + "mapi/v1/"; - - static String get homeUrl => _homeUrl; - - final ISecureStorage _secureStorage = - Injector.appInstance.getDependency(); - final IHttpService _httpService = - Injector.appInstance.getDependency(); - - ///internal helper functions which executes the given api call - ///and wraps the response - Future _callApi(Future callback) async { - Response response; - try { - //execute future - response = await callback; - //check response code, and if not ok return isOk = false - //200 for Get - //201 for Post - - // print("res121: " + - // response.statusCode.toString() + - // " Body:" + - // response.body.toString()); - //if delete request sent so server is returning 204 in case of success. - if (response.statusCode == 204) - return BackendResponse(id: 1, isOk: true, result: null); - - if (response.statusCode != 200 && response.statusCode != 201) - return BackendResponse(id: -1, isOk: false, result: null); - //if response code is good then parse message and return parsed response - return BackendResponse.fromJson(json.decode(response.body)); - //return BackendResponse.fromJson(dioResponse.body); - } catch (e) { - return BackendResponse(id: -1, isOk: false, result: null); - // try { - // return BackendResponse.fromJson(json.decode(response.body)); - // } catch (e) { - // return BackendResponse(id:-1, isOk:false,result: null); - // } - } - } - - @override - Future getAuthenticatedAPI(String route) async { - await checkConnection(); - final token = await _secureStorage.readBearerToken(); - return _callApi(_httpService.get(_serverApiBaseUrl + route, headers: { - 'Content-Type': 'application/json', - 'Accept': '*/*', - HttpHeaders.authorizationHeader: "Bearer $token" - })); - } - - @override - Future getUnauthenticatedAPI(String route) async { - await checkConnection(); - return _callApi(_httpService.get(_serverApiBaseUrl + route, - headers: {'Content-Type': 'application/json', 'Accept': '*/*'})); - } - - @override - Future postAuthenticatedAPI( - String route, String dataAsJson) async { - await checkConnection(); - final token = await _secureStorage.readBearerToken(); - // print("res121: " + _serverApiBaseUrl + route); - return _callApi(_httpService - .post(_serverApiBaseUrl + route, body: dataAsJson, headers: { - 'Content-Type': 'application/json', - 'Accept': '*/*', - HttpHeaders.authorizationHeader: "Bearer $token" - })); - } - - @override - Future postUnauthenticatedAPI( - String route, String dataAsJson) async { - await checkConnection(); - return _callApi(_httpService.post(_serverApiBaseUrl + route, - body: dataAsJson, headers: {'Content-Type': 'application/json'})); - } - - Future checkConnection() async { - if (!(await Injector.appInstance - .getDependency() - .isHostAvailable(_homeUrl))) throw NetworkException(); - } - - @override - Future deleteAuthenticatedAPI( - String route, String id) async { - await checkConnection(); - final token = await _secureStorage.readBearerToken(); - return _callApi( - _httpService.delete(_serverApiBaseUrl + route + "/" + id, headers: { - 'Content-Type': 'application/json', - 'Accept': '*/*', - HttpHeaders.authorizationHeader: "Bearer $token" - })); - } -} diff --git a/lib/services/firebase_service.dart b/lib/services/firebase_service.dart deleted file mode 100644 index ad76959..0000000 --- a/lib/services/firebase_service.dart +++ /dev/null @@ -1,180 +0,0 @@ -/* -import 'dart:io' show Platform; -import 'package:firebase_messaging/firebase_messaging.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_local_notifications/flutter_local_notifications.dart'; - -abstract class IFirebaseService { - Future get token; - - Future backgroundMessageHandler(Map message); - - Future messageHandler(Map message); - - Future onLaunch(Map message); - - Future onResume(Map message); - - void subscribeForPromotions(); - - void unsubscribeFromPromotions(); -} - -//https://medium.com/@SebastianEngel/easy-push-notifications-with-flutter-and-firebase-cloud-messaging-d96084f5954f -class FirebaseService implements IFirebaseService { - FirebaseMessaging _firebaseMessaging; - - FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin; - - FirebaseService() {. - _firebaseMessaging = FirebaseMessaging(); - - //https://github.com/FirebaseExtended/flutterfire/issues/1695 - _firebaseMessaging.configure( - onMessage: messageHandler, - onBackgroundMessage: - Platform.isAndroid ? myBackgroundMessageHandler : null, - onLaunch: onLaunch, - onResume: onResume, - ); - - //monitor firebase token changes - //https://firebase.google.com/docs/cloud-messaging/android/client#sample-register - ///The registration token may change when: - // - //The app deletes Instance ID - //The app is restored on a new device - //The user uninstalls/reinstall the app - //The user clears app data. - /// - - //for the first release we don't care about token refreshes - /*Stream fcmStream = _firebaseMessaging.onTokenRefresh; - fcmStream.listen((token) { - - });*/ - - //ios specific settings - //taken from https://github.com/FirebaseExtended/flutterfire/blob/master/packages/firebase_messaging/example/lib/main.dart - _firebaseMessaging.requestNotificationPermissions( - const IosNotificationSettings( - sound: true, badge: true, alert: true, provisional: true)); - _firebaseMessaging.onIosSettingsRegistered - .listen((IosNotificationSettings settings) { - print("Settings registered: $settings"); - }); - - var initializationSettingsAndroid = - AndroidInitializationSettings('app_icon'); - var initializationSettingsIOS = - IOSInitializationSettings(onDidReceiveLocalNotification: onDidReceiveLocalNotification); - var initializationSettings = InitializationSettings( - initializationSettingsAndroid, initializationSettingsIOS); - flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin(); - flutterLocalNotificationsPlugin.initialize(initializationSettings, - onSelectNotification: selectNotification); - } - - Future onDidReceiveLocalNotification(int id, String title, String body, String payload) async{ - var androidPlatformChannelSpecifics = AndroidNotificationDetails( - 'new_message_channel_id', - 'Neue Nachricht', - 'Channel für neue Nachrichten', - importance: Importance.Max, - priority: Priority.High, - ticker: 'ticker'); - var iOSPlatformChannelSpecifics = IOSNotificationDetails(); - var platformChannelSpecifics = NotificationDetails( - androidPlatformChannelSpecifics, iOSPlatformChannelSpecifics); - await flutterLocalNotificationsPlugin.show( - 0, - title, - body, - platformChannelSpecifics); - } - - @override - Future backgroundMessageHandler(Map message) async { - await myBackgroundMessageHandler(message); - } - - @override - Future messageHandler(Map message) async { - print("onMessage: $message"); - -// initialise the plugin. app_icon needs to be a added as a drawable resource to the Android head project - - var androidPlatformChannelSpecifics = AndroidNotificationDetails( - 'new_message_channel_id', - 'Neue Nachricht', - 'Channel für neue Nachrichten', - importance: Importance.Max, - priority: Priority.High, - ticker: 'ticker'); - var iOSPlatformChannelSpecifics = IOSNotificationDetails(); - var platformChannelSpecifics = NotificationDetails( - androidPlatformChannelSpecifics, iOSPlatformChannelSpecifics); - - if(Platform.isAndroid) { - await flutterLocalNotificationsPlugin.show( - 0, - message["notification"]["title"], - message["notification"]["body"], - platformChannelSpecifics); - }else if(Platform.isIOS){ - await flutterLocalNotificationsPlugin.show( - 0, - message["aps"]["alert"]["title"], - message["aps"]["alert"]["body"], - platformChannelSpecifics); - } - } - - Future selectNotification(String payload) async { - if (payload != null) { - debugPrint('notification payload: ' + payload); - } - } - - @override - Future onLaunch(Map message) async { - print("onLaunch: $message"); - } - - @override - Future onResume(Map message) async { - print("onResume: $message"); - } - - @override - Future get token => _firebaseMessaging.getToken(); - - @override - void subscribeForPromotions() { - _firebaseMessaging.subscribeToTopic("promotions"); - } - - @override - void unsubscribeFromPromotions() { - _firebaseMessaging.unsubscribeFromTopic("promotions"); - } -} - -Future myBackgroundMessageHandler(Map message) { - debugPrint("BACKGROUND MESSAGE RECEIVED"); - print("BACKGROUND MESSAGE RECEIVED"); - return Future.value(() => true); - - /*if (message.containsKey('data')) { - // Handle data message - final dynamic data = message['data']; - } - - if (message.containsKey('notification')) { - // Handle notification message - final dynamic notification = message['notification']; - }*/ - - // Or do other work. -} -*/ \ No newline at end of file diff --git a/lib/services/http_service.dart b/lib/services/http_service.dart deleted file mode 100644 index ff99ed0..0000000 --- a/lib/services/http_service.dart +++ /dev/null @@ -1,36 +0,0 @@ -import 'dart:convert'; -import 'dart:io'; -import 'dart:async'; - - -import 'package:http/http.dart' as http; -import 'package:http/http.dart'; -import 'package:path/path.dart'; -import 'package:injector/injector.dart'; - -abstract class IHttpService { - Future post(url, - {Map headers, body, Encoding encoding}); - - Future get(url, {Map headers}); - - Future delete(url, {Map headers}); -} - -class HttpService implements IHttpService { - @override - Future delete(url, {Map? headers}) { - return http.delete(url, headers: headers); - } - - @override - Future get(url, {Map? headers}) { - return http.get(url, headers: headers); - } - - @override - Future post(url, - {Map? headers, body, Encoding? encoding}) { - return http.post(url, headers: headers, body: body, encoding: encoding); - } -} diff --git a/lib/services/media_service.dart b/lib/services/media_service.dart deleted file mode 100644 index 0762d7f..0000000 --- a/lib/services/media_service.dart +++ /dev/null @@ -1,26 +0,0 @@ -// import 'dart:io'; -// -// import 'package:image_picker/image_picker.dart'; -// -// abstract class IMediaService { -// Future takePicture(); -// -// Future openImageFromGallery(); -// } -// -// class MediaService implements IMediaService { -// @override -// Future openImageFromGallery() async { -// final pickedFile = -// await ImagePicker().getImage(source: ImageSource.gallery); -// if (pickedFile == null) return null; -// return File(pickedFile.path); -// } -// -// @override -// Future takePicture() async { -// final pickedFile = await ImagePicker().getImage(source: ImageSource.camera); -// if (pickedFile == null) return null; -// return File(pickedFile.path); -// } -// } diff --git a/lib/services/network_service.dart b/lib/services/network_service.dart deleted file mode 100644 index 50a861d..0000000 --- a/lib/services/network_service.dart +++ /dev/null @@ -1,25 +0,0 @@ - -import 'dart:io'; - -abstract class INetworkService { - Future isHostAvailable(String endpoint); -} - -class NetworkService implements INetworkService{ - @override - Future isHostAvailable(String endpoint) async { - try { - final result = await InternetAddress.lookup(endpoint.substring(endpoint.indexOf('//')+2).substring(0,endpoint.substring(endpoint.indexOf('//')+2).indexOf('/'))); - if (result.isNotEmpty && result[0].rawAddress.isNotEmpty) { - return true; - } else{ - return false; - } - } on SocketException catch (_) { - return false; - } - } -} - -class NetworkException implements Exception { -} diff --git a/lib/services/secure_storage.dart b/lib/services/secure_storage.dart deleted file mode 100644 index 7622f7f..0000000 --- a/lib/services/secure_storage.dart +++ /dev/null @@ -1,33 +0,0 @@ -abstract class ISecureStorage { - Future readBearerToken(); - - Future clearUserCredentials(); -} - -class SecureStorage implements ISecureStorage { - ///return bearer token if present, or null if not - @override - Future readBearerToken() async { - try { - return ""; - } catch (_) { - //an error occured returning null - return ""; - } - } - - ///returns true if write was successful, false otherwise - @override - Future writeBearerToken(String token) async { - try { - await ""; - return true; - } catch (_) { - //an error occured returning false - return false; - } - } - - @override - Future clearUserCredentials() async {} -} diff --git a/lib/theme/app_theme.dart b/lib/theme/app_theme.dart deleted file mode 100644 index e197b1b..0000000 --- a/lib/theme/app_theme.dart +++ /dev/null @@ -1,31 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'colors.dart'; - -class AppTheme { - static getTheme(isArabic) => ThemeData( - fontFamily: isArabic ? 'Cairo' : 'Poppins', - // This is the theme of your application. - // - // Try running your application with "flutter run". You'll see the - // application has a blue toolbar. Then, without quitting the app, try - // changing the primarySwatch below to Colors.green and then invoke - // "hot reload" (press "r" in the console where you ran "flutter run", - // or simply save your changes to "hot reload" in a Flutter IDE). - // Notice that the counter didn't reset back to zero; the application - // is not restarted. - primaryColor: primaryColor, - primarySwatch: Colors.orange, - backgroundColor: Colors.white, - scaffoldBackgroundColor: Color(0xffF8F8F8), - primaryTextTheme: TextTheme( - headline6: TextStyle(color: Colors.white), - ), - ); -} - -extension ExtendedRevoCheckTheme on TextTheme { - //add custom styles and colors here - //taken from https://medium.com/@crizantlai/flutter-how-to-extend-themedata-b5b987a95bb5 - TextStyle get price => const TextStyle(color: Colors.redAccent); -} diff --git a/lib/theme/colors.dart b/lib/theme/colors.dart deleted file mode 100644 index 8510500..0000000 --- a/lib/theme/colors.dart +++ /dev/null @@ -1,13 +0,0 @@ -import 'package:flutter/material.dart'; - -const Color primaryColor = Colors.white; -const Color accentColor = Colors.blue; -const Color appBackgroundColor = Colors.white; -Color? accentColorDark = Colors.green[800]; -const Color borderColor = Colors.blueGrey; -Color? borderLightColor = Colors.blueGrey[50]; -Color backgroudColor = - Colors.blueGrey[50]!.withOpacity(0.5) ?? Colors.transparent; -const Color iconColor = Colors.blueGrey; -Color? headingColor = Colors.blueGrey[800]; -Color? txtColor = Colors.blueGrey[500]; diff --git a/lib/utils/AppPermissionHandler.dart b/lib/utils/AppPermissionHandler.dart deleted file mode 100644 index d13b61c..0000000 --- a/lib/utils/AppPermissionHandler.dart +++ /dev/null @@ -1,66 +0,0 @@ -import 'package:permission_handler/permission_handler.dart'; - -import 'dialogs.dart'; - -enum ConfirmAction { CANCEL, ACCEPT } - -Future requestPermissionGranted( - context, Permission requestPermissions) async { - var result = await requestPermissions.request(); - - switch (result) { - case PermissionStatus.granted: - // Application has been given permission to use the feature. - return true; - case PermissionStatus.denied: - // Application has been denied permission to use the feature. - return false; - case PermissionStatus.permanentlyDenied: - ConfirmAction? res = await showConfirmDialogs( - context, - 'You was denied Permission. You have give manual permission from app setting. ', - 'Open App Setting', - 'Cancel'); - if (res == ConfirmAction.ACCEPT) { - return false; - } else if (res == ConfirmAction.CANCEL) { - return false; - } - return false; - case PermissionStatus.restricted: - // iOS has restricted access to a specific feature. - return false; - default: - return false; - } -} - - -class AppPermissions{ - static void location(Function(bool) completion) { - Permission.location.isGranted.then((isGranted){ - if(!isGranted){ - Permission.location.request().then((granted){ - completion(granted == PermissionStatus.granted); - }); - } - completion(isGranted); - }); - - } - - static void checkAll(Function(bool) completion){ - [ - Permission.location - ].request().then((value){ - - bool allGranted = false; - value.values.forEach((element) { - allGranted = allGranted && element == PermissionStatus.granted; - }); - - completion(allGranted); - - }); - } -} \ No newline at end of file diff --git a/lib/utils/dialogs.dart b/lib/utils/dialogs.dart deleted file mode 100644 index a6bff7e..0000000 --- a/lib/utils/dialogs.dart +++ /dev/null @@ -1,35 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'AppPermissionHandler.dart'; - -Future showConfirmDialogs( - context, msg, positiveText, negativeText) async { - return showDialog( - context: context, - barrierDismissible: false, - builder: (context) { - return AlertDialog( - backgroundColor: Colors.white, - title: Text(msg, style: TextStyle(fontSize: 16)), - actions: [ - TextButton( - child: Text( - negativeText, - ), - onPressed: () { - Navigator.of(context).pop(ConfirmAction.CANCEL); - }, - ), - TextButton( - child: Text( - positiveText, - ), - onPressed: () { - Navigator.of(context).pop(ConfirmAction.ACCEPT); - }, - ) - ], - ); - }, - ); -} diff --git a/lib/utils/location/Location.dart b/lib/utils/location/Location.dart deleted file mode 100644 index 0ddfe6b..0000000 --- a/lib/utils/location/Location.dart +++ /dev/null @@ -1,250 +0,0 @@ -import 'dart:async'; -import 'dart:math'; -import 'dart:ui'; - -import 'package:car_provider_app/utils/AppPermissionHandler.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter/rendering.dart'; -import 'package:geolocator/geolocator.dart'; - -import 'package:google_maps_flutter/google_maps_flutter.dart'; - - -import '../../classes/utils.dart'; - -// import 'package:geodesy/geodesy.dart' as geodesy; - -//Created By Mr.Zohaib -class Location { - static _Map map = _Map(); - - static void havePermission(Function(bool) callback) { - Geolocator.checkPermission().then((value) async { - if (value == LocationPermission.denied) { - value = await Geolocator.requestPermission(); - callback(![LocationPermission.denied, LocationPermission.deniedForever].contains(value)); - } else { - callback(true); - } - }); - } - - static void isEnabled(Function(bool) callback) { - Geolocator.isLocationServiceEnabled().then((value) => callback(value)); - } - - static bool _listeningSettingChange = true; - - static void listenGPS({bool change = true, Function(bool)? onChange}) async { - _listeningSettingChange = change; - if (change == false) return; - - Future.doWhile(() async { - await Utils.delay(1000); - var enable = await Geolocator.isLocationServiceEnabled(); - onChange!(enable); - return _listeningSettingChange; - }); - } - - static void getCurrentLocation(Function(LatLng?) callback) { - void done(Position position) { - //AppStorage.sp.saveLocation(position); - - LatLng? myCurrentLocation = LatLng(position.latitude, position.longitude); - callback(myCurrentLocation); - } - - AppPermissions.location((granted) { - if (granted) { - Geolocator.getLastKnownPosition(forceAndroidLocationManager: true).then((value) { - if (value == null) { - Geolocator.getCurrentPosition().then((value) { - done(value); - }); - } else { - done(value); - } - }); - } - }); - } - - // static LatLng locationAwayFrom( - // {required LatLng loc1, num distanceMeters = 200.0, num bearing = 270.0}) { - // geodesy.LatLng l1 = geodesy.LatLng(loc1.latitude, loc1.longitude); - // geodesy.LatLng destinationPoint = geodesy.Geodesy() - // .destinationPointByDistanceAndBearing(l1, distanceMeters, bearing); - // return LatLng(destinationPoint.latitude, destinationPoint.longitude); - // } - - static Future distanceTo(LatLng destination) async { - var myLoc = await Geolocator.getLastKnownPosition(); - var distance = 0.0; - if (myLoc != null) { - distance = Geolocator.distanceBetween(destination.latitude, destination.longitude, myLoc.latitude, myLoc.longitude); - } - return distance; - } -} - -class _Map { - Marker createMarker( - String id, { - required LatLng coordinates, - BitmapDescriptor? icon, - VoidCallback? onTap, - }) { - final MarkerId markerId = MarkerId(id); - return Marker( - icon: icon ?? BitmapDescriptor.defaultMarker, - markerId: markerId, - position: coordinates, - flat: false, - // infoWindow: InfoWindow(title: id, snippet: '*'), - onTap: onTap, - ); - } - - CameraPosition initialCamera({required Completer mapController, LatLng? position, double zoom = 12}) { - position = position ?? LatLng(24.7249303, 46.5416656); - CameraPosition riyadhEye = CameraPosition( - target: position, - zoom: zoom, - ); - mapController.future.then((controller) { - controller.animateCamera(CameraUpdate.newCameraPosition(riyadhEye)); - }); - return riyadhEye; - } - - CameraPosition moveTo(LatLng location, {double zoom = 12, double direction = 0.0, required Completer mapController, bool? animation}) { - var camera = CameraPosition(target: location, zoom: zoom, bearing: direction); - mapController.future.then((controller) { - animation ?? false ? controller.animateCamera(CameraUpdate.newCameraPosition(camera)) : controller.moveCamera(CameraUpdate.newCameraPosition(camera)); - }); - return camera; - } - - void moveCamera(CameraPosition camera, @required Completer mapController, bool animation) { - mapController.future.then((controller) { - animation ? controller.animateCamera(CameraUpdate.newCameraPosition(camera)) : controller.moveCamera(CameraUpdate.newCameraPosition(camera)); - }); - } - - void scrollBy({double x = 0, double y = 0, required Completer mapController, bool animation = true}) { - var camera = CameraUpdate.scrollBy(x, y); - mapController.future.then((controller) { - animation ? controller.animateCamera(camera) : controller.moveCamera(camera); - }); - } - - void goToCurrentLocation({Completer? mapController, double? direction = 0.0, bool? animation}) { - Location.getCurrentLocation((location) { - moveTo(location!, zoom: 17, mapController: mapController!, animation: animation, direction: direction!); - }); - } - - // var routes = Map(); - // - // void setRoutePolylines(LatLng? source, LatLng? destination, Set polylines, Completer mapController, Function(DirectionsRoute?) completion) { - // if (source == null || destination == null) { - // completion(null); - // return; - // } - // - // var origin = '${source.latitude},${source.longitude}'; - // var destin = '${destination.latitude},${destination.longitude}'; - // var routeId = '$origin->$destination'; - // - // void createPolyline(DirectionsRoute results) { - // List polylineCoordinates = results.overviewPath!.map((e) => LatLng(e.latitude, e.longitude)).toList(); - // PolylineId id = PolylineId("route"); - // Polyline polyline = Polyline( - // polylineId: id, - // color: accentColor, - // width: 5, - // jointType: JointType.round, - // startCap: Cap.roundCap, - // endCap: Cap.roundCap, - // points: polylineCoordinates, - // ); - // - // polylines.removeWhere((element) => true); - // polylines.add(polyline); - // - // LatLngBounds bound = getBounds(coordinates: polylineCoordinates); - // focusCameraToLatLngBounds(bound: bound, mapController: mapController, padding: 100); - // completion(routes[routeId]); - // } - // - // var availableRoute = routes[routeId]; - // if (availableRoute == null) { - // var request = DirectionsRequest(origin: origin, destination: destin); - // DirectionsService().route(request, (response, status) { - // if (status == DirectionsStatus.ok && response.routes!.isNotEmpty) { - // routes[routeId] = response.routes!.first; - // createPolyline(response.routes!.first); - // } - // }); - // } else { - // createPolyline(availableRoute); - // } - // } - - LatLngBounds getBounds({required List coordinates}) { - var lngs = coordinates.map((c) => c.longitude).toList(); - var lats = coordinates.map((c) => c.latitude).toList(); - - double bottomMost = lngs.reduce(min); - double topMost = lngs.reduce(max); - double leftMost = lats.reduce(min); - double rightMost = lats.reduce(max); - - LatLngBounds bounds = LatLngBounds( - northeast: LatLng(rightMost, topMost), - southwest: LatLng(leftMost, bottomMost), - ); - return bounds; - - double? x0, x1, y0, y1; - for (LatLng latLng in coordinates) { - if (x0 == null) { - x0 = x1 = latLng.latitude; - y0 = y1 = latLng.longitude; - } else { - if (latLng.latitude > x1!) x1 = latLng.latitude; - if (latLng.latitude < x0) x0 = latLng.latitude; - if (latLng.longitude > y1!) y1 = latLng.longitude; - if (latLng.longitude < y0!) y0 = latLng.longitude; - } - } - return LatLngBounds(northeast: LatLng(x1!, y1!), southwest: LatLng(x0!, y0!)); - } - - void focusCameraToLatLngBounds({LatLngBounds? bound, Completer? mapController, double? padding}) async { - if (bound == null) return; - - CameraUpdate camera = CameraUpdate.newLatLngBounds(bound, padding!); - final GoogleMapController controller = await mapController!.future; - controller.animateCamera(camera); - } - - void focusCameraTo2Points({LatLng? point1, LatLng? point2, Completer? mapController, double? padding}) async { - var source = point1; - var destination = point2; - if (source != null && destination != null) { - // 'package:google_maps_flutter_platform_interface/src/types/location.dart': Failed assertion: line 72 pos 16: 'southwest.latitude <= northeast.latitude': is not true. - LatLngBounds bound; - if (source.latitude <= destination.latitude) { - bound = LatLngBounds(southwest: source, northeast: destination); - } else { - bound = LatLngBounds(southwest: destination, northeast: source); - } - - if (bound == null) return; - - focusCameraToLatLngBounds(bound: bound, mapController: mapController, padding: padding); - } - } -} diff --git a/lib/utils/navigator.dart b/lib/utils/navigator.dart deleted file mode 100644 index bac84ab..0000000 --- a/lib/utils/navigator.dart +++ /dev/null @@ -1,18 +0,0 @@ -import 'package:flutter/material.dart'; - -Future navigateWithName(BuildContext context, String routeName, {Object? arguments}) { - return Navigator.pushNamed(context, routeName, arguments: arguments); -} - -navigateReplaceWithName(BuildContext context, String routeName, {Object? arguments}) { - Navigator.pushReplacementNamed(context, routeName, arguments: arguments); -} - -navigateReplaceWithNameTillLast(BuildContext context, String routeName, {Object? arguments}) { - Navigator.of(context) - .pushNamedAndRemoveUntil(routeName, (Route route) => false,arguments: arguments); -} - -pop(BuildContext context) { - Navigator.of(context).pop(); -} diff --git a/lib/utils/utils.dart b/lib/utils/utils.dart deleted file mode 100644 index 1bf3639..0000000 --- a/lib/utils/utils.dart +++ /dev/null @@ -1,311 +0,0 @@ -import 'dart:convert'; -import 'dart:io'; -import 'dart:typed_data'; -import 'dart:ui'; - -import 'package:car_provider_app/config/constants.dart'; -import 'package:car_provider_app/theme/colors.dart'; -import 'package:car_provider_app/widgets/extensions/int_extensions.dart'; -import 'package:car_provider_app/widgets/extensions/string_extensions.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_svg/svg.dart'; -import 'package:path/path.dart' as p; -import 'package:sizer/sizer.dart'; - -Color getColorFromHex(String hexColor) { - hexColor = hexColor.toUpperCase().replaceAll('#', ''); - - if (hexColor.length == 6) { - hexColor = 'FF' + hexColor; - } - - return Color(int.parse(hexColor, radix: 16)); -} - -Widget spacerVertical(double v) { - return Container( - height: v, - width: double.infinity, - ); -} - -String convertFileToBase64(File file) { - List imageBytes = file.readAsBytesSync(); - return base64Encode(imageBytes); -} - -String checkFileExt(String path) { - String ex=p.extension(path); - var parts = ex.split('.'); - return parts[1]??"png"; // '.dart' -} - -Future delay(int seconds) async { - return await Future.delayed(Duration(seconds: seconds)); -} - -inkWellCorner({double? r}) { - return RoundedRectangleBorder( - borderRadius: BorderRadius.circular(r ?? 4), - ); -} - -Widget spacerHorizontal(double v) { - return Container( - height: v, - width: v, - ); -} - -Widget mDivider(Color color, {double? h}) { - return Container( - width: double.infinity, - height: h ?? 1, - color: color, - ); -} - -Widget mDivider3({double? h}) { - return Container( - width: double.infinity, - height: h ?? 1, - color: borderLightColor!.withOpacity(0.7) ?? Colors.transparent, - ); -} - -Widget mDivider2(Color color, double w) { - return Container( - width: w, - height: 1, - color: color, - ); -} - -InputDecoration txtField(String label) { - return new InputDecoration( - border: InputBorder.none, - focusedBorder: InputBorder.none, - enabledBorder: InputBorder.none, - errorBorder: InputBorder.none, - hintText: label, - hintStyle: TextStyle(color: Colors.grey), - disabledBorder: InputBorder.none, - isDense: false, - contentPadding: EdgeInsets.only(left: 15, right: 15), - ); -} - -Widget mFlex(int f) { - return Flexible( - flex: f, - child: Container( - width: double.infinity, - height: double.infinity, - ), - ); -} - -Widget mExp(int f) { - return Expanded( - flex: f, - child: Container( - width: double.infinity, - ), - ); -} - -Widget mExpHorizontal(int f) { - return Expanded( - flex: f, - child: Container( - width: double.infinity, - ), - ); -} - -spacer() { - return SizedBox( - height: 8, - ); -} - -Widget floatButton(String icon, {Color? color, required Function onClick, String? title}) { - return Padding( - padding: const EdgeInsets.only(top: 12, bottom: 12), - child: Column( - crossAxisAlignment: CrossAxisAlignment.center, - mainAxisAlignment: MainAxisAlignment.center, - children: [ - FloatingActionButton( - onPressed: () { - onClick(); - }, - heroTag: icon, - backgroundColor: accentColor, - elevation: 4, - child: Container( - child: SvgPicture.asset( - categorySvgIcons + icon, - color: color, - ), - width: double.infinity, - height: double.infinity, - decoration: containerRadius(Colors.white, 200), - clipBehavior: Clip.antiAlias, - padding: EdgeInsets.all(15), - margin: EdgeInsets.all(1), - ), - ), - if (title != null) 2.w.toInt().height, - if (title != null) title.toText12(color: headingColor, isBold: true), - ], - ), - ); -} - -navigateTo(context, page) { - Navigator.push(context, MaterialPageRoute(builder: (context) => page)); -} - -circularImage(String im, double width, double height) { - return new Container(width: 190.0, height: 190.0, decoration: new BoxDecoration(shape: BoxShape.circle, image: new DecorationImage(fit: BoxFit.fill, image: new AssetImage(im)))); -} - -circularImage2(String im, double width, double height) { - return new Container(width: width, height: height, decoration: new BoxDecoration(shape: BoxShape.circle, image: new DecorationImage(fit: BoxFit.fill, image: new AssetImage(im)))); -} - -cardRadius(double radius) { - return RoundedRectangleBorder( - side: BorderSide(color: Colors.transparent, width: 1), - borderRadius: BorderRadius.circular(radius), - ); -} - -cardRadiusWithoutBorder(double radius) { - return RoundedRectangleBorder( - side: BorderSide(color: Colors.transparent, width: 1), - borderRadius: BorderRadius.circular(radius), - ); -} - -Image imageFromBase64String(String base64String) { - return Image.memory(base64Decode(base64String)); -} - -Uint8List dataFromBase64String(String base64String) { - return base64Decode(base64String); -} - -String base64String(Uint8List data) { - return base64Encode(data); -} - -Widget overLayWidget({double? width, double? height, List? color}) { - return Container( - width: width ?? double.infinity, - height: height ?? 60, - decoration: BoxDecoration( - gradient: LinearGradient( - colors: color != null - ? color - : [ - Colors.black.withOpacity(0.2), - Colors.black.withOpacity(0.1), - Colors.black.withOpacity(0.004), - ], - begin: Alignment.topCenter, - end: Alignment.bottomCenter, - tileMode: TileMode.clamp, - ), - ), - ); -} - -Decoration containerRadius(Color color, double r) { - return BoxDecoration( - color: color, - borderRadius: BorderRadius.all(Radius.circular(r)), - ); -} - -Decoration containerRadiusTop({Color? color, double? r}) { - return BoxDecoration( - color: color ?? Colors.white, - borderRadius: BorderRadius.only(topRight: Radius.circular(r ?? 12), topLeft: Radius.circular(r ?? 12)), - ); -} - -Decoration containerRadiusBorder(Color color, double r) { - return BoxDecoration( - color: Colors.transparent, - border: Border.all(color: color, width: 1), - borderRadius: BorderRadius.all(Radius.circular(r)), - ); -} - -Decoration containerRadiusBottom(Color color, double r) { - return BoxDecoration( - color: color, - borderRadius: BorderRadius.only(bottomLeft: Radius.circular(r), bottomRight: Radius.circular(r)), - ); -} - -ShapeBorder cardRadiusTop(double radius) { - return RoundedRectangleBorder( - side: BorderSide(color: Colors.transparent, width: 0), - borderRadius: BorderRadius.only(topLeft: Radius.circular(radius), topRight: Radius.circular(radius)), - ); -} - -Decoration containerColorRadiusBorderWidth(Color background, double radius, Color color, double w) { - return BoxDecoration( - color: background, - border: Border.all( - width: w, // - color: color // <--- border width here - ), - borderRadius: BorderRadius.circular(radius), - ); -} - -ShapeBorder cardRadiusTop2(double radius) { - return RoundedRectangleBorder( - borderRadius: BorderRadius.only(topLeft: Radius.circular(radius), topRight: Radius.circular(radius)), - ); -} - -ShapeBorder cardRadiusBottom(double radius) { - return RoundedRectangleBorder( - borderRadius: BorderRadius.only(bottomLeft: Radius.circular(radius), bottomRight: Radius.circular(radius)), - ); -} - -Decoration containerColorRadiusBorder(Color background, double radius, Color color) { - return BoxDecoration( - color: background, - border: Border.all( - width: 1, // - color: color // <--- border width here - ), - borderRadius: BorderRadius.circular(radius), - ); -} - -//Decoration appGradient = BoxDecoration( -// gradient: LinearGradient( -// colors: [ -// Colors.green[200], -// Colors.green, -// ], -// begin: Alignment.topCenter, -// end: Alignment.bottomCenter, -// ), -//); -// launchURL(String url) async { -// if (await canLaunch(url)) { -// await launch(url); -// } else { -// throw 'Could not launch $url'; -// } -// } diff --git a/lib/view_models/branch_view_model.dart b/lib/view_models/branch_view_model.dart new file mode 100644 index 0000000..e830a6f --- /dev/null +++ b/lib/view_models/branch_view_model.dart @@ -0,0 +1,208 @@ +import 'dart:io'; + +import 'package:car_provider_app/repositories/branch_repo.dart'; +import 'package:file_picker/file_picker.dart'; +import 'package:mc_common_app/models/m_response.dart'; +import 'package:mc_common_app/models/model/branch2.dart'; +import 'package:mc_common_app/models/profile/branch.dart'; +import 'package:mc_common_app/models/profile/categroy.dart'; +import 'package:mc_common_app/models/profile/document.dart'; +import 'package:mc_common_app/models/profile/services.dart'; +import 'package:mc_common_app/models/user/cities.dart'; +import 'package:mc_common_app/models/user/country.dart'; +import 'package:mc_common_app/repositories/common_repo.dart'; +import 'package:mc_common_app/services/services.dart'; +import 'package:mc_common_app/utils/enums.dart'; +import 'package:mc_common_app/utils/utils.dart'; +import 'package:mc_common_app/view_models/base_view_model.dart'; +import 'package:mc_common_app/widgets/dropdown/dropdow_field.dart'; +import 'package:permission_handler/permission_handler.dart'; + +class BranchVM extends BaseVM { + final BranchRepo branchRepo; + final CommonServices commonServices; + final CommonRepo commonRepo; + + BranchVM({required this.branchRepo, required this.commonServices, required this.commonRepo}); + + Document? document; + Branch2? branchs; + + //Create Branch + String countryCode = "", address = "", branchName = "", branchDescription = ""; + double latitude = 0, longitude = 0; + int role = -1, countryId = -1, cityId = -1; + List countryDropList = []; + List citiesDropList = []; + DropValue? countryValue; + DropValue? cityValue; + + Country? country; + Cities? cities; + + //Create Service + String? branchNameForService; + int categoryId = -1, branchId = -1; + DropValue? branchValue; + + List countryDropListForService = []; + List categoryDropList = []; + + Branch? branch; + Category? category; + Services? services; + + getServiceProviderDocument(int providerId) async { + setState(ViewState.busy); + document = await branchRepo.getServiceProviderDocument(providerId); + setState(ViewState.idle); + } + + selectFile(int index) async { + File? file = await commonServices.pickFile(fileType: FileType.custom, allowedExtensions: ['png', 'pdf', 'jpeg']); + + if (file != null) { + int sizeInBytes = file.lengthSync(); + // double sizeInMb = sizeInBytes / (1024 * 1024); + if (sizeInBytes > 1000) { + Utils.showToast("File is larger then 1KB"); + } else { + document!.data![index].document = Utils.convertFileToBase64(file); + document!.data![index].fileExt = Utils.checkFileExt(file.path); + document!.data![index].documentUrl = file.path; + setState(ViewState.idle); + } + } else { + // User canceled the picker + } + } + + Future updateDocument(List? data) async { + return await branchRepo.serviceProviderDocumentsUpdate(data); + } + + //Create new branch + getBranchAndServices() async { + setState(ViewState.busy); + branchs = await branchRepo.getBranchAndServices(); + setState(ViewState.idle); + } + + getAllCountriesList(ServiceProviderBranch? branchData, String countryCode) async { + setState(ViewState.busy); + resetValues(); + country = await commonRepo.getAllCountries(); + country!.data?.forEach((element) { + if (branchData != null) if (branchData.id != null) { + if (element.id == branchData.countryID) { + countryValue = DropValue(element.id ?? 0, countryCode == "SA" ? (element.countryNameN ?? "") : (element.countryName ?? ""), element.countryCode ?? ""); + } + } + countryDropList.add(DropValue(element.id ?? 0, countryCode == "SA" ? (element.countryNameN ?? "") : (element.countryName ?? ""), element.countryCode ?? "")); + }); + if (branchData != null) if (branchData.id != null) getAllCities(branchData, countryCode); + setState(ViewState.idle); + } + + getAllCities(ServiceProviderBranch? branchData, String countryCode) async { + setState(ViewState.busy); + citiesDropList.clear(); + cities = null; + cityId = -1; + cities = await commonRepo.getAllCites(countryId.toString()); + cities!.data?.forEach((element) { + if (branchData != null && branchData.id != null) { + if (element.id == branchData.cityId) { + address = branchData.address!; + branchName = branchData.branchName!; + branchDescription = branchData.branchDescription!; + latitude = double.parse(branchData.latitude ?? ""); + longitude = double.parse(branchData.longitude ?? ""); + countryId = branchData.countryID!; + cityId = branchData.cityId!; + cityValue = DropValue(element.id ?? 0, countryCode == "SA" ? (element.cityNameN ?? "") : (element.cityName ?? ""), element.id.toString() ?? ""); + } + } + citiesDropList.add(DropValue(element.id ?? 0, countryCode == "SA" ? (element.cityNameN ?? "") : (element.cityName ?? ""), element.id.toString() ?? "")); + }); + setState(ViewState.idle); + } + + resetValues() { + countryCode = ""; + address = ""; + branchName = ""; + branchDescription = ""; + latitude = 0; + longitude = 0; + role = -1; + countryId = -1; + cityId = -1; + countryDropList.clear(); + countryId = -1; + cityId = -1; + cities = null; + branchNameForService = null; + categoryId = -1; + branchId = -1; + branchValue = null; + + countryDropListForService = []; + categoryDropList = []; + + branch = null; + category = null; + services = null; + } + + Future createBranch(String branchName, String branchDescription, String cityId, String address, String latitude, String longitude) async { + return await branchRepo.createBranch(branchName, branchDescription, cityId.toString(), address, latitude.toString(), longitude.toString()); + } + + Future updateBranch(int id, String branchName, String branchDescription, String cityId, String address, String latitude, String longitude, {bool isNeedToDelete = true}) async { + return await branchRepo.updateBranch(id ?? 0, branchName, branchDescription, cityId.toString(), address, latitude.toString(), longitude.toString()); + } + + //Create Service + + fetchBranches() async { + resetValues(); + setState(ViewState.busy); + branch = await branchRepo.fetchAllBranches(); + branch!.data?.forEach((element) { + countryDropListForService.add(DropValue(element.id ?? 0, ((element.branchName!.isEmpty ? "N/A" : element.branchName) ?? "N/A"), "")); + }); + setState(ViewState.idle); + } + + fetchBranchCategory(String countryCode) async { + setState(ViewState.busy); + category = await branchRepo.fetchBranchCategory(); + category!.data?.forEach((element) { + categoryDropList.add(DropValue( + element.id ?? 0, + ((element.categoryName!.isEmpty + ? "N/A" + : countryCode == "SA" + ? element.categoryNameN + : element.categoryName) ?? + "N/A"), + "")); + }); + setState(ViewState.idle); + } + + fetchServicesByCategoryId() async { + setState(ViewState.busy); + services = await branchRepo.fetchServicesByCategoryId(categoryId.toString()); + setState(ViewState.idle); + } + + Future createService(List> map) async { + return await branchRepo.createService(map); + } + + Future updateServices(List> map) async { + return await branchRepo.updateService(map); + } +} diff --git a/lib/view_models/dashboard_view_model.dart b/lib/view_models/dashboard_view_model.dart new file mode 100644 index 0000000..98b7881 --- /dev/null +++ b/lib/view_models/dashboard_view_model.dart @@ -0,0 +1,74 @@ +import 'dart:io'; +import 'package:google_maps_flutter/google_maps_flutter.dart'; + +import 'package:easy_localization/easy_localization.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:mc_common_app/classes/app_state.dart'; +import 'package:mc_common_app/generated/locale_keys.g.dart'; +import 'package:mc_common_app/models/user/image_response.dart'; +import 'package:mc_common_app/repositories/user_repo.dart'; +import 'package:mc_common_app/services/services.dart'; +import 'package:mc_common_app/utils/location/Location.dart'; +import 'package:mc_common_app/utils/shared_prefrence.dart'; +import 'package:mc_common_app/utils/utils.dart'; +import 'package:mc_common_app/view_models/base_view_model.dart'; + +class DashboardVM extends BaseVM { + final CommonServices commonServices; + final UserRepo userRepo; + + DashboardVM({required this.commonServices, required this.userRepo}); + + String pickedImage = ""; + + int selectedNavbarBarIndex = 2; + + void onNavbarTapped(int index) { + selectedNavbarBarIndex = index; + notifyListeners(); + } + + void pickImageFromPhone(BuildContext context, int sourceFlag) async { + final File? pickedImageFile = await commonServices.pickImageFromPhone(sourceFlag); + if (pickedImageFile == null) { + return; + } + int sizeInBytes = pickedImageFile.lengthSync(); + if (sizeInBytes > 1000) { + Utils.showToast(LocaleKeys.fileLarger.tr()); + return; + } else { + String image64 = Utils.convertFileToBase64(pickedImageFile); + + Utils.showLoading(context); + ImageResponse response = await userRepo.updateUserImage(image64); + Utils.hideLoading(context); + Navigator.pop(context); + if (response.messageStatus == 1) { + Utils.showToast(LocaleKeys.imageUploaded.tr()); + AppState().getUser.data!.userInfo!.userImageUrl = response.data; + } else { + Utils.showToast(response.message ?? ""); + } + } + } + + Future updateUserImage(String image) async { + return await userRepo.updateUserImage(image); + } + + fetchUsernameAndLocation() async { + String userName = await SharedPrefManager.getPhoneOrEmail(); + Location.getCurrentLocation( + (LatLng? latlng) { + AppState().currentLocation = latlng ?? new LatLng(0, 0); + }, + ); + notifyListeners(); + } + + updateIndex(int i) { + selectedNavbarBarIndex = i; + notifyListeners(); + } +} diff --git a/lib/views/appoinments/appoinment_detail_list_page.dart b/lib/views/appoinments/appoinment_detail_list_page.dart new file mode 100644 index 0000000..5ea135f --- /dev/null +++ b/lib/views/appoinments/appoinment_detail_list_page.dart @@ -0,0 +1,41 @@ +import 'package:car_provider_app/views/appoinments/widget/appointment_detail_list_widget.dart'; +import 'package:flutter/material.dart'; +import 'package:mc_common_app/extensions/int_extensions.dart'; +import 'package:mc_common_app/widgets/button/show_fill_button.dart'; +import 'package:mc_common_app/widgets/common_widgets/app_bar.dart'; + +class AppointmentDetailListPage extends StatelessWidget { + const AppointmentDetailListPage({Key? key}) : super(key: key); + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: const CustomAppBar( + title: "Appointment Detail", + ), + body: SizedBox( + width: double.infinity, + height: double.infinity, + child: Column( + children: [ + Expanded( + child: ListView( + padding: const EdgeInsets.all(21), + children: [ + AppointmentDetailListWidget(), + 21.height, + AppointmentDetailListWidget(), + ], + ), + ), + ShowFillButton( + title: "Merge Appointments", + maxWidth: double.infinity, + margin: const EdgeInsets.all(21), + onPressed: () {}, + ), + ], + )), + ); + } +} diff --git a/lib/views/appoinments/update_appointment_page.dart b/lib/views/appoinments/update_appointment_page.dart new file mode 100644 index 0000000..888adbd --- /dev/null +++ b/lib/views/appoinments/update_appointment_page.dart @@ -0,0 +1,57 @@ +import 'package:car_provider_app/views/appoinments/widget/appointment_detail_list_widget.dart'; +import 'package:flutter/material.dart'; +import 'package:mc_common_app/extensions/int_extensions.dart'; +import 'package:mc_common_app/widgets/button/show_fill_button.dart'; +import 'package:mc_common_app/widgets/common_widgets/app_bar.dart'; + +class UpdateAppointmentPage extends StatelessWidget { + const UpdateAppointmentPage({Key? key}) : super(key: key); + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: const CustomAppBar( + title: "Update Appointment", + ), + body: SizedBox( + width: double.infinity, + height: double.infinity, + child: Column( + children: [ + Expanded( + child: ListView( + padding: const EdgeInsets.all(21), + children: [ + AppointmentDetailListWidget( + isNeedClick: false, + ), + ], + ), + ), + Padding( + padding: const EdgeInsets.all(21.0), + child: Row( + children: [ + Expanded( + child: ShowFillButton( + title: "Cancel", + maxWidth: double.infinity, + onPressed: () {}, + ), + ), + 21.width, + Expanded( + child: ShowFillButton( + title: "Merge Appointments", + maxWidth: double.infinity, + onPressed: () {}, + ), + ), + ], + ), + ), + ], + )), + ); + } +} diff --git a/lib/views/appoinments/widget/appointment_detail_list_widget.dart b/lib/views/appoinments/widget/appointment_detail_list_widget.dart new file mode 100644 index 0000000..eddf52c --- /dev/null +++ b/lib/views/appoinments/widget/appointment_detail_list_widget.dart @@ -0,0 +1,106 @@ +import 'package:car_provider_app/config/provider_routes.dart'; +import 'package:flutter/material.dart'; +import 'package:mc_common_app/classes/consts.dart'; +import 'package:mc_common_app/extensions/int_extensions.dart'; +import 'package:mc_common_app/extensions/string_extensions.dart'; +import 'package:mc_common_app/theme/colors.dart'; +import 'package:mc_common_app/utils/navigator.dart'; +import 'package:mc_common_app/widgets/extensions/extensions_widget.dart'; +import 'package:sizer/sizer.dart'; +import 'package:flutter_svg/flutter_svg.dart'; + +class AppointmentDetailListWidget extends StatelessWidget { + bool isNeedClick; + + AppointmentDetailListWidget({Key? key, this.isNeedClick = true}) : super(key: key); + + @override + Widget build(BuildContext context) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.start, + children: [ + "Olaya Brach".toText( + fontSize: 12, + color: MyColors.darkTextColor, + isBold: true, + ), + "Abdullah Alhbas".toText( + fontSize: 14, + isBold: true, + ), + Row( + children: [ + "Appt. On:".toText( + color: MyColors.lightTextColor, + ), + 2.width, + "19-Mar-2023 11:48 AM".toText(), + ], + ), + ], + ), + ), + SvgPicture.asset( + MyAssets.icEdit, + color: Colors.black, + width: 20, + height: 20, + ) + ], + ), + 8.height, + showServices("Maintenance"), + 2.height, + showServices("Accessories and Modification"), + 24.height, + "Total Amount".toText( + fontSize: 12, + color: MyColors.lightTextColor, + isBold: true, + ), + Row( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + "30,000".toText(fontSize: 16, isBold: true), + 2.width, + "SAR:".toText( + color: MyColors.lightTextColor, + ), + ], + ), + ], + ).toWhiteContainer( + width: double.infinity, + allPading: 12, + onTap: () { + if (isNeedClick) navigateWithName(context, ProviderAppRoutes.updateAppointmentPage); + }, + ); + } + + Widget showServices(String title) { + return Row( + children: [ + const Icon( + Icons.ac_unit, + color: MyColors.primaryColor, + size: 18, + ), + 8.width, + title.toText( + fontSize: 14, + isBold: true, + ), + ], + ); + } +} diff --git a/lib/views/dashboard/dashboard_page.dart b/lib/views/dashboard/dashboard_page.dart new file mode 100644 index 0000000..9f2d7a7 --- /dev/null +++ b/lib/views/dashboard/dashboard_page.dart @@ -0,0 +1,71 @@ +import 'package:badges/badges.dart' as b; + +import 'package:car_provider_app/view_models/dashboard_view_model.dart'; +import 'package:car_provider_app/views/dashboard/fragments/appoinment_fragment.dart'; + +import 'package:car_provider_app/views/dashboard/widget/drawer_widget.dart'; + +import 'package:flutter/material.dart'; +import 'package:mc_common_app/classes/consts.dart'; +import 'package:mc_common_app/extensions/int_extensions.dart'; +import 'package:mc_common_app/theme/colors.dart'; +import 'package:mc_common_app/widgets/common_widgets/app_bar.dart'; +import 'package:mc_common_app/widgets/common_widgets/bottom_nav_bar.dart'; +import 'package:provider/provider.dart'; +import 'fragments/home_fragment.dart'; +import 'fragments/request_list_fragment.dart'; + +class DashboardPage extends StatefulWidget { + const DashboardPage({Key? key}) : super(key: key); + + @override + State createState() => _DashboardPageState(); +} + +class _DashboardPageState extends State { + late DashboardVM dashboardVM; + final GlobalKey _scaffoldKey = GlobalKey(); + + @override + void initState() { + super.initState(); + dashboardVM = Provider.of(context, listen: false); + } + + @override + Widget build(BuildContext context) { + List fragments = [ + HomeFragment( + onTap: () { + _scaffoldKey.currentState!.openDrawer(); + }, + ), + const AppointmentFragment(), + HomeFragment( + onTap: () { + _scaffoldKey.currentState!.openDrawer(); + }, + ), + HomeFragment( + onTap: () { + _scaffoldKey.currentState!.openDrawer(); + }, + ), + RequestListFragment(), + ]; + + return Scaffold( + key: _scaffoldKey, + drawer: CustomDrawer(dashboardVM: dashboardVM), + body: Consumer(builder: (context, model, _) { + return fragments[dashboardVM.selectedNavbarBarIndex]; + }), + bottomNavigationBar: CustomBottomNavbar( + onSelected: (i) { + dashboardVM.updateIndex(i); + }, + selectedNavbarBarIndex: dashboardVM.selectedNavbarBarIndex, + ), + ); + } +} diff --git a/lib/views/dashboard/fragments/appoinment_fragment.dart b/lib/views/dashboard/fragments/appoinment_fragment.dart new file mode 100644 index 0000000..d1b0ca5 --- /dev/null +++ b/lib/views/dashboard/fragments/appoinment_fragment.dart @@ -0,0 +1,64 @@ +import 'package:car_provider_app/views/dashboard/widget/appointment_slider_widget.dart'; +import 'package:mc_common_app/widgets/tab/menu_tabs.dart'; +import 'package:flutter/material.dart'; +import 'package:mc_common_app/classes/consts.dart'; +import 'package:mc_common_app/extensions/int_extensions.dart'; +import 'package:mc_common_app/widgets/common_widgets/app_bar.dart'; +import 'package:mc_common_app/widgets/dropdown/dropdow_field.dart'; + +class AppointmentFragment extends StatelessWidget { + const AppointmentFragment({Key? key}) : super(key: key); + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: CustomAppBar( + profileImageUrl: MyAssets.carBanner, + title: "Appointments", + onTap: () {}, + actions: [ + IconButton( + onPressed: () {}, + icon: const Icon(Icons.search), + ), + 10.width, + ], + ), + body: SizedBox( + width: double.infinity, + height: double.infinity, + child: SingleChildScrollView( + child: Column( + children: [ + 12.height, + SizedBox( + height: 35, + width: double.infinity, + child: MenuTabs( + 0, + [ + DropValue(0, "All Appointments", ""), + DropValue(1, "Booked", ""), + DropValue(2, "Confirmed", ""), + DropValue(3, "Arrived", ""), + ], + onSelect: (DropValue value) {}, + ), + ), + ListView( + padding: const EdgeInsets.all(21), + physics: const NeverScrollableScrollPhysics(), + shrinkWrap: true, + children: [ + const AppointmentSliderWidget(), + 21.height, + const AppointmentSliderWidget(), + ], + ), + ], + ), + ), + ), + ); + } +} diff --git a/lib/views/dashboard/fragments/home_fragment.dart b/lib/views/dashboard/fragments/home_fragment.dart new file mode 100644 index 0000000..d77ef82 --- /dev/null +++ b/lib/views/dashboard/fragments/home_fragment.dart @@ -0,0 +1,81 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_svg/flutter_svg.dart'; +import 'package:mc_common_app/classes/consts.dart'; +import 'package:mc_common_app/extensions/int_extensions.dart'; +import 'package:mc_common_app/theme/colors.dart'; +import 'package:mc_common_app/widgets/common_widgets/ad_widget.dart'; +import 'package:mc_common_app/widgets/common_widgets/app_bar.dart'; +import 'package:mc_common_app/widgets/common_widgets/my_service_provider.dart'; +import 'package:mc_common_app/widgets/common_widgets/view_all_widget.dart'; +import 'package:badges/badges.dart' as b; + +import '../widget/appointment_slider_widget.dart'; + +class HomeFragment extends StatelessWidget { + VoidCallback onTap; + HomeFragment({required this.onTap,Key? key}) : super(key: key); + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: CustomAppBar( + isDrawerEnabled: true, + leadingWidth: 100, + profileImageUrl: MyAssets.carBanner, + onTap: onTap, + actions: [ + IconButton( + onPressed: () {}, + icon: const b.Badge( + badgeContent: Text( + '3', + style: TextStyle( + fontSize: 10, + color: Colors.white, + ), + ), + badgeStyle: b.BadgeStyle( + badgeColor: MyColors.primaryColor, + padding: EdgeInsets.all(5), + ), + child: Icon(Icons.notifications_active), + ), + ), + 10.width, + ], + ), + body: SizedBox( + width: double.infinity, + height: double.infinity, + child: SingleChildScrollView( + child: Padding( + padding: const EdgeInsets.only(top: 8, left: 21, right: 21, bottom: 21), + child: Column( + children: [ + const ViewAllWidget( + title: 'Upcoming Appointment', + subTitle: 'View All', + ), + const AppointmentSliderWidget(), + 21.height, + const ViewAllWidget( + title: 'My Branches', + subTitle: 'View All', + ), + const ServiceProviderWidget(), + 21.height, + const ViewAllWidget( + title: 'Recommended Ads', + subTitle: 'View All', + ), + const AdWidget( + count: 4, + ), + ], + ), + ), + ), + ), + ); + } +} diff --git a/lib/views/dashboard/fragments/request_list_fragment.dart b/lib/views/dashboard/fragments/request_list_fragment.dart new file mode 100644 index 0000000..66927d5 --- /dev/null +++ b/lib/views/dashboard/fragments/request_list_fragment.dart @@ -0,0 +1,72 @@ +import 'package:car_provider_app/config/provider_routes.dart'; +import 'package:flutter/material.dart'; +import 'package:mc_common_app/classes/consts.dart'; +import 'package:mc_common_app/extensions/int_extensions.dart'; +import 'package:mc_common_app/extensions/string_extensions.dart'; +import 'package:mc_common_app/theme/colors.dart'; +import 'package:mc_common_app/utils/navigator.dart'; +import 'package:mc_common_app/widgets/common_widgets/app_bar.dart'; +import 'package:mc_common_app/widgets/dropdown/dropdow_field.dart'; +import 'package:mc_common_app/widgets/extensions/extensions_widget.dart'; +import 'package:mc_common_app/widgets/tab/menu_tabs.dart'; +import 'package:mc_common_app/widgets/tab/role_type_tab.dart'; + +import '../widget/request_list_card_widget.dart'; + +class RequestListFragment extends StatelessWidget { + RequestListFragment({Key? key}) : super(key: key); + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: CustomAppBar( + profileImageUrl: MyAssets.carBanner, + title: "Requests", + onTap: () {}, + actions: [ + IconButton( + onPressed: () {}, + icon: const Icon(Icons.search), + ), + 10.width, + ], + ), + body: SizedBox( + width: double.infinity, + height: double.infinity, + child: SingleChildScrollView( + child: Column( + children: [ + 21.height, + MenuTabs( + 0, + [ + DropValue(0, "Special Request", ""), + DropValue(1, "My Offers", ""), + ], + onSelect: (DropValue dropValue) {}, + selectedColor: MyColors.darkPrimaryColor, + ), + 12.height, + MenuTabs( + 0, + [ + DropValue(0, "Cars", ""), + DropValue(1, "Spare Parts", ""), + ], + onSelect: (DropValue dropValue) {}, + ), + 12.height, + const Padding( + padding: EdgeInsets.symmetric(horizontal: 21), + child: RequestListCardWidget( + count: 12, + ), + ) + ], + ), + ), + ), + ); + } +} diff --git a/lib/pages/dashboard/widget/appointment_slider_widget.dart b/lib/views/dashboard/widget/appointment_slider_widget.dart similarity index 68% rename from lib/pages/dashboard/widget/appointment_slider_widget.dart rename to lib/views/dashboard/widget/appointment_slider_widget.dart index 5fcd436..4418158 100644 --- a/lib/pages/dashboard/widget/appointment_slider_widget.dart +++ b/lib/views/dashboard/widget/appointment_slider_widget.dart @@ -1,8 +1,10 @@ -import 'package:car_provider_app/classes/colors.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:car_provider_app/config/provider_routes.dart'; import 'package:flutter/material.dart'; +import 'package:mc_common_app/extensions/int_extensions.dart'; +import 'package:mc_common_app/extensions/string_extensions.dart'; +import 'package:mc_common_app/theme/colors.dart'; +import 'package:mc_common_app/utils/navigator.dart'; +import 'package:mc_common_app/widgets/extensions/extensions_widget.dart'; import 'package:sizer/sizer.dart'; class AppointmentSliderWidget extends StatelessWidget { @@ -19,20 +21,22 @@ class AppointmentSliderWidget extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start, children: [ - "Olaya Brach".toText12( - color: MyColors.lightTextColor, + "Olaya Brach".toText( + fontSize: 12, + color: MyColors.darkTextColor, isBold: true, ), - "Abdullah Alhbas".toText14( + "Abdullah Alhbas".toText( + fontSize: 14, isBold: true, ), Row( children: [ - "Appt. On:".toText10( + "Appt. On:".toText( color: MyColors.lightTextColor, ), 2.width, - "19-Mar-2023 11:48 AM".toText10(), + "19-Mar-2023 11:48 AM".toText(), ], ), ], @@ -61,19 +65,24 @@ class AppointmentSliderWidget extends StatelessWidget { ], ), ), - Icon( + const Icon( Icons.arrow_forward, ), ], ), ], - ).toWhiteContainer(width: double.infinity); + ).toWhiteContainer( + width: double.infinity, + allPading: 12, + onTap: () { + navigateWithName(context, ProviderAppRoutes.appointmentDetailList); + }); } Widget showServices(String title) { return Row( children: [ - Icon( + const Icon( Icons.ac_unit, color: MyColors.primaryColor, size: 18, diff --git a/lib/views/dashboard/widget/drawer_widget.dart b/lib/views/dashboard/widget/drawer_widget.dart new file mode 100644 index 0000000..cf64b42 --- /dev/null +++ b/lib/views/dashboard/widget/drawer_widget.dart @@ -0,0 +1,200 @@ +import 'package:car_provider_app/config/provider_routes.dart'; +import 'package:easy_localization/easy_localization.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_svg/flutter_svg.dart'; +import 'package:image_picker/image_picker.dart'; + +import 'package:car_provider_app/generated/locale_keys.g.dart'; + +import 'package:car_provider_app/view_models/dashboard_view_model.dart'; +import 'package:mc_common_app/classes/app_state.dart'; +import 'package:mc_common_app/classes/consts.dart'; +import 'package:mc_common_app/config/routes.dart'; +import 'package:mc_common_app/extensions/int_extensions.dart'; +import 'package:mc_common_app/extensions/string_extensions.dart'; +import 'package:mc_common_app/models/user/image_response.dart'; +import 'package:mc_common_app/theme/colors.dart'; +import 'package:mc_common_app/utils/navigator.dart'; +import 'package:mc_common_app/utils/utils.dart'; +import 'package:mc_common_app/widgets/button/show_fill_button.dart'; +import 'package:mc_common_app/widgets/extensions/extensions_widget.dart'; + + +class CustomDrawer extends StatefulWidget { + final DashboardVM dashboardVM; + + const CustomDrawer({Key? key, required this.dashboardVM}) : super(key: key); + + @override + State createState() => _CustomDrawerState(); +} + +class _CustomDrawerState extends State { + void _openImagePicker() { + showDialog( + context: context, + builder: (context) => AlertDialog( + content: const Text("Choose image source"), + actions: [ + TextButton(child: const Text("Camera"), onPressed: () => widget.dashboardVM.pickImageFromPhone(context, 0)), + TextButton(child: const Text("Gallery"), onPressed: () => widget.dashboardVM.pickImageFromPhone(context, 1)), + ], + ), + ); + } + + @override + Widget build(BuildContext context) { + return Drawer( + child: Column( + children: [ + Stack( + children: [ + Container( + width: double.infinity, + height: 200, + color: MyColors.darkPrimaryColor.withOpacity(0.01), + child: Image.network( + ApiConsts.baseUrlServices + AppState().getUser.data!.userInfo!.userImageUrl.toString(), + ), + ), + Positioned( + top: 10, + right: 10, + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Column( + children: [ + Container( + width: 40, + height: 40, + decoration: BoxDecoration( + color: Colors.grey[200], + borderRadius: BorderRadius.circular(30), + ), + child: const Icon( + Icons.edit, + color: MyColors.darkPrimaryColor, + ).onPress(() { + _openImagePicker(); + // _handleURLButtonPress(context, ImageSourceType.camera); + }), + ), + 12.height, + Container( + width: 40, + height: 40, + decoration: BoxDecoration( + color: Colors.grey[200], + borderRadius: BorderRadius.circular(30), + ), + child: const Icon( + Icons.delete, + color: Colors.red, + ).onPress(() async { + Utils.showLoading(context); + ImageResponse response = await widget.dashboardVM.updateUserImage(""); + if (response.messageStatus == 1) { + Utils.showToast("Image is Deleted"); + setState(() { + AppState().getUser.data!.userInfo!.userImageUrl = response.data; + }); + } + Utils.hideLoading(context); + }), + ), + ], + ), + ], + ), + ) + ], + ), + Container( + width: double.infinity, + color: MyColors.darkPrimaryColor.withOpacity(0.1), + padding: const EdgeInsets.all(20), + child: Row( + children: [ + Expanded( + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + "userName".toText( + isBold: true, + fontSize: 20, + letterSpacing: -1.44, + ), + AppState().getUser.data!.userInfo!.roleName!.toText(fontSize: 10), + ], + ), + ), + ShowFillButton( + title: LocaleKeys.edit.tr(), + fontSize: 12, + maxHeight: 35, + maxWidth: 70, + onPressed: () { + navigateWithName(context, AppRoutes.editAccountPage); + }, + ), + ], + ), + ), + ListTile( + leading: SvgPicture.asset(MyAssets.icNotification, color: MyColors.darkPrimaryColor), + title: LocaleKeys.notifications.tr().toText(fontSize: 12), + ), + ListTile( + leading: SvgPicture.asset(MyAssets.icSettings, color: MyColors.darkPrimaryColor), + title: LocaleKeys.general.tr().toText(fontSize: 12), + ), + ListTile( + leading: SvgPicture.asset(MyAssets.nextIcon, color: MyColors.darkPrimaryColor), + title: LocaleKeys.defineLicences.tr().toText(fontSize: 12), + onTap: () { + navigateWithName(context, ProviderAppRoutes.defineLicense); + }, + ), + ListTile( + leading: SvgPicture.asset(MyAssets.icCar, color: MyColors.darkPrimaryColor), + title: LocaleKeys.dealershipSettings.tr().toText(fontSize: 12), + onTap: () { + navigateWithName(context, ProviderAppRoutes.dealershipSetting); + }, + ), + ListTile( + leading: Image.asset( + MyAssets.icWorldPng, + width: 20, + height: 20, + color: MyColors.darkPrimaryColor, + ), + title: LocaleKeys.english.tr().toText(fontSize: 12), + onTap: () { + if (EasyLocalization.of(context)?.currentLocale?.countryCode == "SA") { + context.setLocale(const Locale("en", "US")); + } else { + context.setLocale(const Locale('ar', 'SA')); + } + }, + ), + ListTile( + leading: const Icon( + Icons.logout, + color: MyColors.darkPrimaryColor, + ), + title: LocaleKeys.signOut.tr().toText(fontSize: 12), + onTap: () { + pop(context); + navigateReplaceWithName(context, AppRoutes.registerSelection); + }, + ), + ], + ), + ); + } +} diff --git a/lib/views/dashboard/widget/request_list_card_widget.dart b/lib/views/dashboard/widget/request_list_card_widget.dart new file mode 100644 index 0000000..512d18c --- /dev/null +++ b/lib/views/dashboard/widget/request_list_card_widget.dart @@ -0,0 +1,103 @@ +import 'package:car_provider_app/config/provider_routes.dart'; +import 'package:flutter/material.dart'; +import 'package:mc_common_app/classes/consts.dart'; +import 'package:mc_common_app/extensions/int_extensions.dart'; +import 'package:mc_common_app/extensions/string_extensions.dart'; +import 'package:mc_common_app/theme/colors.dart'; +import 'package:mc_common_app/utils/navigator.dart'; +import 'package:mc_common_app/widgets/extensions/extensions_widget.dart'; + +class RequestListCardWidget extends StatelessWidget { + final int count; + + const RequestListCardWidget({Key? key, required this.count}) : super(key: key); + + @override + Widget build(BuildContext context) { + return ListView.builder( + itemCount: count, + shrinkWrap: true, + physics: const NeverScrollableScrollPhysics(), + itemBuilder: (BuildContext context, int index) { + return Padding( + padding: const EdgeInsets.only(bottom: 15), + child: buildRequestContainer(context), + ); + }); + } + + Widget buildRequestContainer(BuildContext context) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.start, + children: [ + "Toyota Crolla".toText(fontSize: 16, isBold: true), + showItem("Model:", "2019"), + ], + ), + ), + Column( + crossAxisAlignment: CrossAxisAlignment.end, + mainAxisAlignment: MainAxisAlignment.start, + children: [ + "Riyadh".toText( + color: MyColors.lightTextColor, + ), + "9 Hours Ago".toText(color: MyColors.lightTextColor), + ], + ), + ], + ), + showItem("Customer Name", "Abdullah"), + showItem("Description", "Looking for the car as soon as possible"), + showItem("Price Range:", ""), + Row( + children: [ + Expanded( + child: Row( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + "30,000".toText(fontSize: 16, isBold: true), + 2.width, + "SAR:".toText( + color: MyColors.lightTextColor, + ), + ], + ), + ), + const Icon(Icons.arrow_forward) + ], + ), + ], + ).toWhiteContainer( + width: double.infinity, + allPading: 12, + onTap: () { + navigateWithName(context, ProviderAppRoutes.requestsDetailPage); + }, + ); + } + + Widget showItem(String title, String value) { + return Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + if (title.isNotEmpty) + title.toText( + color: MyColors.lightTextColor, + ), + if (title.isNotEmpty) 2.width, + if (value.isNotEmpty) Expanded(child: value.toText(isBold: true)), + ], + ); + } +} diff --git a/lib/pages/location/map_selection_widget.dart b/lib/views/location/map_selection_widget.dart similarity index 94% rename from lib/pages/location/map_selection_widget.dart rename to lib/views/location/map_selection_widget.dart index c086913..61953d1 100644 --- a/lib/pages/location/map_selection_widget.dart +++ b/lib/views/location/map_selection_widget.dart @@ -47,7 +47,7 @@ class AppMapState extends State { zoomControlsEnabled: true, myLocationButtonEnabled: true, myLocationEnabled: true, - initialCameraPosition: CameraPosition.fromMap(widget.initialCamera) ?? CameraPosition(target: LatLng(-26.1711459, 27.9002758), zoom: 2.0), + initialCameraPosition: CameraPosition.fromMap(widget.initialCamera) ?? const CameraPosition(target: LatLng(-26.1711459, 27.9002758), zoom: 2.0), onCameraMove: widget.onCameraMove, onMapCreated: (GoogleMapController controller) { googleMapController = controller; diff --git a/lib/pages/location/pick_location_page.dart b/lib/views/location/pick_location_page.dart similarity index 64% rename from lib/pages/location/pick_location_page.dart rename to lib/views/location/pick_location_page.dart index d7c4767..090f41f 100644 --- a/lib/pages/location/pick_location_page.dart +++ b/lib/views/location/pick_location_page.dart @@ -1,14 +1,16 @@ import 'dart:async'; -import 'package:car_provider_app/generated/locale_keys.g.dart'; -import 'package:car_provider_app/utils/navigator.dart'; -import 'package:car_provider_app/widgets/app_bar.dart'; -import 'package:car_provider_app/widgets/button/show_fill_button.dart'; import 'package:easy_localization/src/public_ext.dart'; import 'package:flutter/material.dart'; import 'package:geocoding/geocoding.dart'; import 'package:geolocator/geolocator.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart'; +import 'package:car_provider_app/generated/locale_keys.g.dart'; +import 'package:mc_common_app/utils/navigator.dart'; +import 'package:mc_common_app/widgets/button/show_fill_button.dart'; +import 'package:mc_common_app/widgets/common_widgets/app_bar.dart'; + + import 'package:permission_handler/permission_handler.dart'; import 'map_selection_widget.dart'; @@ -56,58 +58,59 @@ class _PickLocationPageState extends State { @override Widget build(BuildContext context) { return Scaffold( - appBar: appBar(context, title: LocaleKeys.pickLocation.tr()), - body: Container( - child: Column( - children: [ - Expanded( - child: Stack( - children: [ - if (appMap != null) appMap, - ValueListenableBuilder( - builder: (BuildContext context, String value, Widget? child) { - // This builder will only get called when the _counter - // is updated. - return value.isNotEmpty - ? Container( - width: double.infinity, - margin: EdgeInsets.all(12), - child: Card( - child: Padding( - padding: const EdgeInsets.all(12.0), - child: Text(value ?? ""), - )), - ) - : Container(); - }, - valueListenable: _counter, - ), - Align( - alignment: Alignment.center, - child: Icon( - Icons.place, - color: Colors.red, - size: 50, - ), - ), - ], - ), - ), - Container( - width: double.infinity, - child: Padding( - padding: const EdgeInsets.all(12.0), - child: ShowFillButton( - title: LocaleKeys.pickAddress.tr(), - onPressed: () { - widget.onPickAddress(latitude, longitude, _counter.value); - pop(context); + appBar: CustomAppBar( + title: LocaleKeys.pickLocation.tr(), + isRemoveBackButton: false, + ), + body: Column( + children: [ + Expanded( + child: Stack( + children: [ + if (appMap != null) appMap, + ValueListenableBuilder( + builder: (BuildContext context, String value, Widget? child) { + // This builder will only get called when the _counter + // is updated. + return value.isNotEmpty + ? Container( + width: double.infinity, + margin: EdgeInsets.all(12), + child: Card( + child: Padding( + padding: const EdgeInsets.all(12.0), + child: Text(value ?? ""), + )), + ) + : Container(); }, + valueListenable: _counter, ), + const Align( + alignment: Alignment.center, + child: Icon( + Icons.place, + color: Colors.red, + size: 50, + ), + ), + ], + ), + ), + Container( + width: double.infinity, + child: Padding( + padding: const EdgeInsets.all(12.0), + child: ShowFillButton( + title: LocaleKeys.pickAddress.tr(), + onPressed: () { + widget.onPickAddress(latitude, longitude, _counter.value); + pop(context); + }, ), ), - ], - ), + ), + ], ), ); } diff --git a/lib/views/requests/request_detail_page.dart b/lib/views/requests/request_detail_page.dart new file mode 100644 index 0000000..b6e753d --- /dev/null +++ b/lib/views/requests/request_detail_page.dart @@ -0,0 +1,127 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:mc_common_app/classes/consts.dart'; +import 'package:mc_common_app/extensions/int_extensions.dart'; +import 'package:mc_common_app/extensions/string_extensions.dart'; +import 'package:mc_common_app/theme/colors.dart'; +import 'package:mc_common_app/utils/navigator.dart'; +import 'package:mc_common_app/widgets/button/show_fill_button.dart'; +import 'package:mc_common_app/widgets/common_widgets/app_bar.dart'; +import 'package:mc_common_app/widgets/extensions/extensions_widget.dart'; + +import '../../config/provider_routes.dart'; +import '../dashboard/widget/request_list_card_widget.dart'; + +class RequestDetailPage extends StatelessWidget { + const RequestDetailPage({Key? key}) : super(key: key); + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: const CustomAppBar( + title: "Request Detail", + ), + body: SizedBox( + width: double.infinity, + height: double.infinity, + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Column( + children: [ + Image.asset(MyAssets.bnCar), + 24.height, + buildRequestContainer(context), + ], + ).toWhiteContainer( + width: double.infinity, + allPading: 12, + margin: const EdgeInsets.only( + top: 21, + right: 21, + left: 21, + ), + ), + ShowFillButton( + title: "Send Offer", + maxWidth: double.infinity, + margin: const EdgeInsets.all(21), + onPressed: () { + navigateWithName(context, ProviderAppRoutes.sendOfferPage); + }, + ), + ], + ), + ), + ); + } + + Widget buildRequestContainer(BuildContext context) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.start, + children: [ + "Toyota Crolla".toText(fontSize: 16, isBold: true), + showItem("Model:", "2019"), + ], + ), + ), + Column( + crossAxisAlignment: CrossAxisAlignment.end, + mainAxisAlignment: MainAxisAlignment.start, + children: [ + "Riyadh".toText( + color: MyColors.lightTextColor, + ), + "9 Hours Ago".toText(color: MyColors.lightTextColor), + ], + ), + ], + ), + showItem("Customer Name", "Abdullah"), + showItem("Description", "Looking for the car as soon as possible"), + showItem("Price Range:", ""), + Row( + children: [ + Expanded( + child: Row( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + "30,000".toText(fontSize: 16, isBold: true), + 2.width, + "SAR:".toText( + color: MyColors.lightTextColor, + ), + ], + ), + ), + // const Icon(Icons.arrow_forward) + ], + ), + ], + ); + } + + Widget showItem(String title, String value) { + return Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + if (title.isNotEmpty) + title.toText( + color: MyColors.lightTextColor, + ), + if (title.isNotEmpty) 2.width, + if (value.isNotEmpty) Expanded(child: value.toText(isBold: true)), + ], + ); + } +} diff --git a/lib/views/requests/send_offer_page.dart b/lib/views/requests/send_offer_page.dart new file mode 100644 index 0000000..800e7a0 --- /dev/null +++ b/lib/views/requests/send_offer_page.dart @@ -0,0 +1,52 @@ +import 'package:flutter/material.dart'; +import 'package:mc_common_app/extensions/int_extensions.dart'; +import 'package:mc_common_app/extensions/string_extensions.dart'; +import 'package:mc_common_app/widgets/button/show_fill_button.dart'; +import 'package:mc_common_app/widgets/common_widgets/app_bar.dart'; +import 'package:mc_common_app/widgets/extensions/extensions_widget.dart'; +import 'package:mc_common_app/widgets/txt_field.dart'; + +class SendOfferPage extends StatelessWidget { + const SendOfferPage({Key? key}) : super(key: key); + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: const CustomAppBar( + title: "Send Offer", + ), + body: Column( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + "Send Price Offer".toText( + fontSize: 14, + isBold: true, + ), + 12.height, + TxtField( + hint: "35,0000", + ), + 12.height, + TxtField( + hint: "Comment", + ), + ], + ).toWhiteContainer( + width: double.infinity, + allPading: 12, + margin: const EdgeInsets.all(21), + ), + ShowFillButton( + title: "Submit", + onPressed: () {}, + maxWidth: double.infinity, + margin: const EdgeInsets.all(21), + ), + ], + ), + ); + } +} diff --git a/lib/views/settings/branch/branch_detail_page.dart b/lib/views/settings/branch/branch_detail_page.dart new file mode 100644 index 0000000..110c85f --- /dev/null +++ b/lib/views/settings/branch/branch_detail_page.dart @@ -0,0 +1,187 @@ +import 'package:car_provider_app/config/provider_routes.dart'; +import 'package:easy_localization/easy_localization.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_svg/svg.dart'; + +import 'package:car_provider_app/view_models/branch_view_model.dart'; +import 'package:mc_common_app/classes/consts.dart'; +import 'package:mc_common_app/config/routes.dart'; +import 'package:mc_common_app/extensions/int_extensions.dart'; +import 'package:mc_common_app/extensions/string_extensions.dart'; +import 'package:mc_common_app/models/model/branch2.dart'; +import 'package:mc_common_app/models/profile/categroy.dart'; +import 'package:mc_common_app/theme/colors.dart'; +import 'package:mc_common_app/utils/navigator.dart'; +import 'package:mc_common_app/widgets/button/show_fill_button.dart'; +import 'package:mc_common_app/widgets/common_widgets/app_bar.dart'; + + +import 'package:provider/provider.dart'; + + +import '../../../generated/locale_keys.g.dart'; + + +class BranchDetailPage extends StatelessWidget { + ServiceProviderBranch branchData; + + BranchDetailPage(this.branchData); + + List categories = []; + + @override + Widget build(BuildContext context) { + branchData.serviceProviderServices!.forEach((element) { + categories.add( + CategoryData( + id: element.categoryId, + categoryName: element.categoryName, + categoryNameN: element.categoryName, + ), + ); + }); + categories = categories.toSet().toList(); + for (var payment in categories) { + branchData.serviceProviderServices!.forEach((element) { + if (payment.id == element.categoryId) { + payment.services ??= []; + payment.services!.add(element); + } + }); + } + branchData.categories = categories; + return Scaffold( + appBar: CustomAppBar( + title: LocaleKeys.branchName.tr(), + ), + body: Consumer(builder: (context, model, _) { + return SizedBox( + width: double.infinity, + height: double.infinity, + child: Column( + children: [ + Expanded( + child: SingleChildScrollView( + padding: EdgeInsets.all(20), + child: Column( + children: [ + Row( + children: [ + Expanded( + child: titleWidget(MyAssets.icBranches, LocaleKeys.branchInfo), + ), + IconButton( + onPressed: () { + navigateWithName(context, ProviderAppRoutes.defineBranch, arguments: branchData); + }, + icon: const Icon( + Icons.edit, + ), + ) + ], + ), + 8.height, + Column( + children: [ + showData("${LocaleKeys.country.tr()}:", branchData.countryName.toString()), + showData("${LocaleKeys.city.tr()}:", branchData.cityName.toString()), + showData("${LocaleKeys.branchName.tr()}:", branchData.branchName.toString()), + showData("${LocaleKeys.branchDescription.tr()}:", branchData.branchDescription.toString()), + showData("${LocaleKeys.address.tr()}:", branchData.address.toString()), + ], + ), + Container( + width: double.infinity, + height: 1, + color: Colors.grey, + margin: EdgeInsets.symmetric(vertical: 12), + ), + categories.isEmpty + ? LocaleKeys.no_branch.tr().toText(fontSize: 12) + : ListView.builder( + itemBuilder: (context, pIndex) { + return Container( + width: double.infinity, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.start, + children: [ + categories[pIndex].categoryName.toString().toText(fontSize: 16, isBold: true), + ListView.builder( + itemBuilder: (context, index) { + return Container( + child: + ("- ${EasyLocalization.of(context)?.currentLocale?.countryCode == "SA" ? categories[pIndex].services![index].serviceNameN.toString() : categories[pIndex].services![index].serviceName.toString()}") + .toText(fontSize: 14), + ); + }, + itemCount: categories[pIndex].services?.length, + physics: NeverScrollableScrollPhysics(), + shrinkWrap: true, + ) + ], + ), + ); + }, + itemCount: categories.length, + physics: NeverScrollableScrollPhysics(), + shrinkWrap: true, + ), + ], + ), + ), + ), + Container( + width: double.infinity, + height: 1, + color: Colors.grey, + ), + Padding( + padding: const EdgeInsets.all(12.0), + child: ShowFillButton( + title: LocaleKeys.editServices, + maxWidth: double.infinity, + onPressed: () { + navigateWithName( + context, + ProviderAppRoutes.createServices, + arguments: branchData, + ); + }, + ), + ), + ], + ), + ); + }), + ); + } + + Widget titleWidget(String icon, String title) { + return Row( + children: [ + SvgPicture.asset( + icon, + width: 18, + height: 18, + color: MyColors.darkPrimaryColor, + ), + 12.width, + title.toText(fontSize: 16, color: Colors.black, isBold: true), + ], + ); + } + + Widget showData(String title, String value) { + return Row( + children: [ + title.toText(fontSize: 10, color: Colors.black, isBold: true), + 8.width, + value.toText( + fontSize: 12, + color: MyColors.textColor, + ) + ], + ); + } +} diff --git a/lib/views/settings/branch/branch_list_page.dart b/lib/views/settings/branch/branch_list_page.dart new file mode 100644 index 0000000..d91b35e --- /dev/null +++ b/lib/views/settings/branch/branch_list_page.dart @@ -0,0 +1,163 @@ +import 'package:car_provider_app/config/provider_routes.dart'; +import 'package:easy_localization/easy_localization.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_svg/svg.dart'; +import 'package:geolocator/geolocator.dart'; + +import 'package:car_provider_app/generated/locale_keys.g.dart'; + +import 'package:car_provider_app/view_models/branch_view_model.dart'; +import 'package:mc_common_app/classes/app_state.dart'; +import 'package:mc_common_app/classes/consts.dart'; +import 'package:mc_common_app/config/routes.dart'; +import 'package:mc_common_app/extensions/int_extensions.dart'; +import 'package:mc_common_app/extensions/string_extensions.dart'; +import 'package:mc_common_app/models/m_response.dart'; +import 'package:mc_common_app/theme/colors.dart'; +import 'package:mc_common_app/utils/enums.dart'; +import 'package:mc_common_app/utils/navigator.dart'; +import 'package:mc_common_app/utils/utils.dart'; +import 'package:mc_common_app/widgets/common_widgets/app_bar.dart'; +import 'package:mc_common_app/widgets/extensions/extensions_widget.dart'; + +import 'package:provider/provider.dart'; + +class BranchListPage extends StatelessWidget { + bool isNeedAppBar; + + BranchListPage({Key? key, this.isNeedAppBar = true}) : super(key: key); + + @override + Widget build(BuildContext context) { + BranchVM branchVM = context.read(); + branchVM.getBranchAndServices(); + return Scaffold( + appBar: !isNeedAppBar + ? null + : CustomAppBar( + title: LocaleKeys.myServiceBranches.tr(), + ), + floatingActionButton: FloatingActionButton( + child: const Icon( + Icons.add, + color: Colors.white, + ), + onPressed: () async { + await navigateWithName(context, ProviderAppRoutes.defineBranch); + }, + ), + body: SizedBox( + width: double.infinity, + height: double.infinity, + child: Consumer( + builder: (context, model, _) { + if (model.state == ViewState.busy) { + return const Center(child: CircularProgressIndicator()); + } else { + return model.branchs!.data! == null + ? const Center(child: Text("No Branch Found")) + : model.branchs!.data!.serviceProviderBranch!.isEmpty + ? Center(child: Text(LocaleKeys.no_branch.tr())) + : ListView.separated( + itemBuilder: (context, index) { + return Row( + children: [ + Container( + width: 74, + height: 50, + decoration: const BoxDecoration( + color: MyColors.darkPrimaryColor, + borderRadius: BorderRadius.all(Radius.circular(8)), + ), + padding: const EdgeInsets.all(6), + child: SvgPicture.asset( + MyAssets.icBranches, + color: Colors.white, + ), + ), + 12.width, + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Row( + children: [ + const Icon( + Icons.place, + size: 12, + color: MyColors.darkPrimaryColor, + ), + Geolocator.distanceBetween( + AppState().currentLocation.latitude, + AppState().currentLocation.latitude, + double.parse(model.branchs!.data!.serviceProviderBranch![index].latitude ?? "0"), + double.parse(model.branchs!.data!.serviceProviderBranch![index].longitude ?? "0")) + .toStringAsFixed(2) + .toText( + fontSize: 12, + color: MyColors.darkPrimaryColor, + ) + ], + ), + Text( + model.branchs!.data!.serviceProviderBranch![index].branchName ?? "", + style: const TextStyle( + fontSize: 14, + fontWeight: FontWeight.bold, + ), + ), + LocaleKeys.tapToEdit.tr().toText(fontSize: 10, color: MyColors.grey70Color), + ], + ), + ), + 12.width, + IconButton( + onPressed: () async { + Utils.showLoading(context); + MResponse res = await model.updateBranch( + model.branchs!.data!.serviceProviderBranch![index].id ?? 0, + model.branchs!.data!.serviceProviderBranch![index].branchName ?? "", + model.branchs!.data!.serviceProviderBranch![index].branchDescription ?? "", + model.branchs!.data!.serviceProviderBranch![index].cityId.toString(), + model.branchs!.data!.serviceProviderBranch![index].address ?? "", + model.branchs!.data!.serviceProviderBranch![index].latitude.toString(), + model.branchs!.data!.serviceProviderBranch![index].longitude.toString(), + isNeedToDelete: false); + Utils.hideLoading(context); + if (res.messageStatus == 1) { + Utils.showToast(LocaleKeys.branch_deleted.tr()); + model.setState(ViewState.idle); + } else { + Utils.showToast(res.message ?? ""); + } + }, + icon: const Icon(Icons.delete), + color: Colors.red, + ), + const Icon( + Icons.arrow_forward_rounded, + size: 16, + ), + ], + ).toContainer().onPress(() async { + // await navigateWithName(context, AppRoutes.defineBranch, arguments: snapshot.data!.data![index]); + // setState(() {}); + model.branchs!.data!.serviceProviderBranch![index].countryID = model.branchs!.data!.countryID; + model.branchs!.data!.serviceProviderBranch![index].countryName = model.branchs!.data!.countryName; + navigateWithName(context, ProviderAppRoutes.branchDetail, arguments: model.branchs!.data!.serviceProviderBranch![index]); + }); + }, + separatorBuilder: (context, index) { + return 12.height; + }, + itemCount: model.branchs!.data!.serviceProviderBranch!.length, + padding: const EdgeInsets.all(12), + ); + } + }, + ), + ), + ); + } +} diff --git a/lib/views/settings/branch/define_branch_page.dart b/lib/views/settings/branch/define_branch_page.dart new file mode 100644 index 0000000..c703d74 --- /dev/null +++ b/lib/views/settings/branch/define_branch_page.dart @@ -0,0 +1,209 @@ +import 'package:car_provider_app/generated/locale_keys.g.dart'; +import 'package:easy_localization/easy_localization.dart'; +import 'package:flutter/material.dart'; + +import 'package:car_provider_app/view_models/branch_view_model.dart'; +import 'package:car_provider_app/views/location/pick_location_page.dart'; +import 'package:mc_common_app/extensions/int_extensions.dart'; +import 'package:mc_common_app/extensions/string_extensions.dart'; +import 'package:mc_common_app/models/m_response.dart'; +import 'package:mc_common_app/models/model/branch2.dart'; +import 'package:mc_common_app/theme/colors.dart'; +import 'package:mc_common_app/utils/enums.dart'; +import 'package:mc_common_app/utils/navigator.dart'; +import 'package:mc_common_app/utils/utils.dart'; +import 'package:mc_common_app/widgets/button/show_fill_button.dart'; +import 'package:mc_common_app/widgets/common_widgets/app_bar.dart'; +import 'package:mc_common_app/widgets/dropdown/dropdow_field.dart'; +import 'package:mc_common_app/widgets/txt_field.dart'; + +import 'package:provider/provider.dart'; + + + +class DefineBranchPage extends StatelessWidget { + ServiceProviderBranch? branchData; + + DefineBranchPage(this.branchData); + + @override + Widget build(BuildContext context) { + BranchVM branchVM = context.read(); + branchVM.getAllCountriesList(branchData, EasyLocalization.of(context)?.currentLocale?.countryCode ?? "SA"); + return Scaffold( + appBar: const CustomAppBar(), + body: Consumer(builder: (context, model, _) { + return SizedBox( + width: double.infinity, + height: double.infinity, + child: Column( + children: [ + Expanded( + child: SingleChildScrollView( + child: Padding( + padding: const EdgeInsets.all(20.0), + child: Column( + children: [ + LocaleKeys.defineBranches.tr().toText(fontSize: 20, isBold: true), + 12.height, + LocaleKeys.branchLocation.tr().toText(fontSize: 14, color: MyColors.lightTextColor), + 20.height, + LocaleKeys.chooseCountry.tr().toText(fontSize: 14, color: MyColors.lightTextColor), + 8.height, + model.country != null + ? DropdownField( + (DropValue value) { + model.countryCode = value.subValue; + model.countryId = value.id; + model.getAllCities(branchData, EasyLocalization.of(context)?.currentLocale?.countryCode ?? "SA"); + }, + list: model.countryDropList, + dropdownValue: model.countryValue, + hint: "${LocaleKeys.chooseCountry.tr()}*", + ) + : const CircularProgressIndicator(), + 12.height, + if (model.countryId != -1) + model.cities != null + ? model.citiesDropList.isEmpty + ? Text(LocaleKeys.no_city_available.tr()) + : DropdownField( + (DropValue value) { + // countryCode = value.subValue; + model.setOnlyState(ViewState.busy); + model.cityId = value.id; + model.setState(ViewState.idle); + }, + list: model.citiesDropList, + dropdownValue: model.cityValue, + hint: "${LocaleKeys.chooseCity.tr()}*", + ) + : const CircularProgressIndicator(), + 12.height, + if (model.cityId != -1) + Column( + children: [ + TxtField( + hint: "${LocaleKeys.branchName.tr()}*", + value: model.branchName, + onChanged: (v) { + model.branchName = v; + }, + ), + 12.height, + TxtField( + hint: "${LocaleKeys.branchDescription.tr()}*", + value: model.branchDescription, + onChanged: (v) { + model.branchDescription = v; + }, + ), + 12.height, + TxtField( + hint: LocaleKeys.address.tr(), + isNeedClickAll: false, + maxLines: 5, + value: model.address, + onChanged: (v) { + model.address = v; + }, + ), + 12.height, + InkWell( + onTap: () { + navigateTo( + context, + PickLocationPage( + onPickAddress: (double latitude, double longitude, String address) { + model.latitude = latitude; + model.longitude = longitude; + model.address = address; + model.setState(ViewState.idle); + }, + ), + ); + }, + child: Container( + width: double.infinity, + height: 45, + decoration: BoxDecoration( + color: Colors.transparent, + border: Border.all(color: MyColors.darkPrimaryColor, width: 2), + borderRadius: BorderRadius.all(Radius.circular(8)), + ), + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + const Icon( + Icons.place_outlined, + size: 18, + color: MyColors.darkPrimaryColor, + ), + 8.width, + Text( + LocaleKeys.pickAddress.tr(), + style: const TextStyle( + color: MyColors.darkPrimaryColor, + ), + ), + const Icon( + Icons.place_outlined, + size: 18, + color: Colors.transparent, + ), + ], + ), + ), + ), + ], + ), + ], + ), + ), + ), + ), + SizedBox( + width: double.infinity, + child: Padding( + padding: const EdgeInsets.only(left: 20, right: 20, bottom: 20), + child: ShowFillButton( + title: branchData != null ? (branchData!.id == null ? LocaleKeys.createBranch.tr() : LocaleKeys.updateBranch.tr()) : LocaleKeys.createBranch.tr(), + onPressed: () async { + + if (branchData == null) { + Utils.showLoading(context); + MResponse res = await model.createBranch(model.branchName, model.branchDescription,model. cityId.toString(), model.address, model.latitude.toString(), model.longitude.toString()); + Utils.hideLoading(context); + if (res.messageStatus == 1) { + Utils.showToast(LocaleKeys.branch_created.tr()); + pop(context); + model.getBranchAndServices(); + } else { + Utils.showToast(res.message ?? ""); + } + } else { + Utils.showLoading(context); + MResponse res = + await model.updateBranch(branchData!.id ?? 0, model.branchName, model.branchDescription, model.cityId.toString(), model.address, model.latitude.toString(), model.longitude.toString()); + Utils.hideLoading(context); + if (res.messageStatus == 1) { + Utils.showToast(LocaleKeys.branch_updated.tr()); + pop(context); + pop(context); + model.getBranchAndServices(); + } else { + Utils.showToast(res.message ?? ""); + } + } + }, + ), + ), + ), + ], + ), + ); + }), + ); + } +} diff --git a/lib/views/settings/create_services_page.dart b/lib/views/settings/create_services_page.dart new file mode 100644 index 0000000..2d824f4 --- /dev/null +++ b/lib/views/settings/create_services_page.dart @@ -0,0 +1,209 @@ +import 'package:easy_localization/easy_localization.dart'; + +import 'package:flutter/material.dart'; + +import 'package:car_provider_app/generated/locale_keys.g.dart'; + +import 'package:car_provider_app/view_models/branch_view_model.dart'; +import 'package:mc_common_app/extensions/int_extensions.dart'; +import 'package:mc_common_app/extensions/string_extensions.dart'; +import 'package:mc_common_app/models/m_response.dart'; +import 'package:mc_common_app/models/model/branch2.dart'; +import 'package:mc_common_app/theme/colors.dart'; +import 'package:mc_common_app/utils/enums.dart'; +import 'package:mc_common_app/utils/navigator.dart'; +import 'package:mc_common_app/utils/utils.dart'; +import 'package:mc_common_app/widgets/button/show_fill_button.dart'; +import 'package:mc_common_app/widgets/common_widgets/app_bar.dart'; +import 'package:mc_common_app/widgets/dropdown/dropdow_field.dart'; +import 'package:mc_common_app/widgets/extensions/extensions_widget.dart'; + +import 'package:provider/provider.dart'; + +class CreateServicesPage extends StatelessWidget { + ServiceProviderBranch? serviceProviderBranch; + CreateServicesPage(this.serviceProviderBranch); + + @override + Widget build(BuildContext context) { + BranchVM branchVM = context.read(); + branchVM.getBranchAndServices(); + branchVM.fetchBranches(); + if (serviceProviderBranch != null) { + branchVM.branchId = serviceProviderBranch!.id ?? -1; + branchVM.branchValue = DropValue(branchVM.branchId, serviceProviderBranch!.branchName ?? "", ""); + print("llll1 ${branchVM.branchId} ${serviceProviderBranch!.branchName} ${branchVM.branchValue!.value}"); + if (branchVM.branchId != 1) branchVM.fetchBranchCategory(EasyLocalization.of(context)?.currentLocale?.countryCode ?? "SA"); + } + + return Scaffold( + appBar: CustomAppBar(title: LocaleKeys.defineServices.tr()), + body: SizedBox( + width: double.infinity, + height: double.infinity, + child: Consumer(builder: (context, model, _) { + return Column( + children: [ + Expanded( + child: SingleChildScrollView( + child: Padding( + padding: const EdgeInsets.all(12.0), + child: Column( + children: [ + model.branch != null + ? (model.branchValue != null && model.branchId != -1) + ? Text( + model.branchValue!.value ?? "", + style: const TextStyle( + fontSize: 12, + fontWeight: FontWeight.bold, + ), + ).toContainer( + padding: const EdgeInsets.only(left: 8, right: 8, bottom: 12, top: 12), + backgroundColor: MyColors.textFieldColor, + borderRadius: 0, + width: double.infinity, + ) + : DropdownField( + (DropValue value) { + // countryCode = value.subValue; + // countryId = value.id; + // fetchCites(); + model.branchId = value.id; + model.fetchBranchCategory(EasyLocalization.of(context)?.currentLocale?.countryCode ?? "SA"); + model.setState(ViewState.idle); + }, + list: model.countryDropListForService, + hint: LocaleKeys.selectBranch.tr(), + dropdownValue: model.branchValue, + ) + : const CircularProgressIndicator(), + 12.height, + (model.category != null) + ? DropdownField((DropValue value) { + // countryCode = value.subValue; + // countryId = value.id; + // fetchCites(); + model.categoryId = value.id; + model.fetchServicesByCategoryId(); + model.setState(ViewState.idle); + }, list: model.categoryDropList, hint: LocaleKeys.selectServiceCategory.tr()) + : model.branchId == -1 + ? Container() + : const CircularProgressIndicator(), + 12.height, + if ((model.categoryId != -1)) + model.services == null + ? const CircularProgressIndicator() + : ListView.separated( + itemBuilder: (context, index) { + return Padding( + padding: const EdgeInsets.all(8.0), + child: Row( + children: [ + Checkbox( + value: model.services!.data![index].isSelected, + onChanged: (v) { + model.services!.data![index].isSelected = v; + model.setState(ViewState.idle); + }, + ), + 12.width, + ((EasyLocalization.of(context)?.currentLocale?.countryCode == "SA" ? model.services!.data![index].descriptionN : model.services!.data![index].description) ?? + "") + .toText(fontSize: 12) + ], + ), + ); + }, + separatorBuilder: (context, index) { + return 1.height; + }, + itemCount: model.services!.data!.length, + physics: NeverScrollableScrollPhysics(), + shrinkWrap: true, + ) + ], + ), + ), + ), + ), + if (checkServicesSelection(model)) + Padding( + padding: const EdgeInsets.all(12.0), + child: ShowFillButton( + title: LocaleKeys.save.tr(), + maxWidth: double.infinity, + onPressed: () { + createService(context, model); + }, + ), + ), + ], + ); + }), + ), + ); + } + + bool checkServicesSelection(BranchVM model) { + bool isServiceSelected = false; + try { + for (var element in model.services!.data!) { + if (element.isSelected ?? false) isServiceSelected = true; + } + } catch (e) { + isServiceSelected = false; + } + + return isServiceSelected; + } + + createService(BuildContext context, BranchVM model) async { + List> map = []; + if (serviceProviderBranch != null && model.branchId != -1) { + for (int i = 0; i < model.services!.data!.length; i++) { + if (model.services!.data![i].isSelected ?? false) { + var postParams = { + // "id": services!.data![i].id, + "providerBranchID": model.branchId, + "serviceID": model.services!.data![i].id, + "isAllowAppointment": true, + "isActive": true + }; + map.add(postParams); + } + } + Utils.showLoading(context); + MResponse mResponse = await model.createService(map); + Utils.hideLoading(context); + + if (serviceProviderBranch != null) { + Utils.showToast(mResponse.message ?? ""); + if (mResponse.messageStatus != 2) { + pop(context); + pop(context); + model.getBranchAndServices(); + } + } + } else { + for (int i = 0; i < model.services!.data!.length; i++) { + if (model.services!.data![i].isSelected ?? false) { + var postParams = { + // "id": services!.data![i].id, + "providerBranchID": model.branchId, + "serviceID": model.services!.data![i].id, + "isAllowAppointment": true, + "isActive": true + }; + map.add(postParams); + } + } + Utils.showLoading(context); + MResponse mResponse = await model.createService(map); + model.getBranchAndServices(); + Utils.hideLoading(context); + Utils.showToast(mResponse.message ?? ""); + } + } +} diff --git a/lib/pages/settings/dealership_page.dart b/lib/views/settings/dealership_page.dart similarity index 55% rename from lib/pages/settings/dealership_page.dart rename to lib/views/settings/dealership_page.dart index f19b247..e8dc7b4 100644 --- a/lib/pages/settings/dealership_page.dart +++ b/lib/views/settings/dealership_page.dart @@ -1,22 +1,20 @@ -import 'package:car_provider_app/config/routes.dart'; -import 'package:car_provider_app/extensions/string_extensions.dart'; +import 'package:car_provider_app/config/provider_routes.dart'; import 'package:car_provider_app/generated/locale_keys.g.dart'; -import 'package:car_provider_app/models/m_response.dart'; -import 'package:car_provider_app/utils/navigator.dart'; -import 'package:car_provider_app/widgets/app_bar.dart'; import 'package:easy_localization/src/public_ext.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; - -import '../../api/client/branch_api_client.dart'; -import '../../classes/colors.dart'; -import '../../models/profile/branch2.dart'; +import 'package:mc_common_app/classes/consts.dart'; +import 'package:mc_common_app/config/routes.dart'; +import 'package:mc_common_app/extensions/string_extensions.dart'; +import 'package:mc_common_app/theme/colors.dart'; +import 'package:mc_common_app/utils/navigator.dart'; +import 'package:mc_common_app/widgets/common_widgets/app_bar.dart'; class DealershipPage extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( - appBar: appBar(context, title: LocaleKeys.dealershipSettings.tr()), + appBar: CustomAppBar(title: LocaleKeys.dealershipSettings.tr()), body: Container( width: double.infinity, height: double.infinity, @@ -24,47 +22,47 @@ class DealershipPage extends StatelessWidget { children: [ ListTile( leading: SvgPicture.asset( - "assets/icons/ic_settings.svg", + MyAssets.icSettings, color: MyColors.darkPrimaryColor, ), - title: LocaleKeys.general.tr().toText12(), + title: LocaleKeys.general.tr().toText(fontSize: 12), ), ListTile( leading: SvgPicture.asset( - "assets/icons/ic_branchs.svg", + MyAssets.icBranches, color: MyColors.darkPrimaryColor, ), - title: LocaleKeys.defineBranches.tr().toText12(), + title: LocaleKeys.defineBranches.tr().toText(fontSize: 12), onTap: () { - navigateWithName(context, AppRoutes.branchList); + navigateWithName(context, ProviderAppRoutes.branchList); }, ), ListTile( leading: SvgPicture.asset( - "assets/icons/ic_services.svg", + MyAssets.icServices, color: MyColors.darkPrimaryColor, ), - title: LocaleKeys.defineServices.tr().toText12(), + title: LocaleKeys.defineServices.tr().toText(fontSize: 12), onTap: () { - navigateWithName(context, AppRoutes.createServices); + navigateWithName(context, ProviderAppRoutes.createServices); }, ), ListTile( leading: SvgPicture.asset( - "assets/icons/ic_provider.svg", + MyAssets.icProvider, color: MyColors.darkPrimaryColor, ), - title: LocaleKeys.defineProviders.tr().toText12(), + title: LocaleKeys.defineProviders.tr().toText(fontSize: 12), onTap: () async { // Branch2 mResponse = await BranchApiClent().getBranchAndServices(); }, ), ListTile( leading: SvgPicture.asset( - "assets/icons/ic_close_account.svg", + MyAssets.icCloseAccount, color: MyColors.darkPrimaryColor, ), - title: LocaleKeys.closeAccount.tr().toText12(), + title: LocaleKeys.closeAccount.tr().toText(fontSize: 12), ), ], ), diff --git a/lib/pages/settings/define_license_page.dart b/lib/views/settings/define_license_page.dart similarity index 55% rename from lib/pages/settings/define_license_page.dart rename to lib/views/settings/define_license_page.dart index a716cb5..b950aa8 100644 --- a/lib/pages/settings/define_license_page.dart +++ b/lib/views/settings/define_license_page.dart @@ -1,23 +1,27 @@ import 'dart:convert'; import 'dart:io'; -import 'package:car_provider_app/api/client/profile_api_client.dart'; -import 'package:car_provider_app/classes/app_state.dart'; -import 'package:car_provider_app/classes/utils.dart'; -import 'package:car_provider_app/extensions/string_extensions.dart'; -import 'package:car_provider_app/models/profile/document.dart'; -import 'package:car_provider_app/utils/utils.dart'; -import 'package:car_provider_app/widgets/button/show_fill_button.dart'; -import 'package:car_provider_app/widgets/txt_field.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:file_picker/file_picker.dart'; import 'package:flutter/material.dart'; -import 'package:car_provider_app/extensions/int_extensions.dart'; -import 'package:sizer/sizer.dart'; -import '../../classes/colors.dart'; -import '../../generated/locale_keys.g.dart'; -import '../../widgets/app_bar.dart'; +import 'package:car_provider_app/view_models/branch_view_model.dart'; +import 'package:mc_common_app/classes/app_state.dart'; +import 'package:mc_common_app/extensions/int_extensions.dart'; +import 'package:mc_common_app/extensions/string_extensions.dart'; +import 'package:mc_common_app/generated/locale_keys.g.dart'; +import 'package:mc_common_app/models/m_response.dart'; +import 'package:mc_common_app/theme/colors.dart'; +import 'package:mc_common_app/utils/AppPermissionHandler.dart'; +import 'package:mc_common_app/utils/enums.dart'; +import 'package:mc_common_app/utils/utils.dart'; +import 'package:mc_common_app/widgets/button/show_fill_button.dart'; +import 'package:mc_common_app/widgets/common_widgets/app_bar.dart'; + +import 'package:mc_common_app/widgets/txt_field.dart'; + +import 'package:permission_handler/permission_handler.dart'; +import 'package:provider/provider.dart'; class DefineLicensePage extends StatefulWidget { @override @@ -25,31 +29,25 @@ class DefineLicensePage extends StatefulWidget { } class _DefineLicensePageState extends State { - Document? document; + late BranchVM branchVM; @override void initState() { // TODO: implement initState super.initState(); - getDocuments(); - } - - getDocuments() async { - document = await ProfileApiClent().getServiceProviderDocument(AppState().getUser.data!.userInfo!.providerId ?? 0); - setState(() {}); + branchVM = Provider.of(context, listen: false); + branchVM.getServiceProviderDocument(AppState().getUser.data!.userInfo!.providerId ?? 0); } @override Widget build(BuildContext context) { return Scaffold( - appBar: appBar( - context, + appBar: CustomAppBar( title: LocaleKeys.defineLicences.tr(), + isRemoveBackButton: false, ), - body: Container( - width: double.infinity, - height: double.infinity, - child: Column( + body: Consumer(builder: (_, model, __) { + return Column( children: [ Expanded( child: SingleChildScrollView( @@ -61,7 +59,7 @@ class _DefineLicensePageState extends State { // 12.height, // LocaleKeys.defineLicenese.tr().toText14(color: MyColors.lightTextColor), 20.height, - showWidget(), + showWidget(model), ], ), ), @@ -74,26 +72,26 @@ class _DefineLicensePageState extends State { maxWidth: double.infinity, onPressed: () { if (AppState().getUser.data!.userInfo!.roleId == 5) { - if (validation()) { - updateDocument(); + if (validation(model)) { + updateDocument(model); } else { Utils.showToast("All document's are mandatory for Dealership Provider"); } } else { - updateDocument(); + updateDocument(model); } }, ), ), ], - ), - ), + ); + }), ); } - validation() { + validation(BranchVM model) { bool valid = true; - document!.data!.forEach((element) { + model.document!.data!.forEach((element) { if (element.documentUrl == null) { valid = false; } @@ -101,55 +99,56 @@ class _DefineLicensePageState extends State { return valid; } - updateDocument() { + updateDocument(BranchVM model) async { Utils.showLoading(context); - ProfileApiClent().serviceProviderDocumentsUpdate(document!.data).then((value) { - Utils.hideLoading(context); - if (value.messageStatus == 1) { - Utils.showToast("Documents uploaded successfully"); - } else { - Utils.showToast(value.message ?? ""); - } - }); + MResponse res = await model.updateDocument(model.document!.data); + Utils.hideLoading(context); + if (res.messageStatus == 1) { + Utils.showToast("Documents uploaded successfully"); + } else { + Utils.showToast(res.message ?? ""); + } } - Widget showWidget() { - if (document != null) { - return document!.data!.length == 0 - ? Text(LocaleKeys.somethingWrong.tr()) + Widget showWidget(BranchVM model) { + if (model.state == ViewState.idle) { + return model.document!.data!.isEmpty + ? Text("LocaleKeys.somethingWrong.tr()") : ListView.separated( itemBuilder: (context, index) { return Column( crossAxisAlignment: CrossAxisAlignment.center, children: [ Text( - document?.data![index].documentName ?? "", - style: TextStyle( + model.document?.data![index].documentName ?? "", + style: const TextStyle( fontSize: 16, ), ), Padding( padding: const EdgeInsets.only(left: 20, right: 20, top: 4, bottom: 8), - child: LocaleKeys.enter_licence_detail.tr().toText14(color: MyColors.lightTextColor, textAlign: TextAlign.center), + child: LocaleKeys.enter_licence_detail.tr().toText(fontSize: 14, color: MyColors.lightTextColor, textAlign: TextAlign.center), ), TxtField( hint: LocaleKeys.description.tr(), maxLines: 3, isBackgroundEnabled: true, ), - if (((document?.data![index].documentUrl ?? "").toString().isNotEmpty)) + if (((model.document?.data![index].documentUrl ?? "").toString().isNotEmpty)) Column( children: [ 8.height, - (document?.data![index].documentUrl ?? "").toString().toText14( + (model.document?.data![index].documentUrl ?? "").toString().toText( + fontSize: 14, color: MyColors.lightTextColor, ), ], ), 8.height, InkWell( - onTap: () { - selectFile(index); + onTap: () async { + bool isPermissionsAvailable = await requestPermissionGranted(context, Permission.storage); + if (isPermissionsAvailable) model.selectFile(index); }, child: Container( width: double.infinity, @@ -157,13 +156,13 @@ class _DefineLicensePageState extends State { decoration: BoxDecoration( color: Colors.transparent, border: Border.all(color: MyColors.greyACColor, width: 2), - borderRadius: BorderRadius.all(Radius.circular(0)), + borderRadius: const BorderRadius.all(Radius.circular(0)), ), child: Row( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, children: [ - Icon( + const Icon( Icons.attach_file, size: 18, color: MyColors.darkPrimaryColor, @@ -171,11 +170,11 @@ class _DefineLicensePageState extends State { 8.width, Text( LocaleKeys.attachFile.tr(), - style: TextStyle( + style: const TextStyle( color: MyColors.darkPrimaryColor, ), ), - Icon( + const Icon( Icons.attach_file, size: 18, color: Colors.transparent, @@ -190,35 +189,35 @@ class _DefineLicensePageState extends State { separatorBuilder: (context, index) { return 20.height; }, - itemCount: document!.data!.length, - physics: NeverScrollableScrollPhysics(), + itemCount: model.document!.data!.length, + physics: const NeverScrollableScrollPhysics(), shrinkWrap: true, ); } else { - return Center( + return const Center( child: CircularProgressIndicator(), ); } } - selectFile(int index) async { - FilePickerResult? result = await FilePicker.platform.pickFiles(type: FileType.custom, allowedExtensions: ['png', 'pdf', 'jpeg']); - - if (result != null) { - File file = File(result.files.single.path ?? ""); - int sizeInBytes = file.lengthSync(); - // double sizeInMb = sizeInBytes / (1024 * 1024); - if (sizeInBytes > 1000) { - Utils.showToast("File is larger then 1KB"); - } else { - document!.data![index].document = convertFileToBase64(file); - document!.data![index].fileExt = checkFileExt(file.path); - setState(() { - document!.data![index].documentUrl = result.files.single.path ?? ""; - }); - } - } else { - // User canceled the picker - } - } +// selectFile(int index) async { +// FilePickerResult? result = await FilePicker.platform.pickFiles(type: FileType.custom, allowedExtensions: ['png', 'pdf', 'jpeg']); +// +// if (result != null) { +// File file = File(result.files.single.path ?? ""); +// int sizeInBytes = file.lengthSync(); +// // double sizeInMb = sizeInBytes / (1024 * 1024); +// if (sizeInBytes > 1000) { +// Utils.showToast("File is larger then 1KB"); +// } else { +// document!.data![index].document = Utils.convertFileToBase64(file); +// document!.data![index].fileExt = Utils.checkFileExt(file.path); +// setState(() { +// document!.data![index].documentUrl = result.files.single.path ?? ""; +// }); +// } +// } else { +// // User canceled the picker +// } +// } } diff --git a/lib/widgets/app_bar.dart b/lib/widgets/app_bar.dart deleted file mode 100644 index fe602a1..0000000 --- a/lib/widgets/app_bar.dart +++ /dev/null @@ -1,39 +0,0 @@ -import 'package:car_provider_app/theme/colors.dart'; -import 'package:car_provider_app/extensions/string_extensions.dart'; -import 'package:car_provider_app/extensions/int_extensions.dart'; -import 'package:flutter/material.dart'; -import 'package:sizer/sizer.dart'; - -AppBar appBar( - BuildContext context, { - Color? backgroundColor, - double? elevation, - String? title, - Color? titleColor, - bool? isTitleCenter, - Color? backIconColor, - List? actions, - bool isRemoveBackButton = false, - Widget? leading, - double? leadingWidth, - VoidCallback? onTap, -}) { - return AppBar( - backgroundColor: backgroundColor ?? appBackgroundColor, - elevation: elevation ?? 0, - centerTitle: isTitleCenter ?? true, - leadingWidth: leadingWidth, - leading: isRemoveBackButton - ? null - : leading ?? - IconButton( - icon: const Icon(Icons.arrow_back_ios, color: Colors.black), - onPressed: onTap ?? () => Navigator.of(context).pop(), - ), - iconTheme: IconThemeData( - color: backIconColor ?? Colors.black, //change your color here - ), - actions: actions, - title: (title ?? "").toText(fontSize: 20, isBold: true), - ); -} diff --git a/lib/widgets/blurry_container.dart b/lib/widgets/blurry_container.dart deleted file mode 100644 index 8bebc4a..0000000 --- a/lib/widgets/blurry_container.dart +++ /dev/null @@ -1,62 +0,0 @@ -import 'dart:ui'; - -import 'package:flutter/material.dart'; - -const kDemoText = Center( - child: Text( - '', - style: TextStyle( - fontSize: 25, - color: Colors.white, - letterSpacing: 2, - ), - textAlign: TextAlign.center, - ), -); -const double kBlur = 1.0; -const EdgeInsetsGeometry kDefaultPadding = EdgeInsets.all(16); -const Color kDefaultColor = Colors.transparent; -const BorderRadius kBorderRadius = BorderRadius.all(Radius.circular(20)); -const double kColorOpacity = 0.0; - -class BlurryContainer extends StatelessWidget { - final Widget child; - final double blur; - final double? height, width; - final EdgeInsetsGeometry padding; - final Color bgColor; - - final BorderRadius borderRadius; - - //final double colorOpacity; - - BlurryContainer({ - this.child = kDemoText, - this.blur = 5, - required this.height, - required this.width, - this.padding = kDefaultPadding, - this.bgColor = kDefaultColor, - this.borderRadius = kBorderRadius, - //this.colorOpacity = kColorOpacity, - }); - - @override - Widget build(BuildContext context) { - return ClipRRect( - borderRadius: borderRadius, - child: BackdropFilter( - filter: ImageFilter.blur(sigmaX: blur, sigmaY: blur), - child: Container( - height: height!, - width: width!, - padding: padding, - color: bgColor == Colors.transparent - ? bgColor - : bgColor.withOpacity(0.5), - child: child, - ), - ), - ); - } -} diff --git a/lib/widgets/button/show_circular_button.dart b/lib/widgets/button/show_circular_button.dart deleted file mode 100644 index fd4e781..0000000 --- a/lib/widgets/button/show_circular_button.dart +++ /dev/null @@ -1,23 +0,0 @@ -import 'package:car_provider_app/utils/utils.dart'; -import 'package:flutter/material.dart'; - -class ShowCircularButton extends StatelessWidget { - VoidCallback onPressed; - IconData? iconData; - ShowCircularButton({this.iconData,required this.onPressed}); - @override - Widget build(BuildContext context) { - return Card( - shape: cardRadius(1000), - color: Colors.black.withOpacity(0.2), - margin: EdgeInsets.all(12), - child: IconButton( - onPressed: onPressed, - icon: Icon( - iconData?? Icons.amp_stories_outlined, - color: Colors.white, - ), - ), - ); - } -} diff --git a/lib/widgets/button/show_fill_button.dart b/lib/widgets/button/show_fill_button.dart deleted file mode 100644 index 1d44c54..0000000 --- a/lib/widgets/button/show_fill_button.dart +++ /dev/null @@ -1,70 +0,0 @@ -import 'package:car_provider_app/extensions/string_extensions.dart'; -import 'package:car_provider_app/theme/colors.dart'; -import 'package:flutter/material.dart'; - -import '../../classes/colors.dart'; - -class ShowFillButton extends StatelessWidget { - String title; - VoidCallback onPressed; - Color txtColor; - double elevation, radius, maxWidth, maxHeight, fontSize, horizontalPadding, horizontalMargin, verticalMargin; - bool isFlatButton, isBold; - - ShowFillButton({ - required this.title, - required this.onPressed, - this.txtColor = Colors.white, - this.elevation = 0, - this.radius = 0, - this.maxWidth = 88, - this.maxHeight = 45, - this.fontSize = 16, - this.horizontalPadding = 16, - this.isFlatButton = false, - this.isBold = true, - this.horizontalMargin = 0, - this.verticalMargin = 0, - }); - - @override - Widget build(BuildContext context) { - return isFlatButton - ? Container( - child: showButton(), - height: maxHeight, - padding: const EdgeInsets.only( - left: 20, - right: 20, - ), - ) - : ConstrainedBox( - constraints: BoxConstraints( - minHeight: maxHeight, - minWidth: maxWidth, - maxHeight: maxHeight, - maxWidth: maxWidth, - ), - child: showButton(), - ); - } - - Widget showButton() { - return Container( - // decoration: isFlatButton ? null : MyColors.gradientButton, - color:isFlatButton ? null : MyColors.darkPrimaryColor, - margin: EdgeInsets.symmetric(horizontal: horizontalMargin, vertical: verticalMargin), - child: MaterialButton( - onPressed: onPressed, - shape: new RoundedRectangleBorder( - borderRadius: new BorderRadius.circular(radius), - ), - child: title.toText( - fontSize: fontSize, - isBold: isBold, - color: txtColor, - ), - ), - ); - } -} diff --git a/lib/widgets/button/show_image_button.dart b/lib/widgets/button/show_image_button.dart deleted file mode 100644 index 565292f..0000000 --- a/lib/widgets/button/show_image_button.dart +++ /dev/null @@ -1,48 +0,0 @@ -import 'package:car_provider_app/classes/colors.dart'; -import 'package:car_provider_app/theme/colors.dart'; -import 'package:car_provider_app/utils/utils.dart'; -import 'package:flutter/material.dart'; -import 'package:car_provider_app/extensions/string_extensions.dart'; -import 'package:car_provider_app/extensions/int_extensions.dart'; -import 'package:flutter_svg/flutter_svg.dart'; - -class ShowImageButton extends StatelessWidget { - String icon, title; - VoidCallback onClick; - - ShowImageButton({required this.icon, required this.title, required this.onClick}); - - @override - Widget build(BuildContext context) { - return InkWell( - onTap: onClick, - child: Container( - width: double.infinity, - child: Column( - children: [ - Container( - width: double.infinity, - height: 120, - child: Card( - color: MyColors.darkPrimaryColor, - shape: RoundedRectangleBorder( - side: BorderSide(color: Colors.transparent, width: 1), - borderRadius: BorderRadius.circular(8), - ), - child: Padding( - padding: EdgeInsets.all(26), - child: SvgPicture.asset( - icon, - color: Colors.white, - ), - ), - ), - ), - 6.height, - title.toText(color: Colors.black, isBold: true, fontSize: 16), - ], - ), - ), - ); - } -} diff --git a/lib/widgets/count_down_timer.dart b/lib/widgets/count_down_timer.dart deleted file mode 100644 index 3817e3c..0000000 --- a/lib/widgets/count_down_timer.dart +++ /dev/null @@ -1,108 +0,0 @@ -import 'package:flutter/material.dart'; - -class CountDownTimer extends StatefulWidget { - const CountDownTimer({ - Key? key, - int? secondsRemaining, - this.countDownTimerStyle, - this.whenTimeExpires, - this.countDownFormatter, - }) - : secondsRemaining = secondsRemaining, - super(key: key); - - final int? secondsRemaining; - final Function? whenTimeExpires; - final Function? countDownFormatter; - final TextStyle ?countDownTimerStyle; - - State createState() => new _CountDownTimerState(); -} - -class _CountDownTimerState extends State - with TickerProviderStateMixin { - late AnimationController _controller; - late Duration duration; - - String get timerDisplayString { - Duration duration = _controller.duration! * _controller.value; - return widget.countDownFormatter != null - ? widget.countDownFormatter!(duration.inSeconds) - : formatHHMMSS(duration.inSeconds); - // In case user doesn't provide formatter use the default one - // for that create a method which will be called formatHHMMSS or whatever you like - } - - @override - void initState() { - super.initState(); - duration = new Duration(seconds: widget.secondsRemaining ?? 0); - _controller = new AnimationController( - vsync: this, - duration: duration, - ); - _controller.reverse(from: widget.secondsRemaining!.toDouble()); - _controller.addStatusListener((status) { - if (status == AnimationStatus.completed || status == AnimationStatus.dismissed) { - widget.whenTimeExpires!(); - } - }); - } - - @override - void didUpdateWidget(CountDownTimer oldWidget) { - if (widget.secondsRemaining != oldWidget.secondsRemaining) { - setState(() { - duration = new Duration(seconds: widget.secondsRemaining ?? 0); - _controller.dispose(); - _controller = new AnimationController( - vsync: this, - duration: duration, - ); - _controller.reverse(from: widget.secondsRemaining?.toDouble()); - _controller.addStatusListener((status) { - if (status == AnimationStatus.completed) { - widget.whenTimeExpires!(); - } else if (status == AnimationStatus.dismissed) { - print("Animation Complete"); - } - }); - }); - } - } - - @override - void dispose() { - _controller.dispose(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return new Center( - child: AnimatedBuilder( - animation: _controller, - builder: (_, Widget? child) { - return Text( - timerDisplayString ??"", - style: widget.countDownTimerStyle, - ); - }),); - } -} - -String formatHHMMSS(int seconds) { - int hours = (seconds / 3600).truncate(); - seconds = (seconds % 3600).truncate(); - int minutes = (seconds / 60).truncate(); - - String hoursStr = (hours).toString().padLeft(2, '0'); - String minutesStr = (minutes).toString().padLeft(2, '0'); - String secondsStr = (seconds % 60).toString().padLeft(2, '0'); - - if (hours == 0) { - return "$minutesStr:$secondsStr"; - } - - return "$hoursStr:$minutesStr:$secondsStr"; -} \ No newline at end of file diff --git a/lib/widgets/dialog/dialogs.dart b/lib/widgets/dialog/dialogs.dart deleted file mode 100644 index 9a5a822..0000000 --- a/lib/widgets/dialog/dialogs.dart +++ /dev/null @@ -1,16 +0,0 @@ -import 'package:flutter/material.dart'; - -void showMDialog( - context, { - Widget? child, -}) async { - return showDialog( - context: context, - barrierDismissible: true, - builder: (context) { - return Dialog( - child: child, - ); - }, - ); -} diff --git a/lib/widgets/dialog/message_dialog.dart b/lib/widgets/dialog/message_dialog.dart deleted file mode 100644 index 615464c..0000000 --- a/lib/widgets/dialog/message_dialog.dart +++ /dev/null @@ -1,37 +0,0 @@ -import 'package:car_provider_app/theme/colors.dart'; -import 'package:car_provider_app/utils/navigator.dart'; -import 'package:car_provider_app/utils/utils.dart'; -import 'package:car_provider_app/widgets/button/show_fill_button.dart'; -import 'package:car_provider_app/extensions/int_extensions.dart'; -import 'package:car_provider_app/extensions/string_extensions.dart'; -import 'package:flutter/material.dart'; - -class MessageDialog extends StatelessWidget { - String? title, buttonTitle; - VoidCallback? onClick; - - MessageDialog({this.title, this.buttonTitle, this.onClick}); - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.white, - padding: EdgeInsets.all(30), - child: Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - (title ?? "message").toText24(), - 40.height, - ShowFillButton( - title: buttonTitle ?? "Continue", - maxWidth: double.infinity, - onPressed: () { - onClick!(); - }, - ) - ], - ), - ); - } -} diff --git a/lib/widgets/dialog/otp_dialog.dart b/lib/widgets/dialog/otp_dialog.dart deleted file mode 100644 index b5c0146..0000000 --- a/lib/widgets/dialog/otp_dialog.dart +++ /dev/null @@ -1,129 +0,0 @@ -import 'package:car_provider_app/classes/colors.dart'; -import 'package:car_provider_app/theme/colors.dart'; -import 'package:car_provider_app/utils/navigator.dart'; -import 'package:car_provider_app/utils/utils.dart'; -import 'package:car_provider_app/widgets/button/show_fill_button.dart'; -import 'package:car_provider_app/extensions/string_extensions.dart'; -import 'package:car_provider_app/extensions/int_extensions.dart'; -import 'package:easy_localization/easy_localization.dart'; -import 'package:flutter/material.dart'; - -import '../../generated/locale_keys.g.dart'; -import '../count_down_timer.dart'; -import '../otp_widget.dart'; - -class OtpDialog extends StatefulWidget { - String? userName; - Function(String) onClick; - - OtpDialog({required this.onClick, this.userName}); - - @override - State createState() => _OtpDialogState(); -} - -class _OtpDialogState extends State { - String code = ""; - bool hasTimerStopped = false; - - final TextEditingController _pinPutController = TextEditingController(); - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.white, - padding: EdgeInsets.all(24), - width: double.infinity, - child: Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.center, - mainAxisAlignment: MainAxisAlignment.center, - children: [ - LocaleKeys.insert_otp_code.tr().toText24(), - 8.height, - LocaleKeys.type_code.tr().toText12(color: MyColors.textColor), - if (widget.userName != null) (widget.userName ?? "").toText12(color: MyColors.darkPrimaryColor), - 20.height, - Center( - child: OTPWidget( - autoFocus: true, - controller: _pinPutController, - defaultBorderColor: const Color(0xffD8D8D8), - maxLength: 4, - onTextChanged: (text) {}, - pinBoxColor: Colors.white, - onDone: (code) => _onOtpCallBack(code, null), - textBorderColor: MyColors.darkPrimaryColor, - pinBoxWidth: 48, - pinBoxHeight: 48, - pinTextStyle: const TextStyle(fontSize: 24.0, color: MyColors.darkTextColor), - pinTextAnimatedSwitcherTransition: ProvidedPinBoxTextAnimation.scalingTransition, - pinTextAnimatedSwitcherDuration: const Duration(milliseconds: 300), - pinBoxRadius: 0, - keyboardType: TextInputType.number, - ), - ), - 40.height, - ShowFillButton( - title: LocaleKeys.check_code.tr(), - maxWidth: double.infinity, - onPressed: () { - widget.onClick(code); - }, - ), - if (!hasTimerStopped) - Padding( - padding: const EdgeInsets.all(12.0), - child: Row( - crossAxisAlignment: CrossAxisAlignment.center, - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Text(LocaleKeys.time_will_expire.tr() + " "), - CountDownTimer( - secondsRemaining: 60, - whenTimeExpires: () { - setState(() { - hasTimerStopped = true; - }); - }, - countDownTimerStyle: TextStyle( - color: MyColors.darkPrimaryColor, - height: 1.2, - ), - ), - Text(" " + LocaleKeys.sec.tr()), - ], - ), - ), - if (hasTimerStopped) - InkWell( - onTap: () { - setState(() { - hasTimerStopped = false; - }); - }, - child: Padding( - padding: const EdgeInsets.all(12.0), - child: Text( - LocaleKeys.resend_code.tr(), - style: const TextStyle( - decoration: TextDecoration.underline, - fontWeight: FontWeight.bold, - color: MyColors.darkPrimaryColor, - ), - ), - ), - ), - - ], - ), - ); - } - - _onOtpCallBack(String otpCode, bool? isAutofill) { - if (otpCode.length == 4) { - // onSuccess(otpCode); - code = otpCode; - } - } -} diff --git a/lib/widgets/dragable_sheet.dart b/lib/widgets/dragable_sheet.dart deleted file mode 100644 index 4d91118..0000000 --- a/lib/widgets/dragable_sheet.dart +++ /dev/null @@ -1,26 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -showDraggableDialog(BuildContext context, Widget child) { - showGeneralDialog( - barrierLabel: "Label", - barrierDismissible: false, - barrierColor: Colors.black.withOpacity(0.2), - transitionDuration: Duration(milliseconds: 200), - context: context, - pageBuilder: (context, anim1, anim2) { - return Dismissible( - direction: DismissDirection.vertical, - key: const Key('key'), - onDismissed: (_) => Navigator.of(context).pop(), - child: child, - ); - }, - transitionBuilder: (context, anim1, anim2, child) { - return SlideTransition( - position: Tween(begin: Offset(0, 1), end: Offset(0, 0)).animate(anim1), - child: child, - ); - }, - ); -} diff --git a/lib/widgets/dropdown/dropdow_field.dart b/lib/widgets/dropdown/dropdow_field.dart deleted file mode 100644 index 90b1ad3..0000000 --- a/lib/widgets/dropdown/dropdow_field.dart +++ /dev/null @@ -1,83 +0,0 @@ -import 'package:car_provider_app/classes/colors.dart'; -import 'package:car_provider_app/theme/colors.dart'; -import 'package:car_provider_app/utils/utils.dart'; -import 'package:car_provider_app/widgets/extensions/string_extensions.dart'; -import 'package:flutter/material.dart'; - -class DropValue { - int id; - String value; - String subValue; - - DropValue(this.id, this.value, this.subValue); - - bool operator ==(o) => o is DropValue && o.value == value && o.id == id; -} - -class DropdownField extends StatefulWidget { - String? hint; - List? list; - DropValue? dropdownValue; - Function(DropValue) onSelect; - - DropdownField(this.onSelect, {this.hint, this.list, this.dropdownValue}); - - @override - State createState() => _DropdownFieldState(); -} - -class _DropdownFieldState extends State { - DropValue? dropdownValue; - List defaultV = [ - new DropValue(1, "One", ""), - new DropValue(2, "Two", ""), - ]; - - @override - void initState() { - super.initState(); - dropdownValue = widget.dropdownValue; - } - - @override - Widget build(BuildContext context) { - return Container( - decoration: containerColorRadiusBorderWidth( - MyColors.white, - 0, - MyColors.darkPrimaryColor, - 2, - ), - margin: EdgeInsets.all(0), - padding: EdgeInsets.only(left: 8, right: 8), - child: DropdownButton( - value: dropdownValue??null, - icon: const Icon(Icons.keyboard_arrow_down_sharp), - elevation: 16, - iconSize: 16, - iconEnabledColor: borderColor, - iconDisabledColor: borderColor, - isExpanded: true, - style: const TextStyle(color: Colors.black, fontWeight: FontWeight.w600), - hint: (widget.hint ?? "").toText12(color: borderColor), - underline: Container( - height: 0, - ), - onChanged: (DropValue? newValue) { - setState(() { - dropdownValue = newValue!; - widget.onSelect(newValue); - }); - }, - items: (widget.list ?? defaultV).map>( - (DropValue value) { - return DropdownMenuItem( - value: value, - child: value.value.toText12(), - ); - }, - ).toList(), - ), - ); - } -} diff --git a/lib/widgets/dropdown/dropdown_text.dart b/lib/widgets/dropdown/dropdown_text.dart deleted file mode 100644 index 01d1c1a..0000000 --- a/lib/widgets/dropdown/dropdown_text.dart +++ /dev/null @@ -1,29 +0,0 @@ -import 'package:car_provider_app/config/constants.dart'; -import 'package:car_provider_app/theme/colors.dart'; -import 'package:car_provider_app/widgets/extensions/int_extensions.dart'; -import 'package:car_provider_app/widgets/extensions/string_extensions.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_svg/flutter_svg.dart'; - -class DropDownText extends StatelessWidget { - String title; - - DropDownText(this.title); - - @override - Widget build(BuildContext context) { - return Row( - crossAxisAlignment: CrossAxisAlignment.center, - mainAxisAlignment: MainAxisAlignment.center, - children: [ - title.toText16(color: accentColor), - 16.height, - SvgPicture.asset( - svgIcons + "ic_arrow_down.svg", - width: 10, - height: 10, - ), - ], - ); - } -} diff --git a/lib/widgets/extensions/extensions_widget.dart b/lib/widgets/extensions/extensions_widget.dart deleted file mode 100644 index caaaba9..0000000 --- a/lib/widgets/extensions/extensions_widget.dart +++ /dev/null @@ -1,235 +0,0 @@ -import 'dart:math'; - -import 'package:flutter/material.dart'; - -extension ExtendedText on Widget { - showOverlay({double? width, double? height}){ - return Container( - width: width ?? double.infinity, - height: height ?? 60, - decoration: BoxDecoration( - gradient: LinearGradient(colors: [ - Colors.black.withOpacity(0.2), - Colors.black.withOpacity(0.1), - Colors.black.withOpacity(0.004), - ], begin: Alignment.topCenter, end: Alignment.bottomCenter, tileMode: TileMode.clamp), - ), - child: this, - ); - } -} - - - - - -extension ImageExt on Image { - Widget circular() { - return ClipRRect( - clipBehavior: Clip.hardEdge, - borderRadius: BorderRadius.circular(100), - child: this, - ); - } -} - -extension WidgetExt on Widget { - Widget toWidget() { - return this as Widget; - } - - Widget sized({double? width, double? height}) { - return SizedBox( - width: width, - height: height, - child: this, - ); - } - Widget inkWell({required VoidCallback onTap,double radius=0}){ - return InkWell( - child: Material(child: this,color: Colors.transparent,), - onTap: onTap, - ); - } - Widget sizeSq(double size) { - return SizedBox( - width: size, - height: size, - child: this, - ); - } - - Widget fillParent({double hFactor = 1, double? vFactor}) { - return FractionallySizedBox( - heightFactor: null, - widthFactor: hFactor, - child: this, - ); - } - - Widget margin( - {double top = 0, double bottom = 0, double left = 0, double right = 0}) { - var pad = - EdgeInsets.only(top: top, left: left, bottom: bottom, right: right); - try { - (this as dynamic).margin = pad; - } catch (err) { - return Padding( - padding: pad, - child: this, - ); - } - return this; - } - - Widget toClip({double r = 40}) { - return ClipRRect( - borderRadius: BorderRadius.all( - Radius.circular(r), - ), - clipBehavior: Clip.antiAlias, - child: this, - ); - } - - // Widget scrollable({Axis? direction, bool fadingEdge = true}) { - // var scrollview = SingleChildScrollView( - // child: this, - // controller: ScrollController(), - // scrollDirection: direction ?? Axis.vertical, - // ); - // return fadingEdge ? scrollview.fadingEdge() : scrollview; - // } - - Widget expand() { - return Expanded( - child: this, - ); - } - - Widget align(Alignment alignment) { - return Align( - alignment: alignment, - child: this, - ); - } - - Widget center() { - return Center( - child: this, - ); - } - - Widget padding(EdgeInsets padding) { - return Padding( - padding: padding, - child: this, - ); - } - - Widget paddingAll(double padding) { - return Padding( - padding: EdgeInsets.all(padding), - child: this, - ); - } - - // Widget onTap(VoidCallback onTap, {double corners = 0}) { - // return Clickable.widget(child: this, corners: corners, onTap: onTap); - // } - - Widget ignoreInteraction() { - return IgnorePointer( - child: this, - ); - } -} - -// extension xScrollView on ScrollView { -// Widget fadingEdge() => FadingEdgeScrollView.fromScrollView( -// child: this, -// gradientFractionOnEnd: 0.08, -// gradientFractionOnStart: 0.08, -// shouldDisposeScrollController: true, -// ); -// } -// -// extension x2ScrollView on SingleChildScrollView { -// Widget fadingEdge() => FadingEdgeScrollView.fromSingleChildScrollView( -// child: this, -// gradientFractionOnEnd: 0.08, -// gradientFractionOnStart: 0.08, -// shouldDisposeScrollController: true, -// ); -// } - -class Position { - final double x, y, w, h; - - Position(this.x, this.y, this.w, this.h); -} - -extension KeyExt on GlobalKey { - Position globalPosition() { - RenderBox box = currentContext!.findRenderObject() as RenderBox; - Offset xy = box.localToGlobal(Offset.zero); - Size wh = box.size; - return Position(xy.dx, xy.dy, wh.width, wh.height); - } -} - -extension StateExt on State { - reload({VoidCallback? b}) { - setState(b ?? () {}); - } -} - -// extension LocatiionExt on Location { -// LatLng toLatLng() { -// return LatLng(lat!, lng!); -// } -// } - -// extension xList on List { -// T randomItem() { -// final random = new Random(); -// var i = random.nextInt(this.length); -// return this[i]; -// } -// -// List append(List items) { -// this.addAll(items); -// return this; -// } -// -// bool isFirst(T item) => first == item; -// -// bool isLast(T item) => last == item; -// -// getOneByOne( -// {required int delayMillis, -// required Function(T) callback, VoidCallback? complete}) async { -// for (var i in this) { -// await delay(delayMillis); -// callback(i); -// } -// complete!(); -// } -// } - -extension xFuture on Future { - thenWithDelay(int millis, Function(T) thenBlock) { - then((value) { - Future.delayed(Duration(milliseconds: millis)) - .then((value) => thenBlock(value)); - }); - } -} - -extension xDouble on int { - Duration durationMillis() => Duration(milliseconds: this); - - Duration durationSec() => Duration(seconds: this); - - Duration durationHour() => Duration(hours: this); -} diff --git a/lib/widgets/extensions/int_extensions.dart b/lib/widgets/extensions/int_extensions.dart deleted file mode 100644 index 9b90b2f..0000000 --- a/lib/widgets/extensions/int_extensions.dart +++ /dev/null @@ -1,7 +0,0 @@ -import 'package:flutter/cupertino.dart'; - -extension IntExtensions on int { - Widget get height => SizedBox(height: toDouble()); - - Widget get width => SizedBox(width: toDouble()); -} diff --git a/lib/widgets/extensions/string_extensions.dart b/lib/widgets/extensions/string_extensions.dart deleted file mode 100644 index d10fe0b..0000000 --- a/lib/widgets/extensions/string_extensions.dart +++ /dev/null @@ -1,109 +0,0 @@ -import 'package:car_provider_app/theme/colors.dart'; -import 'package:flutter/cupertino.dart'; -import 'package:intl/intl.dart'; - -extension EmailValidator on String { - Widget get toWidget => Text(this); - - Widget toText10({Color? color, bool isBold = false}) => Text( - this, - style: TextStyle(fontSize: 10, fontWeight: isBold ? FontWeight.bold : FontWeight.w600, color: color ?? headingColor, letterSpacing: -0.4), - ); - - Widget toText11({Color? color, bool isUnderLine = false, bool isBold = false}) => Text( - this, - style: TextStyle( - fontSize: 11, - fontWeight: isBold ? FontWeight.bold : FontWeight.w600, - color: color ?? headingColor, - letterSpacing: -0.33, - decoration: isUnderLine ? TextDecoration.underline : null), - ); - - Widget toText12({Color? color, bool isUnderLine = false, bool isBold = false, bool isCenter = false, int maxLine = 0}) => Text( - this, - textAlign: isCenter ? TextAlign.center : null, - maxLines: (maxLine > 0) ? maxLine : null, - style: TextStyle( - fontSize: 12, - fontWeight: isBold ? FontWeight.bold : FontWeight.w600, - color: color ?? headingColor, - letterSpacing: -0.72, - decoration: isUnderLine ? TextDecoration.underline : null), - ); - - Widget toText13({Color? color, bool isUnderLine = false}) => Text( - this, - style: TextStyle(fontSize: 13, fontWeight: FontWeight.w600, color: color ?? headingColor, letterSpacing: -0.52, decoration: isUnderLine ? TextDecoration.underline : null), - ); - - Widget toText14({Color? color, bool isBold = false}) => Text( - this, - style: TextStyle(color: color ?? headingColor, fontSize: 14, letterSpacing: -0.48, fontWeight: isBold ? FontWeight.bold : FontWeight.w600), - ); - - Widget toText16({Color? color, bool isBold = false}) => Text( - this, - style: TextStyle(color: color ?? headingColor, fontSize: 16, letterSpacing: -0.64, fontWeight: isBold ? FontWeight.bold : FontWeight.w600), - ); - - Widget toText17({Color? color, bool isBold = false}) => Text( - this, - style: TextStyle(color: color ?? headingColor, fontSize: 17, letterSpacing: -0.68, fontWeight: isBold ? FontWeight.bold : FontWeight.w600), - ); - - Widget toText22({Color? color, bool isBold = false}) => Text( - this, - style: TextStyle(height: 1, color: color ?? headingColor, fontSize: 22, letterSpacing: -1.44, fontWeight: isBold ? FontWeight.bold : FontWeight.w600), - ); - - Widget toText24({Color? color, bool isBold = false}) => Text( - this, - style: TextStyle(height: 23 / 24, color: color ?? headingColor, fontSize: 24, letterSpacing: -1.44, fontWeight: isBold ? FontWeight.bold : FontWeight.w600), - ); - - Widget toText32({Color? color, bool isBold = false}) => Text( - this, - style: TextStyle(height: 32 / 32, color: color ?? headingColor, fontSize: 32, letterSpacing: -1.92, fontWeight: isBold ? FontWeight.bold : FontWeight.w600), - ); - - bool isValidEmail() { - return RegExp(r'^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$').hasMatch(this); - } - - String toFormattedDate() { - String date = this.split("T")[0]; - String time = this.split("T")[1]; - var dates = date.split("-"); - return "${dates[2]} ${getMonth(int.parse(dates[1]))} ${dates[0]} ${DateFormat('hh:mm a').format(DateFormat('hh:mm:ss').parse(time))}"; - } - - getMonth(int month) { - switch (month) { - case 1: - return "January"; - case 2: - return "February"; - case 3: - return "March"; - case 4: - return "April"; - case 5: - return "May"; - case 6: - return "June"; - case 7: - return "July"; - case 8: - return "August"; - case 9: - return "September"; - case 10: - return "October"; - case 11: - return "November"; - case 12: - return "December"; - } - } -} diff --git a/lib/widgets/extensions/widget_extensions.dart b/lib/widgets/extensions/widget_extensions.dart deleted file mode 100644 index 787894d..0000000 --- a/lib/widgets/extensions/widget_extensions.dart +++ /dev/null @@ -1,11 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter/widgets.dart'; - -extension WidgetExtensions on Widget { - Widget onPress(VoidCallback onTap) => InkWell(onTap: onTap, child: this); - - Widget paddingAll(double _value) => Padding(padding: EdgeInsets.all(_value), child: this); - - Widget paddingOnly({double left = 0.0, double right = 0.0, double top = 0.0, double bottom = 0.0}) => - Padding(padding: EdgeInsets.only(left: left, right: right, top: top, bottom: bottom), child: this); -} diff --git a/lib/widgets/gradient_app_bar.dart b/lib/widgets/gradient_app_bar.dart deleted file mode 100644 index c3ded30..0000000 --- a/lib/widgets/gradient_app_bar.dart +++ /dev/null @@ -1,63 +0,0 @@ -import 'package:flutter/material.dart'; - -class GradientAppBar extends StatelessWidget { - final String title; - final double barHeight = 50.0; - IconData? iconData; - - GradientAppBar(this.title, {this.iconData}); - - @override - Widget build(BuildContext context) { - final double statusbarHeight = MediaQuery.of(context).padding.top; - - return new Container( - padding: EdgeInsets.only(top: statusbarHeight), - height: statusbarHeight + barHeight, - child: Row( - children: [ - IconButton( - onPressed: () { - Navigator.pop(context); - }, - icon: Icon( - Icons.arrow_back_ios, - color: Colors.white, - ), - ), - Expanded( - child: Center( - child: Text( - title, - style: TextStyle( - fontSize: 20.0, - color: Colors.white, - fontWeight: FontWeight.bold), - ), - ), - ), - if (iconData != null) - IconButton( - onPressed: () {}, - icon: Icon( - iconData, - color: Colors.white, - ), - ), - ], - ), - decoration: BoxDecoration( - gradient: LinearGradient( - colors: [ - Colors.black.withOpacity(0.4), - Colors.black.withOpacity(0.2), - Colors.black.withOpacity(0.0001), - ], - begin: Alignment.topCenter, - end: Alignment.bottomCenter, - tileMode: TileMode.clamp, - ), - ), - ); - } -} diff --git a/lib/widgets/images/circular_image.dart b/lib/widgets/images/circular_image.dart deleted file mode 100644 index 89fb361..0000000 --- a/lib/widgets/images/circular_image.dart +++ /dev/null @@ -1,30 +0,0 @@ -import 'package:car_provider_app/config/constants.dart'; -import 'package:car_provider_app/utils/utils.dart'; -import 'package:flutter/material.dart'; - -class CircularImage extends StatelessWidget { - double? w, h, padding; - String? image; - - CircularImage({this.w, this.h, this.image, this.padding}); - - @override - Widget build(BuildContext context) { - return Container( - width: w ?? 120, - height: h ?? 120, - child: Card( - shape: cardRadius(2000), - clipBehavior: Clip.antiAlias, - elevation: 4, - child: Card( - shape: cardRadius(2000), - clipBehavior: Clip.antiAlias, - elevation: 0, - margin: EdgeInsets.all(padding ?? 0), - child: Image.asset(image ?? icons + "green.jpg"), - ), - ), - ); - } -} diff --git a/lib/widgets/loading_dialog.dart b/lib/widgets/loading_dialog.dart deleted file mode 100644 index e4b1cf8..0000000 --- a/lib/widgets/loading_dialog.dart +++ /dev/null @@ -1,43 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter/rendering.dart'; - -class LoadingDialog extends StatefulWidget { - LoadingDialog({Key? key}) : super(key: key); - - @override - _LoadingDialogState createState() { - return _LoadingDialogState(); - } -} - -class _LoadingDialogState extends State { - @override - void initState() { - super.initState(); - } - - @override - void dispose() { - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return Dialog( - insetPadding: const EdgeInsets.symmetric(horizontal: 60.0, vertical: 24.0), - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(16), - ), - elevation: 0, - backgroundColor: Colors.transparent, - child: Directionality( - textDirection: TextDirection.rtl, - child: Center( - child: CircularProgressIndicator(), - ), - ), - ); - } -} diff --git a/lib/widgets/otp_widget.dart b/lib/widgets/otp_widget.dart deleted file mode 100644 index a489e61..0000000 --- a/lib/widgets/otp_widget.dart +++ /dev/null @@ -1,373 +0,0 @@ -import 'dart:async'; - -import 'package:flutter/animation.dart'; -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter/rendering.dart'; -import 'package:flutter/services.dart'; - -typedef OnDone = void Function(String text); - -class ProvidedPinBoxTextAnimation { - static AnimatedSwitcherTransitionBuilder scalingTransition = (child, animation) { - return ScaleTransition( - child: child, - scale: animation, - ); - }; - - static AnimatedSwitcherTransitionBuilder defaultNoTransition = (Widget child, Animation animation) { - return child; - }; -} - -class OTPWidget extends StatefulWidget { - final int maxLength; - final TextEditingController? controller; - - final Color defaultBorderColor; - final Color pinBoxColor; - final double pinBoxBorderWidth; - final double pinBoxRadius; - final bool hideDefaultKeyboard; - - final TextStyle? pinTextStyle; - final double pinBoxHeight; - final double pinBoxWidth; - final OnDone? onDone; - final bool hasError; - final Color errorBorderColor; - final Color textBorderColor; - final Function(String)? onTextChanged; - final bool autoFocus; - final FocusNode? focusNode; - final AnimatedSwitcherTransitionBuilder? pinTextAnimatedSwitcherTransition; - final Duration pinTextAnimatedSwitcherDuration; - final TextDirection textDirection; - final TextInputType keyboardType; - final EdgeInsets pinBoxOuterPadding; - - const OTPWidget({ - Key? key, - this.maxLength: 4, - this.controller, - this.pinBoxWidth: 70.0, - this.pinBoxHeight: 70.0, - this.pinTextStyle, - this.onDone, - this.defaultBorderColor: Colors.black, - this.textBorderColor: Colors.black, - this.pinTextAnimatedSwitcherTransition, - this.pinTextAnimatedSwitcherDuration: const Duration(), - this.hasError: false, - this.errorBorderColor: Colors.red, - this.onTextChanged, - this.autoFocus: false, - this.focusNode, - this.textDirection: TextDirection.ltr, - this.keyboardType: TextInputType.number, - this.pinBoxOuterPadding = const EdgeInsets.symmetric(horizontal: 4.0), - this.pinBoxColor = Colors.white, - this.pinBoxBorderWidth = 2.0, - this.pinBoxRadius = 0, - this.hideDefaultKeyboard = false, - }) : super(key: key); - - @override - State createState() { - return OTPWidgetState(); - } -} - -class OTPWidgetState extends State with SingleTickerProviderStateMixin { - AnimationController? _highlightAnimationController; - FocusNode? focusNode; - String text = ""; - int currentIndex = 0; - List strList = []; - bool hasFocus = false; - - @override - void didUpdateWidget(OTPWidget oldWidget) { - super.didUpdateWidget(oldWidget); - focusNode = widget.focusNode ?? focusNode; - - if (oldWidget.maxLength < widget.maxLength) { - setState(() { - currentIndex = text.length; - }); - widget.controller?.text = text; - widget.controller?.selection = TextSelection.collapsed(offset: text.length); - } else if (oldWidget.maxLength > widget.maxLength && widget.maxLength > 0 && text.length > 0 && text.length > widget.maxLength) { - setState(() { - text = text.substring(0, widget.maxLength); - currentIndex = text.length; - }); - widget.controller?.text = text; - widget.controller?.selection = TextSelection.collapsed(offset: text.length); - } - } - - _calculateStrList() { - if (strList.length > widget.maxLength) { - strList.length = widget.maxLength; - } - while (strList.length < widget.maxLength) { - strList.add(""); - } - } - - @override - void initState() { - super.initState(); - focusNode = widget.focusNode ?? FocusNode(); - - _initTextController(); - _calculateStrList(); - widget.controller?.addListener(_controllerListener); - focusNode?.addListener(_focusListener); - } - - void _controllerListener() { - if (mounted == true) { - setState(() { - _initTextController(); - }); - var onTextChanged = widget.onTextChanged; - if (onTextChanged != null) { - onTextChanged(widget.controller?.text ?? ""); - } - } - } - - void _focusListener() { - if (mounted == true) { - setState(() { - hasFocus = focusNode?.hasFocus ?? false; - }); - } - } - - void _initTextController() { - if (widget.controller == null) { - return; - } - strList.clear(); - var text = widget.controller?.text ?? ""; - if (text.isNotEmpty) { - if (text.length > widget.maxLength) { - throw Exception("TextEditingController length exceeded maxLength!"); - } - } - for (var i = 0; i < text.length; i++) { - strList.add(text[i]); - } - } - - double get _width { - var width = 0.0; - for (var i = 0; i < widget.maxLength; i++) { - width += widget.pinBoxWidth; - if (i == 0) { - width += widget.pinBoxOuterPadding.left; - } else if (i + 1 == widget.maxLength) { - width += widget.pinBoxOuterPadding.right; - } else { - width += widget.pinBoxOuterPadding.left; - } - } - return width; - } - - @override - void dispose() { - if (widget.focusNode == null) { - focusNode?.dispose(); - } else { - focusNode?.removeListener(_focusListener); - } - _highlightAnimationController?.dispose(); - widget.controller?.removeListener(_controllerListener); - - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return Stack( - children: [ - _otpTextInput(), - _touchPinBoxRow(), - ], - ); - } - - Widget _touchPinBoxRow() { - return widget.hideDefaultKeyboard - ? _pinBoxRow(context) - : GestureDetector( - behavior: HitTestBehavior.opaque, - onTap: () { - if (hasFocus) { - FocusScope.of(context).requestFocus(FocusNode()); - Future.delayed(Duration(milliseconds: 100), () { - FocusScope.of(context).requestFocus(focusNode); - }); - } else { - FocusScope.of(context).requestFocus(focusNode); - } - }, - child: _pinBoxRow(context), - ); - } - - Widget _otpTextInput() { - var transparentBorder = OutlineInputBorder( - borderSide: BorderSide( - color: Colors.transparent, - width: 0.0, - ), - ); - return Container( - width: _width, - height: widget.pinBoxHeight, - child: TextField( - autofocus: !kIsWeb ? widget.autoFocus : false, - enableInteractiveSelection: false, - focusNode: focusNode, - controller: widget.controller, - keyboardType: widget.keyboardType, - inputFormatters: widget.keyboardType == TextInputType.number ? [FilteringTextInputFormatter.digitsOnly] : null, - style: TextStyle( - height: 0.1, - color: Colors.transparent, - ), - decoration: InputDecoration( - contentPadding: EdgeInsets.all(0), - focusedErrorBorder: transparentBorder, - errorBorder: transparentBorder, - disabledBorder: transparentBorder, - enabledBorder: transparentBorder, - focusedBorder: transparentBorder, - counterText: null, - counterStyle: null, - helperStyle: TextStyle( - height: 0.0, - color: Colors.transparent, - ), - labelStyle: TextStyle(height: 0.1), - fillColor: Colors.transparent, - border: InputBorder.none, - ), - cursorColor: Colors.transparent, - showCursor: false, - maxLength: widget.maxLength, - onChanged: _onTextChanged, - ), - ); - } - - void _onTextChanged(text) { - var onTextChanged = widget.onTextChanged; - if (onTextChanged != null) { - onTextChanged(text); - } - setState(() { - this.text = text; - if (text.length >= currentIndex) { - for (int i = currentIndex; i < text.length; i++) { - strList[i] = text[i]; - } - } - currentIndex = text.length; - }); - if (text.length == widget.maxLength) { - FocusScope.of(context).requestFocus(FocusNode()); - var onDone = widget.onDone; - if (onDone != null) { - onDone(text); - } - } - } - - Widget _pinBoxRow(BuildContext context) { - _calculateStrList(); - List pinCodes = List.generate(widget.maxLength, (int i) { - return _buildPinCode(i, context); - }); - return Row(children: pinCodes, mainAxisSize: MainAxisSize.min); - } - - Widget _buildPinCode(int i, BuildContext context) { - Color borderColor; - Color pinBoxColor = widget.pinBoxColor; - - if (widget.hasError) { - borderColor = widget.errorBorderColor; - } else if (i < text.length) { - borderColor = widget.textBorderColor; - } else { - borderColor = widget.defaultBorderColor; - pinBoxColor = widget.pinBoxColor; - } - - EdgeInsets insets; - if (i == 0) { - insets = EdgeInsets.only( - left: 0, - top: widget.pinBoxOuterPadding.top, - right: widget.pinBoxOuterPadding.right, - bottom: widget.pinBoxOuterPadding.bottom, - ); - } else if (i == strList.length - 1) { - insets = EdgeInsets.only( - left: widget.pinBoxOuterPadding.left, - top: widget.pinBoxOuterPadding.top, - right: 0, - bottom: widget.pinBoxOuterPadding.bottom, - ); - } else { - insets = widget.pinBoxOuterPadding; - } - return Container( - key: ValueKey("container$i"), - alignment: Alignment.center, - padding: EdgeInsets.symmetric(vertical: 4.0, horizontal: 1.0), - margin: insets, - child: _animatedTextBox(strList[i], i), - decoration: BoxDecoration( - border: Border.all( - color: borderColor, - width: widget.pinBoxBorderWidth, - ), - color: pinBoxColor, - borderRadius: BorderRadius.circular(widget.pinBoxRadius), - ), - width: widget.pinBoxWidth, - height: widget.pinBoxHeight, - ); - } - - Widget _animatedTextBox(String text, int i) { - if (widget.pinTextAnimatedSwitcherTransition != null) { - return AnimatedSwitcher( - duration: widget.pinTextAnimatedSwitcherDuration, - transitionBuilder: widget.pinTextAnimatedSwitcherTransition ?? - (Widget child, Animation animation) { - return child; - }, - child: Text( - text, - key: ValueKey("$text$i"), - style: widget.pinTextStyle, - ), - ); - } else { - return Text( - text, - key: ValueKey("${strList[i]}$i"), - style: widget.pinTextStyle, - ); - } - } -} diff --git a/lib/widgets/show_card_buttton.dart b/lib/widgets/show_card_buttton.dart deleted file mode 100644 index b7b5bdc..0000000 --- a/lib/widgets/show_card_buttton.dart +++ /dev/null @@ -1,32 +0,0 @@ -import 'package:car_provider_app/theme/colors.dart'; -import 'package:car_provider_app/widgets/button/show_fill_button.dart'; -import 'package:flutter/material.dart'; - -class ShowCardButton extends StatelessWidget { - String title; - VoidCallback onPressed; - Color txtColor; - - ShowCardButton({ - required this.title, - required this.onPressed, - this.txtColor = Colors.white, - }); - - @override - Widget build(BuildContext context) { - return Card( - margin: EdgeInsets.zero, - elevation: 20, - child: Container( - width: double.infinity, - padding: EdgeInsets.all(12), - child: ShowFillButton( - title: title, - onPressed: onPressed, - txtColor: txtColor, - ), - ), - ); - } -} diff --git a/lib/widgets/tab/login_email_tab.dart b/lib/widgets/tab/login_email_tab.dart deleted file mode 100644 index fcdaf42..0000000 --- a/lib/widgets/tab/login_email_tab.dart +++ /dev/null @@ -1,84 +0,0 @@ -import 'package:car_provider_app/extensions/int_extensions.dart'; -import 'package:easy_localization/easy_localization.dart'; -import 'package:flutter/material.dart'; -import 'package:sizer/sizer.dart'; - -import '../../classes/colors.dart'; -import '../../generated/locale_keys.g.dart'; - -enum ClassType { EMAIL, NUMBER } - -class LoginEmailTab extends StatefulWidget { - Function(ClassType) onSelection; - - LoginEmailTab({required this.onSelection}); - - @override - State createState() => _LoginEmailTabState(); -} - -class _LoginEmailTabState extends State { - ClassType type = ClassType.EMAIL; - - @override - Widget build(BuildContext context) { - return Container( - width: double.infinity, - child: Row( - children: [ - Expanded( - child: InkWell( - onTap: () { - type = ClassType.EMAIL; - widget.onSelection(ClassType.EMAIL); - }, - child: Container( - width: double.infinity, - height: 45, - decoration: BoxDecoration( - color: type == ClassType.EMAIL ? MyColors.darkPrimaryColor : Colors.grey[200], - // border: Border.all(color: type == ClassType.NUMBER ? MyColors.darkPrimaryColor : Colors.transparent, width: 2), - borderRadius: BorderRadius.all(Radius.circular(0)), - ), - child: Center( - child: Text( - LocaleKeys.email.tr(), - style: TextStyle( - color: type == ClassType.EMAIL ? MyColors.white : Colors.black, - ), - ), - ), - ), - ), - ), - 12.width, - Expanded( - child: InkWell( - onTap: () { - type = ClassType.NUMBER; - widget.onSelection(ClassType.NUMBER); - }, - child: Container( - width: double.infinity, - height: 45, - decoration: BoxDecoration( - color: type == ClassType.NUMBER ? MyColors.darkPrimaryColor : Colors.grey[200], - // border: Border.all(color: type == ClassType.NUMBER ? MyColors.darkPrimaryColor : Colors.transparent, width: 2), - borderRadius: BorderRadius.all(Radius.circular(0)), - ), - child: Center( - child: Text( - LocaleKeys.phoneNumber.tr(), - style: TextStyle( - color: type == ClassType.NUMBER ? MyColors.white : Colors.black, - ), - ), - ), - ), - ), - ), - ], - ), - ); - } -} diff --git a/lib/widgets/tab/role_type_tab.dart b/lib/widgets/tab/role_type_tab.dart deleted file mode 100644 index b7c0908..0000000 --- a/lib/widgets/tab/role_type_tab.dart +++ /dev/null @@ -1,60 +0,0 @@ -import 'package:car_provider_app/classes/colors.dart'; -import 'package:car_provider_app/widgets/dropdown/dropdow_field.dart'; -import 'package:car_provider_app/widgets/extensions/int_extensions.dart'; -import 'package:flutter/material.dart'; - -class RoleTypeTab extends StatefulWidget { - int selectedIndex; - List dropList; - Function(DropValue value) onSelect; - - RoleTypeTab(this.selectedIndex, this.dropList, {required this.onSelect}); - - @override - State createState() => _RoleTypeTabState(); -} - -class _RoleTypeTabState extends State { - @override - Widget build(BuildContext context) { - return SizedBox( - width: double.infinity, - height: 45, - child: ListView.separated( - itemBuilder: (context, index) { - return InkWell( - onTap: () { - setState(() { - widget.selectedIndex = index; - widget.onSelect(widget.dropList[index]); - }); - }, - child: Container( - width: (MediaQuery.of(context).size.width / 2)-30, - height: 45, - decoration: BoxDecoration( - color: widget.selectedIndex == index ? MyColors.darkPrimaryColor : Colors.grey[200], - // border: Border.all(color: type == ClassType.NUMBER ? MyColors.darkPrimaryColor : Colors.transparent, width: 2), - borderRadius: const BorderRadius.all(Radius.circular(0)), - ), - child: Center( - child: Text( - widget.dropList[index].value, - style: TextStyle( - color: widget.selectedIndex == index ? MyColors.white : Colors.black, - fontSize: 10, - ), - ), - ), - ), - ); - }, - separatorBuilder: (context, index) { - return 12.width; - }, - itemCount: widget.dropList.length, - scrollDirection: Axis.horizontal, - ), - ); - } -} diff --git a/lib/widgets/txt_field.dart b/lib/widgets/txt_field.dart deleted file mode 100644 index 7ad13a0..0000000 --- a/lib/widgets/txt_field.dart +++ /dev/null @@ -1,166 +0,0 @@ -import 'package:car_provider_app/extensions/int_extensions.dart'; -import 'package:car_provider_app/theme/colors.dart'; -import 'package:car_provider_app/utils/utils.dart'; -import 'package:car_provider_app/extensions/string_extensions.dart'; -import 'package:flutter/material.dart'; -import 'package:sizer/sizer.dart'; - -import '../classes/colors.dart'; - -class TxtField extends StatelessWidget { - TextEditingController controller = new TextEditingController(); - String? value; - String? hint; - String? lable; - IconData? prefixData; - IconData? postfixData; - bool isNeedFilterButton; - bool isNeedClickAll; - bool isButtonEnable; - double? elevation; - VoidCallback? onTap; - String? buttonTitle; - int? maxLines; - bool isSidePaddingZero; - bool isNeedBorder; - bool? isPasswordEnabled; - Function(String)? onChanged; - TextInputType? keyboardType; - bool isBackgroundEnabled=false; - - TxtField({ - this.value, - this.lable, - this.hint, - this.prefixData, - this.postfixData, - this.isNeedClickAll = false, - this.isNeedFilterButton = false, - this.elevation, - this.onTap, - this.isButtonEnable = false, - this.buttonTitle, - this.maxLines, - this.isSidePaddingZero = false, - this.isNeedBorder = true, - this.onChanged, - this.isPasswordEnabled, - this.keyboardType, - this.isBackgroundEnabled=false, - }); - - @override - Widget build(BuildContext context) { - controller.text = value ?? ""; - controller.selection = TextSelection.fromPosition(TextPosition(offset: controller.text.length)); - return InkWell( - onTap: isNeedClickAll == false - ? null - : () { - onTap!(); - }, - customBorder: inkWellCorner(), - child: Row( - children: [ - Expanded( - child: Container( - decoration: BoxDecoration( - color: isBackgroundEnabled?MyColors.textFieldColor:Colors.white, - borderRadius: BorderRadius.all(Radius.circular(0)), - ), - child: TextField( - keyboardType: keyboardType, - autofocus: false, - controller: controller, - enabled: isNeedClickAll == true ? false : true, - maxLines: maxLines, - onTap: () {}, - obscureText: isPasswordEnabled ?? false, - onChanged: onChanged, - decoration: InputDecoration( - labelText: lable, - alignLabelWithHint: true, - fillColor: Colors.white, - focusedBorder: OutlineInputBorder( - borderSide: BorderSide(color: MyColors.darkPrimaryColor, width: isNeedBorder ? 2.0 : 0), - borderRadius: BorderRadius.circular(0.0), - ), - enabledBorder: OutlineInputBorder( - // borderSide: BorderSide(color: MyColors.textFieldColor, width: isNeedBorder ? 1.0 : 0), - borderSide: BorderSide(color: MyColors.darkPrimaryColor, width: isNeedBorder ? 2.0 : 0), - borderRadius: BorderRadius.circular(0.0), - ), - disabledBorder: OutlineInputBorder( - // borderSide: BorderSide(color: MyColors.textFieldColor, width: isNeedBorder ? 1.0 : 0), - borderSide: BorderSide(color: MyColors.darkPrimaryColor, width: isNeedBorder ? 2.0 : 0), - borderRadius: BorderRadius.circular(0.0), - ), - prefixIcon: prefixData != null - ? Icon( - Icons.search, - color: borderColor, - ) - : null, - labelStyle: TextStyle(color: borderColor, fontSize: 13.sp), - hintStyle: TextStyle(color: borderColor, fontSize: 9.sp), - hintText: hint ?? "", - contentPadding: prefixData == null - ? EdgeInsets.only( - left: 12, - right: 12, - top: maxLines != null ? 12 : 0, - bottom: maxLines != null ? 12 : 0, - ) - : EdgeInsets.zero, - ), - ), - ), - ), - if (isNeedFilterButton) 8.width, - if (isNeedFilterButton) - InkWell( - onTap: isNeedClickAll - ? null - : () { - controller.clear(); - }, - child: Container( - width: 55, - height: 55, - child: Card( - color: accentColor, - // margin: EdgeInsets.all(4), - // shape: cardRadius(0), - child: Icon( - postfixData ?? Icons.filter_alt, - color: Colors.white, - ), - ), - ), - ), - if (isButtonEnable) - Material( - child: InkWell( - onTap: onTap, - customBorder: inkWellCorner(), - child: Container( - height: 55, - child: Card( - color: accentColor, - // margin: EdgeInsets.all(4), - // shape: cardRadius(0), - child: Center( - child: Padding( - padding: const EdgeInsets.only(left: 12, right: 12), - child: (buttonTitle ?? "Search").toText16(color: Colors.white), - ), - ), - ), - ), - ), - ), - ], - ), - ); - } -} diff --git a/lib/widgets/user_image.dart b/lib/widgets/user_image.dart deleted file mode 100644 index 78d2236..0000000 --- a/lib/widgets/user_image.dart +++ /dev/null @@ -1,26 +0,0 @@ -import 'package:car_provider_app/config/constants.dart'; -import 'package:car_provider_app/utils/utils.dart'; -import 'package:flutter/material.dart'; - -class UserImage extends StatelessWidget { - double? size; - String? url; - - UserImage({this.size, this.url}); - - @override - Widget build(BuildContext context) { - return Container( - height: size ?? 60, - width: size ?? 60, - decoration: containerRadius(Colors.transparent, 1000), - clipBehavior: Clip.antiAlias, - child: Image.asset( - url ?? icons + "Blue Masked.jpg", - width: double.infinity, - height: double.infinity, - fit: BoxFit.cover, - ), - ); - } -} diff --git a/pubspec.lock b/pubspec.lock index 4d31005..3957802 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -17,8 +17,16 @@ packages: url: "https://pub.dev" source: hosted version: "2.10.0" + auto_size_text: + dependency: transitive + description: + name: auto_size_text + sha256: "3f5261cd3fb5f2a9ab4e2fc3fba84fd9fcaac8821f20a1d4e71f557521b22599" + url: "https://pub.dev" + source: hosted + version: "3.0.0" badges: - dependency: "direct main" + dependency: transitive description: name: badges sha256: "461031a60efbb95276f52107f63d5d45008b5ca1eb7f8ca440cadda9ec2143b0" @@ -33,6 +41,38 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.1" + cached_network_image: + dependency: transitive + description: + name: cached_network_image + sha256: fd3d0dc1d451f9a252b32d95d3f0c3c487bc41a75eba2e6097cb0b9c71491b15 + url: "https://pub.dev" + source: hosted + version: "3.2.3" + cached_network_image_platform_interface: + dependency: transitive + description: + name: cached_network_image_platform_interface + sha256: bb2b8403b4ccdc60ef5f25c70dead1f3d32d24b9d6117cfc087f496b178594a7 + url: "https://pub.dev" + source: hosted + version: "2.0.0" + cached_network_image_web: + dependency: transitive + description: + name: cached_network_image_web + sha256: b8eb814ebfcb4dea049680f8c1ffb2df399e4d03bf7a352c775e26fa06e02fa0 + url: "https://pub.dev" + source: hosted + version: "1.0.2" + carousel_slider: + dependency: transitive + description: + name: carousel_slider + sha256: "9c695cc963bf1d04a47bd6021f68befce8970bcd61d24938e1fb0918cf5d9c42" + url: "https://pub.dev" + source: hosted + version: "4.2.1" characters: dependency: transitive description: @@ -65,6 +105,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.3.3+4" + crypto: + dependency: transitive + description: + name: crypto + sha256: aa274aa7774f8964e4f4f38cc994db7b6158dd36e9187aaceaddc994b35c6c67 + url: "https://pub.dev" + source: hosted + version: "3.0.2" cupertino_icons: dependency: "direct main" description: @@ -74,7 +122,7 @@ packages: source: hosted version: "1.0.5" easy_localization: - dependency: "direct main" + dependency: transitive description: name: easy_localization sha256: "6a2e99fa0bfe5765bf4c6ca9b137d5de2c75593007178c5e4cd2ae985f870080" @@ -90,7 +138,7 @@ packages: source: hosted version: "0.0.2" equatable: - dependency: "direct main" + dependency: transitive description: name: equatable sha256: c2b87cb7756efdf69892005af546c56c0b5037f54d2a88269b4f347a505e3ca2 @@ -109,10 +157,10 @@ packages: dependency: transitive description: name: ffi - sha256: a38574032c5f1dd06c4aee541789906c12ccaab8ba01446e800d9c5b79c4a978 + sha256: "13a6ccf6a459a125b3fcdb6ec73bd5ff90822e071207c663bfd1f70062d51d18" url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "1.2.1" file: dependency: transitive description: @@ -122,18 +170,34 @@ packages: source: hosted version: "6.1.4" file_picker: - dependency: "direct main" + dependency: transitive description: name: file_picker - sha256: d8e9ca7e5d1983365c277f12c21b4362df6cf659c99af146ad4d04eb33033013 + sha256: "704259669b5e9cb24e15c11cfcf02caf5f20d30901b3916d60b6d1c2d647035f" url: "https://pub.dev" source: hosted - version: "5.2.6" + version: "4.6.1" flutter: dependency: "direct main" description: flutter source: sdk version: "0.0.0" + flutter_blurhash: + dependency: transitive + description: + name: flutter_blurhash + sha256: "05001537bd3fac7644fa6558b09ec8c0a3f2eba78c0765f88912882b1331a5c6" + url: "https://pub.dev" + source: hosted + version: "0.7.0" + flutter_cache_manager: + dependency: transitive + description: + name: flutter_cache_manager + sha256: "32cd900555219333326a2d0653aaaf8671264c29befa65bbd9856d204a4c9fb3" + url: "https://pub.dev" + source: hosted + version: "3.3.0" flutter_lints: dependency: "direct dev" description: @@ -156,7 +220,7 @@ packages: source: hosted version: "2.0.9" flutter_svg: - dependency: "direct main" + dependency: transitive description: name: flutter_svg sha256: "6ff9fa12892ae074092de2fa6a9938fb21dbabfdaa2ff57dc697ff912fc8d4b2" @@ -174,7 +238,7 @@ packages: source: sdk version: "0.0.0" fluttertoast: - dependency: "direct main" + dependency: transitive description: name: fluttertoast sha256: "2f9c4d3f4836421f7067a28f8939814597b27614e021da9d63e5d3fb6e212d25" @@ -182,7 +246,7 @@ packages: source: hosted version: "8.2.1" geocoding: - dependency: "direct main" + dependency: transitive description: name: geocoding sha256: b34c0501bbbaf3190b85bef3078b27cf66c28a8915c6d3af50d67f356aa7da31 @@ -214,7 +278,7 @@ packages: source: hosted version: "2.0.1" geolocator: - dependency: "direct main" + dependency: transitive description: name: geolocator sha256: "5c23f3613f50586c0bbb2b8f970240ae66b3bd992088cf60dd5ee2e6f7dde3a8" @@ -262,7 +326,7 @@ packages: source: hosted version: "0.1.1" google_maps_flutter: - dependency: "direct main" + dependency: transitive description: name: google_maps_flutter sha256: "24392ef192f3b00bcd93151375676805a9933574423a5bd5509a0ead2e8a4215" @@ -293,8 +357,16 @@ packages: url: "https://pub.dev" source: hosted version: "2.2.6" + hexcolor: + dependency: transitive + description: + name: hexcolor + sha256: e572c3346f4b26422a281dc4c10f83022131f56f7364837671b50f53c7adc5e7 + url: "https://pub.dev" + source: hosted + version: "2.0.7" http: - dependency: "direct main" + dependency: transitive description: name: http sha256: "6aa2946395183537c8b880962d935877325d6a09a2867c3970c05c0fed6ac482" @@ -310,7 +382,7 @@ packages: source: hosted version: "4.0.2" image_picker: - dependency: "direct main" + dependency: transitive description: name: image_picker sha256: "64b21d9f0e065f9ab0e4dde458076226c97382cc0c6949144cb874c62bf8e9f8" @@ -350,7 +422,7 @@ packages: source: hosted version: "2.6.3" injector: - dependency: "direct main" + dependency: transitive description: name: injector sha256: "2a683124c716e93b45521794f55bfe770e069cb3d871fc4fbc65b5acef78e832" @@ -381,6 +453,22 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.1" + local_auth: + dependency: transitive + description: + name: local_auth + sha256: d3fece0749101725b03206f84a7dab7aaafb702dbbd09131ff8d8173259a9b19 + url: "https://pub.dev" + source: hosted + version: "1.1.11" + logger: + dependency: transitive + description: + name: logger + sha256: db2ff852ed77090ba9f62d3611e4208a3d11dfa35991a81ae724c113fcb3e3f7 + url: "https://pub.dev" + source: hosted + version: "1.3.0" matcher: dependency: transitive description: @@ -397,6 +485,13 @@ packages: url: "https://pub.dev" source: hosted version: "0.2.0" + mc_common_app: + dependency: "direct main" + description: + path: "C:/Users/mirza.shafique/AndroidStudioProjects/mc_common_app" + relative: false + source: path + version: "1.0.0+1" meta: dependency: transitive description: @@ -413,6 +508,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.0" + octo_image: + dependency: transitive + description: + name: octo_image + sha256: "107f3ed1330006a3bea63615e81cf637433f5135a52466c7caa0e7152bca9143" + url: "https://pub.dev" + source: hosted + version: "1.0.2" path: dependency: transitive description: @@ -438,7 +541,7 @@ packages: source: hosted version: "1.0.1" path_provider: - dependency: "direct main" + dependency: transitive description: name: path_provider sha256: "04890b994ee89bfa80bf3080bfec40d5a92c5c7a785ebb02c13084a099d2b6f9" @@ -481,12 +584,20 @@ packages: dependency: transitive description: name: path_provider_windows - sha256: f53720498d5a543f9607db4b0e997c4b5438884de25b0f73098cc2671a51b130 + sha256: a34ecd7fb548f8e57321fd8e50d865d266941b54e6c3b7758cf8f37c24116905 url: "https://pub.dev" source: hosted - version: "2.1.5" + version: "2.0.7" + pedantic: + dependency: transitive + description: + name: pedantic + sha256: "67fc27ed9639506c856c840ccce7594d0bdcd91bc8d53d6e52359449a1d50602" + url: "https://pub.dev" + source: hosted + version: "1.11.1" permission_handler: - dependency: "direct main" + dependency: transitive description: name: permission_handler sha256: "33c6a1253d1f95fd06fa74b65b7ba907ae9811f9d5c1d3150e51417d04b8d6a8" @@ -558,15 +669,23 @@ packages: source: hosted version: "4.2.4" provider: - dependency: "direct main" + dependency: transitive description: name: provider sha256: cdbe7530b12ecd9eb455bdaa2fcb8d4dad22e80b8afb4798b41479d5ce26847f url: "https://pub.dev" source: hosted version: "6.0.5" + rxdart: + dependency: transitive + description: + name: rxdart + sha256: "0c7c0cedd93788d996e33041ffecda924cc54389199cde4e6a34b440f50044cb" + url: "https://pub.dev" + source: hosted + version: "0.27.7" shared_preferences: - dependency: "direct main" + dependency: transitive description: name: shared_preferences sha256: ee6257848f822b8481691f20c3e6d2bfee2e9eccb2a3d249907fcfb198c55b41 @@ -621,8 +740,16 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.5" + shimmer: + dependency: transitive + description: + name: shimmer + sha256: "1f1009b5845a1f88f1c5630212279540486f97409e9fc3f63883e71070d107bf" + url: "https://pub.dev" + source: hosted + version: "2.0.0" sizer: - dependency: "direct main" + dependency: transitive description: name: sizer sha256: d2b3cb6cbc4a637f508dacd786bae55df31e5fc088044248a43e4fd1e050c117 @@ -642,6 +769,22 @@ packages: url: "https://pub.dev" source: hosted version: "1.9.1" + sqflite: + dependency: transitive + description: + name: sqflite + sha256: "500d6fec583d2c021f2d25a056d96654f910662c64f836cd2063167b8f1fa758" + url: "https://pub.dev" + source: hosted + version: "2.2.6" + sqflite_common: + dependency: transitive + description: + name: sqflite_common + sha256: "963dad8c4aa2f814ce7d2d5b1da2f36f31bd1a439d8f27e3dc189bb9d26bc684" + url: "https://pub.dev" + source: hosted + version: "2.4.3" stack_trace: dependency: transitive description: @@ -674,6 +817,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.2.0" + synchronized: + dependency: transitive + description: + name: synchronized + sha256: "33b31b6beb98100bf9add464a36a8dd03eb10c7a8cf15aeec535e9b054aaf04b" + url: "https://pub.dev" + source: hosted + version: "3.0.1" term_glyph: dependency: transitive description: @@ -706,6 +857,78 @@ packages: url: "https://pub.dev" source: hosted version: "2.2.0" + url_launcher: + dependency: transitive + description: + name: url_launcher + sha256: "75f2846facd11168d007529d6cd8fcb2b750186bea046af9711f10b907e1587e" + url: "https://pub.dev" + source: hosted + version: "6.1.10" + url_launcher_android: + dependency: transitive + description: + name: url_launcher_android + sha256: dd729390aa936bf1bdf5cd1bc7468ff340263f80a2c4f569416507667de8e3c8 + url: "https://pub.dev" + source: hosted + version: "6.0.26" + url_launcher_ios: + dependency: transitive + description: + name: url_launcher_ios + sha256: "3dedc66ca3c0bef9e6a93c0999aee102556a450afcc1b7bcfeace7a424927d92" + url: "https://pub.dev" + source: hosted + version: "6.1.3" + url_launcher_linux: + dependency: transitive + description: + name: url_launcher_linux + sha256: "206fb8334a700ef7754d6a9ed119e7349bc830448098f21a69bf1b4ed038cabc" + url: "https://pub.dev" + source: hosted + version: "3.0.4" + url_launcher_macos: + dependency: transitive + description: + name: url_launcher_macos + sha256: "0ef2b4f97942a16523e51256b799e9aa1843da6c60c55eefbfa9dbc2dcb8331a" + url: "https://pub.dev" + source: hosted + version: "3.0.4" + url_launcher_platform_interface: + dependency: transitive + description: + name: url_launcher_platform_interface + sha256: "6c9ca697a5ae218ce56cece69d46128169a58aa8653c1b01d26fcd4aad8c4370" + url: "https://pub.dev" + source: hosted + version: "2.1.2" + url_launcher_web: + dependency: transitive + description: + name: url_launcher_web + sha256: "81fe91b6c4f84f222d186a9d23c73157dc4c8e1c71489c4d08be1ad3b228f1aa" + url: "https://pub.dev" + source: hosted + version: "2.0.16" + url_launcher_windows: + dependency: transitive + description: + name: url_launcher_windows + sha256: a83ba3607a507758669cfafb03f9de09bf6e6280c14d9b9cb18f013e406dcacd + url: "https://pub.dev" + source: hosted + version: "3.0.5" + uuid: + dependency: transitive + description: + name: uuid + sha256: "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313" + url: "https://pub.dev" + source: hosted + version: "3.0.7" vector_math: dependency: transitive description: @@ -718,10 +941,10 @@ packages: dependency: transitive description: name: win32 - sha256: c9ebe7ee4ab0c2194e65d3a07d8c54c5d00bb001b76081c4a04cdb8448b59e46 + sha256: c0e3a4f7be7dae51d8f152230b86627e3397c1ba8c3fa58e63d44a9f3edc9cef url: "https://pub.dev" source: hosted - version: "3.1.3" + version: "2.6.1" xdg_directories: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index c51338a..a072f4d 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -34,28 +34,13 @@ dependencies: # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.2 - path_provider: ^2.0.4 - injector: ^2.0.0 - provider: ^6.0.0 - easy_localization: ^3.0.0 - http: ^0.13.3 - permission_handler: any - flutter_svg: ^1.0.3 - sizer: ^2.0.15 - fluttertoast: ^8.0.8 - shared_preferences: ^2.0.6 - file_picker: any - image_picker: ^0.8.4+4 - equatable: ^2.0.3 - badges: ^3.0.2 + # mc_common_app: + ## git: https://gitlab.com/mirza.shafique/car_common_app.git + # path: C:/Users/mirza.shafique/AndroidStudioProjects/mc_common_app - - - # google - google_maps_flutter: ^2.1.1 - geolocator: any - geocoding: any + mc_common_app: + path: C:/Users/mirza.shafique/AndroidStudioProjects/mc_common_app @@ -82,32 +67,14 @@ flutter: # the material Icons class. uses-material-design: true - # To add assets to your application, add an assets section, like this: - assets: - - resources/langs/ - - assets/ - - assets/icons/ - - assets/images/ - # An image asset can refer to one or more resolution-specific "variants", see - # https://flutter.dev/assets-and-images/#resolution-aware. - - # For details regarding adding assets from package dependencies, see - # https://flutter.dev/assets-and-images/#from-packages - - # To add custom fonts to your application, add a fonts section here, - # in this "flutter" section. Each entry in this list should have a - # "family" key with the font family name, and a "fonts" key with a - # list giving the asset and other descriptors for the font. For - # example: - fonts: - - family: Poppins - fonts: - - asset: assets/fonts/Poppins-Medium.ttf - # - family: Trajan Pro - # fonts: - # - asset: fonts/TrajanPro.ttf - # - asset: fonts/TrajanPro_Bold.ttf - # weight: 700 - # - # For details regarding fonts from package dependencies, - # see https://flutter.dev/custom-fonts/#from-packages +# assets: +# - /../mc_common_app/assets/ +# - packages/mc_common_app/assets/langs/ +# - packages/mc_common_app/assets/icons/ +# - packages/mc_common_app/assets/images/ + + +# fonts: +# - family: Poppins +# fonts: +# - asset: assets/fonts/Poppins-Medium.ttf diff --git a/resources/langs/ar-SA.json b/resources/langs/ar-SA.json deleted file mode 100644 index 9a1099b..0000000 --- a/resources/langs/ar-SA.json +++ /dev/null @@ -1,183 +0,0 @@ -{ - "firstTimeLogIn": "تسجيل الدخول لأول مره", - "signUp": "التسجيل", - "changeMobile": "تغيير رقم الجوال", - "notifications": "الاشعارات", - "general": "عام", - "defineLicences": "تحديد الرخص", - "dealershipSettings": "اعدادات البيع", - "changePassword": "تغيير كلمة المرور", - "retrievePassword": "استرجاع كلمة المرور", - "changeEmail": "تغيير الايميل", - "verify": "تحقق", - "verified": "تم التحقق", - "signOut": "تسجيل خروج", - "enterEmail": "ادخل الايميل", - "enterNewEmail": "ادخل ايميل جديد", - "enterCurrentPassword": "كلمة المرور الحاليه", - "enterNewPassword": "كلمة المرور الجديده", - "enterOldPassword": "كلمة المرور القديمه", - "confirm": "تأكيد", - "enterNewPhoneNumber": "رقم جوال جديد", - "completeProfile": "الملف الشخصي", - "continu": "استمرار", - "confirmPassword": "تأكيد كلمة المرور", - "createPassword": "انشاء كلمة مرور جديده", - "email": "ايميل", - "firstName": "الأسم الأول *", - "surname": "اسم العائله *", - "confirmPass": "تأكيد كلمة المرور *", - "createPass": "انشاء كلمة مرور جديده *", - "newPassword": " كلمة مرور جديده", - "forgetPassword": "نسيت كلمة المرور", - "forgetPasswordQ": "نسيت كلمة المرور؟", - "recover": "استعادة", - "forgetPasswordRecover": "نسيت كلمة المرور؟ استعادة", - "editAccount": "تعديل الحساب", - "change": "تغيير", - "verifyAccount": "التحقق من الحساب", - "login": "تسجيل دخول", - "log_in": "تسجيل الدخول", - "welcomeMessage": "مرحبا", - "welcomeDes": "أنت مكان واحد لكل ما تحتاجه سيارتك", - "forgetPass": "نسيت كلمة المرور ؟", - "enterPhoneNumber": "رقم جوال ", - "phoneNumberVerified": "تم التحقق من الجوال", - "verifyNewPassword": "التحقق من كلمة المرور", - "EnterPass": "ادخل كلمة المرور", - "send": "إرسال", - "retrivePassword": "استرجع كلمة المرور بإحدى الطرق التالية", - "retriveOnPhone": "سوف نرسل الاختيار إلى رقم هاتفك المحمول المسجل", - "retriveOnEmail": "سوف نرسل الاختيار إلى عنوان بريدك الإلكتروني المسجل", - "enterPhoneForVerfication": "الرجاء إدخال رقم هاتفك وسنرسل لك رمز التحقق", - "selectYourCountry": "اختر بلدك", - "welcomeBack": "مرحبًا بعودتك!!!", - "alreadySigned": " تم تسجيل الدخول", - "emailChangedSuccessfully": "تم تغيير الايميل بنجاح", - "passwordIsUpdated": "تم تحجيث كلمة المرور", - "passwordShouldContains": "كلمة المرور يجب ان تحتوي على رمز رقم حرف كبير حرف صغير", - " successfullyRegistered": "تم التسجيل بنجاح", - "pleaseEnterSamePassword": "ادخل كلمة مرور مطابقه", - "firstNameMandatory": "ادخل الأسم الأول ", - "surnameNameMandatory": "ادخل اسم العائله", - "passwordNameMandatory": "ادخل كلمة المرور", - "enterValidEmail": "ادخل ايميل صحيح", - "pleaseAcceptTerms": "يجب الموافقه على الشروط", - "emailVerified": "تم التحقق من الايميل بنجاح", - "selectMethod": "اختر", - "emailAddress": "ايميل", - "loginSelection": "اختر", - "selectCountryCode": "اختر رمز الدوله", - "selectProviderRole": "اختر نوع الخدمه", - "addPhoneNo": "اضف الهاتف", - "onlyProviderApp": "نأسف هذا التطبيق فقط لمقدمي الخدمات", - "imageUploaded": "تم تحميل الصوره", - "fileLarger": "1KB حجم الملف اكبر من", - "account": "الحساب", - "edit": "تعديل", - "imageDeleted": "تم حذف الصوره", - "dashboard": "الصفحه الرئيسيه", - "pickAddress": "اختر العنوان", - "pickLocation": "اختر الموقع", - "save": "حفظ", - "defineServices": "تحديد الخدمات", - "selectBranch ": "اختر الفرع", - "selectServiceCategory": "اختر فئة الخدمة", - "defineBranches": "تحديد الفروع", - "defineProviders": "تحديد الموفرين", - "closeAccount": "اغلاق الحساب", - "createBranch": "انشاء فرع", - "updateBranch": "فرع التحديث", - "address": "العنوان", - "branchDescription": "وصف الفرع", - "branchName": "اسم الفرع", - "chooseCity": "اختر المدينه", - "chooseCountry": "اختر الدوله", - "selectAttachment": "اختيار مرفق", - "somethingWrong": "هناك خطأ ما", - "documentsUploaded": "تم ارفاق الملف بنجاح", - "update": "تحديث", - "termsOfService": "من خلال إنشاء حساب فإنك توافق على", - "terms": "بنود الخدمة وخصوصية السياسة", - "profileMsg": "أدخل التفاصيل أدناه وأكمل معلومات الملف الشخصي", - "branchInfo": "معلومات الفرع و الخدمات", - "profileCompleted": "الملف الشخصي مكتمل", - "selectLocationMap": "اختر الموقع", - "licensesAndCertifications": "الرخص و الشهادات", - "completeProfile1": "اكمل الملف الشخصي 1/3", - "completeProfile2": "اكمل الملف الشخصي 2/3", - "completeProfile3": "اكمل الملف الشخصي 3/3", - "userInformation": "معلومات المتسخدم", - "faceRecognition": "تحقق مع بصمة الوجه", - "fingerPrint": "تحقق مع بصمة الاصبع", - "whatsapp": "تحقق مع Whatsapp", - "SMS": "رسائل قصيره", - "selectRole": "حدد الدور", - "userRoleOrTitle": "عنوان المستخدم", - "codeSentToEmail": "تم ارسال الرمز للايميل", - "number": "موبايل", - "phoneNumber": "رقم الهاتف", - "english": "English", - "provider": "Provider", - "title": "Hello", - "msg": "Hello {} in the {} world ", - "msg_named": "{} are written in the {lang} language", - "clickMe": "Click me", - "profile": { - "reset_password": { - "label": "Reset Password", - "username": "Username", - "password": "password" - } - }, - "clicked": { - "zero": "You clicked {} times!", - "one": "You clicked {} time!", - "two": "You clicked {} times!", - "few": "You clicked {} times!", - "many": "You clicked {} times!", - "other": "You clicked {} times!" - }, - "amount": { - "zero": "Your amount : {} ", - "one": "Your amount : {} ", - "two": "Your amount : {} ", - "few": "Your amount : {} ", - "many": "Your amount : {} ", - "other": "Your amount : {} " - }, - "gender": { - "male": "Hi man ;) ", - "female": "Hello girl :)", - "with_arg": { - "male": "Hi man ;) {}", - "female": "Hello girl :) {}" - } - }, - "reset_locale": "Reset Language", - "insert_otp_code": "ادخل الرمز", - "type_code": "الرجاء كتابة الرمز الذي أرسلناه إلى", - "resend_code": "أعد إرسال الرمز", - "check_code": "التحقق من الشفرة", - "time_will_expire": "إعادة إرسال الرمز بتنسيق", - "sec" : "ثانية", - "no_city_available": "لا توجد مدينة متاحة لهذا البلد", - "branch_created": "تم إنشاء الفرع بنجاح", - "branch_updated": "تم تحديث الفرع بنجاح", - "branch_deleted": "تم حذف الفرع بنجاح", - "dashboard_main": "لوحة القيادة / الصفحة الرئيسية", - "logo_brand": "الشعار / العلامة التجارية", - "remove": "إزالة", - "no_branch": "لم يتم إضافة فرع حتى الآن", - "login_once": "الرجاء تسجيل الدخول مرة واحدة", - "defineLicenese": "تحميل التراخيص والشهادات", - "description": "وصف", - "attachFile": "أرفق ملف", - "branchLocation": "معلومات الفرع والموقع", - "tapToEdit": "انقر للتعديل", - "myServiceBranches": "فروع خدمتي", - "enter_licence_detail": "الرجاء إدخال تفاصيل السجلات التجارية وإرفاق صور الترخيص", - "country": "بلد", - "city": "مدينة", - "editServices": "تحرير الخدمات" -} diff --git a/resources/langs/en-US.json b/resources/langs/en-US.json deleted file mode 100644 index 6eb9fc0..0000000 --- a/resources/langs/en-US.json +++ /dev/null @@ -1,183 +0,0 @@ -{ - "firstTimeLogIn": "First Time Log In", - "signUp": "Register", - "changeMobile": "Change Mobile", - "notifications": "Notifications", - "general": "General", - "defineLicences": "Register Licences", - "dealershipSettings": "Dealership Settings", - "changePassword": "Change Password", - "retrievePassword": "Retrieve Password", - "changeEmail": "Change Email", - "verify": "Verify", - "verified": "Verified", - "signOut": "Sign Out", - "enterEmail": "Enter Email and Password", - "enterNewEmail": "Enter New Email", - "enterNewPassword": "Enter New Password", - "enterCurrentPassword": "Enter Current Password", - "enterOldPassword": "Enter Old Password", - "confirm": "Confirm", - "completeProfile": "Complete Profile", - "enterNewPhoneNumber": "Enter New Phone Number", - "enterPhoneNumber": "Enter the login credentials", - "continu": "Continue", - "confirmPassword": "Confirm Password", - "createPassword": "Create Password", - "email": "Email", - "firstName": "First Name *", - "surname": "Surname *", - "confirmPass": "Confirm Password *", - "createPass": "Create Password *", - "newPassword": "New Password", - "forgetPassword": "Forget Password", - "forgetPasswordQ": "Forget Password?", - "recover": "Recover", - "forgetPasswordRecover": "Forget Password? Recover", - "editAccount": "Edit Account", - "change": "Change", - "verifyAccount": "Verify Account", - "login": "Login", - "log_in": "Log In", - "welcomeMessage": "Welcome To Mowater", - "welcomeDes": "You one stop place all your car needs", - "forgetPass": "Forget Password ?", - "phoneNumberVerified": "Phone Number Verified", - "verifyNewPassword": "Verify New Password", - "send": "Send", - "EnterPass": "Enter Password ?", - "retrivePassword": "Retrive password by one of following method", - "retriveOnPhone": "We will send the opt to your registered mobile number", - "retriveOnEmail": "We will send the opt to your registered email address", - "enterPhoneForVerfication": "Please enter your phone number We will send you the verification code", - "selectYourCountry": "Select Your Country", - "welcomeBack": "Welcome Back!!!", - "alreadySigned": " Already Signed Up and Logged In", - "emailChangedSuccessfully": "Email is Changed Successfully", - "passwordIsUpdated": "Password is Updated", - "passwordShouldContains": "Password Should contains Character, Number, Capital and small letters,", - " successfullyRegistered": " Successfully Registered, Please login once,", - "pleaseEnterSamePassword": "Please enter same password", - "firstNameMandatory": "First name is mandatory", - "surnameNameMandatory": "Surname is mandatory", - "passwordNameMandatory": "Password is mandatory", - "enterValidEmail": "Enter Valid Email", - "pleaseAcceptTerms": "Please accept terms", - "emailVerified": "Email is verified successfully", - "selectMethod": "Select Method", - "emailAddress": "Email Address", - "loginSelection": "Login Selection", - "selectCountryCode": "Please select Country Code", - "selectProviderRole": "Please select Provider Role", - "addPhoneNo": "Please add Phone No", - "onlyCustomerApp": "Sorry, Only Customer's can log in this app", - "imageUploaded": "Image is uploaded", - "fileLarger": "File is larger then 1KB", - "account": "Account", - "edit": "EDIT", - "imageDeleted": "Image is Deleted", - "dashboard": "Dashboard/Main Page", - "pickAddress": "Pick Address", - "pickLocation": "Pick Location", - "save": "Save", - "defineServices": "Define Services", - "selectBranch ": "Select Branch ", - "selectServiceCategory": "Select Service Category", - "defineBranches": "Define Branches", - "defineProviders": "Define Providers", - "closeAccount": "Close Account", - "createBranch": "Create Branch", - "updateBranch": "Update Branch", - "address": "Address", - "branchDescription": "Branch Description", - "branchName": "Branch Name", - "chooseCity": "Select City", - "chooseCountry": "Choose Country", - "selectAttachment": "Select Attachment", - "somethingWrong": "Something went wrong", - "documentsUploaded": "Documents uploaded successfully", - "update": "Update", - "termsOfService": "By creating an account you agree to our", - "terms": "Terms of Service and Privacy Policy", - "profileMsg": "Enter the details below and complete the profile info", - "branchInfo": "Branch Info and Services", - "profileCompleted": "Profile is Completed", - "selectLocationMap": "Select Location Map", - "licensesAndCertifications": "licenses & certifications", - "completeProfile1": "Complete Profile 1/3", - "completeProfile2": "Complete Profile 2/3", - "completeProfile3": "Complete Profile 3/3", - "userInformation": "User Information", - "provider": "Provider", - "faceRecognition": "Face Recognition", - "fingerPrint": "Finger Print", - "whatsapp": "With Whatsapp", - "SMS": "With SMS", - "selectRole": "Choose Role", - "userRoleOrTitle": "User role or title", - "codeSentToEmail": "Code is sent to email", - "number": "Number", - "phoneNumber": "Phone Number", - "english": "عربي", - "title": "Hello", - "msg": "Hello {} in the {} world ", - "msg_named": "{} are written in the {lang} language", - "clickMe": "Click me", - "profile": { - "reset_password": { - "label": "Reset Password", - "username": "Username", - "password": "password" - } - }, - "clicked": { - "zero": "You clicked {} times!", - "one": "You clicked {} time!", - "two": "You clicked {} times!", - "few": "You clicked {} times!", - "many": "You clicked {} times!", - "other": "You clicked {} times!" - }, - "amount": { - "zero": "Your amount : {} ", - "one": "Your amount : {} ", - "two": "Your amount : {} ", - "few": "Your amount : {} ", - "many": "Your amount : {} ", - "other": "Your amount : {} " - }, - "gender": { - "male": "Hi man ;) ", - "female": "Hello girl :)", - "with_arg": { - "male": "Hi man ;) {}", - "female": "Hello girl :) {}" - } - }, - "reset_locale": "Reset Language", - "insert_otp_code": "Enter the code", - "type_code": "Please type the code we sent to", - "resend_code": "Resend Code", - "check_code": "Check Code", - "time_will_expire": "Resend code in", - "sec" : "sec", - "no_city_available": "No City Available for this country", - "branch_created": "Branch is successfully created", - "branch_updated": "Branch is successfully Updated", - "branch_deleted": "Branch is successfully Deleted", - "dashboard_main": "Dashboard/Main Page", - "logo_brand": "Logo/Brand", - "remove": "Remove", - "no_branch": "No Branch Added Yet", - "login_once": "Please login once", - "defineLicenese": "Upload Licenses and Certificates", - "description": "Description", - "attachFile": "Attach File", - "branchLocation": "Branch info and Location", - "tapToEdit": "Tap to edit", - "myServiceBranches": "My Service Branches", - "enter_licence_detail": "Please enter the detail for commercial records and attach the license images", - "country": "country", - "city": "city", - "editServices": "Edit Services" -} diff --git a/resources/s.dart b/resources/s.dart deleted file mode 100644 index e69de29..0000000