diff --git a/assets/icons/payments/apple_pay.png b/assets/icons/payments/apple_pay.png new file mode 100644 index 0000000..1dc7504 Binary files /dev/null and b/assets/icons/payments/apple_pay.png differ diff --git a/assets/icons/payments/installments.png b/assets/icons/payments/installments.png new file mode 100644 index 0000000..b2b231b Binary files /dev/null and b/assets/icons/payments/installments.png differ diff --git a/assets/icons/payments/mada.png b/assets/icons/payments/mada.png new file mode 100644 index 0000000..905a5ba Binary files /dev/null and b/assets/icons/payments/mada.png differ diff --git a/assets/icons/payments/mastercard.png b/assets/icons/payments/mastercard.png new file mode 100644 index 0000000..5d8b1fa Binary files /dev/null and b/assets/icons/payments/mastercard.png differ diff --git a/assets/icons/payments/tamara_ar.png b/assets/icons/payments/tamara_ar.png new file mode 100644 index 0000000..f1587ad Binary files /dev/null and b/assets/icons/payments/tamara_ar.png differ diff --git a/assets/icons/payments/tamara_en.png b/assets/icons/payments/tamara_en.png new file mode 100644 index 0000000..84d85b2 Binary files /dev/null and b/assets/icons/payments/tamara_en.png differ diff --git a/assets/icons/payments/visa.png b/assets/icons/payments/visa.png new file mode 100644 index 0000000..3a6d90d Binary files /dev/null and b/assets/icons/payments/visa.png differ diff --git a/lib/classes/consts.dart b/lib/classes/consts.dart index 2297ca5..c844f1c 100644 --- a/lib/classes/consts.dart +++ b/lib/classes/consts.dart @@ -172,6 +172,14 @@ class MyAssets { static String icWhatsAppPng = "${assetPath}icons/ic_whatsapp.png"; static String icSmsPng = "${assetPath}icons/ic_sms.png"; static String icFingerprintPng = "${assetPath}icons/ic_fingerprint.png"; + + static String applePayPng = "${assetPath}icons/payments/apple_pay.png"; + static String installmentsPng = "${assetPath}icons/payments/installments.png"; + static String madaPng = "${assetPath}icons/payments/mada.png"; + static String mastercardPng = "${assetPath}icons/payments/mastercard.png"; + static String tamaraArPng = "${assetPath}icons/payments/tamara_ar.png"; + static String tamaraEngPng = "${assetPath}icons/payments/tamara_en.png"; + static String visaPng = "${assetPath}icons/payments/visa.png"; } RegExp numReg = RegExp(r".*[0-9].*"); diff --git a/lib/config/constants.dart b/lib/config/constants.dart deleted file mode 100644 index 8b13789..0000000 --- a/lib/config/constants.dart +++ /dev/null @@ -1 +0,0 @@ - diff --git a/lib/config/dependencies.dart b/lib/config/dependencies.dart index ccd7203..6357210 100644 --- a/lib/config/dependencies.dart +++ b/lib/config/dependencies.dart @@ -4,6 +4,7 @@ import 'package:injector/injector.dart'; import 'package:mc_common_app/api/api_client.dart'; import 'package:mc_common_app/classes/app_state.dart'; +import 'package:mc_common_app/repositories/ads_repo.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'; @@ -20,5 +21,6 @@ class AppDependencies { //repos injector.registerSingleton(() => UserRepoImp()); injector.registerSingleton(() => CommonRepoImp()); + injector.registerSingleton(() => AdsRepoImp()); } } diff --git a/lib/config/routes.dart b/lib/config/routes.dart index 81f25bc..a32a7b2 100644 --- a/lib/config/routes.dart +++ b/lib/config/routes.dart @@ -56,6 +56,7 @@ class AppRoutes { static const String adsDetailView = "/adsDetailView"; static const String createAdView = "/createAdView"; static const String bookAppointmenServicesView = "/bookAppointmenServicesView"; + static const String paymentMethodsView = "/paymentMethodsView"; //Subcriptions diff --git a/lib/repositories/ads_repo.dart b/lib/repositories/ads_repo.dart new file mode 100644 index 0000000..f4d1520 --- /dev/null +++ b/lib/repositories/ads_repo.dart @@ -0,0 +1,337 @@ +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/advertisment_models/ad_details_model.dart'; +import 'package:mc_common_app/models/advertisment_models/ads_duration_model.dart'; +import 'package:mc_common_app/models/advertisment_models/special_service_model.dart'; +import 'package:mc_common_app/models/advertisment_models/vehicle_details_models.dart'; +import 'package:mc_common_app/models/generic_resp_model.dart'; + +abstract class AdsRepo { + Future> getVehicleTypes(); + + Future> getVehicleModels({required int vehicleTypeId}); + + Future> getVehicleModelYears({required int vehicleTypeId}); + + Future> getVehicleColors({required int vehicleTypeId}); + + Future> getVehicleConditions({required int vehicleTypeId}); + + Future> getVehicleCategories({required int vehicleTypeId}); + + Future> getVehicleMileages({required int vehicleTypeId}); + + Future> getVehicleTransmission({required int vehicleTypeId}); + + Future> getVehicleSellerTypes({required int vehicleTypeId}); + + Future> getVehicleCountries(); + + Future> getVehicleCities({required int countryId}); + + Future> getVehicleDamageParts(); + + Future getVehicleDetails({required int vehicleTypeId}); + + Future> getAdsDuration(); + + Future> getSpecialServices({required int specialServiceId}); + + Future createNewAd({required AdsCreationPayloadModel adsCreationPayloadModel}); + + Future> getAllAds({required bool isMyAds}); + + Future> getMyAds(); +} + +class AdsRepoImp implements AdsRepo { + ApiClient apiClient = injector.get(); + AppState appState = injector.get(); + + @override + Future> getVehicleTypes() async { + GenericRespModel adsGenericModel = await apiClient.getJsonForObject(token: appState.getUser.data!.accessToken, (json) => GenericRespModel.fromJson(json), ApiConsts.vehicleTypeGet); + List vehicleTypes = List.generate(adsGenericModel.data.length, (index) => VehicleTypeModel.fromJson(adsGenericModel.data[index])); + return vehicleTypes; + } + + @override + Future> getVehicleCategories({required int vehicleTypeId}) async { + var postParams = { + "VehicleType": vehicleTypeId.toString(), + }; + GenericRespModel adsGenericModel = + await apiClient.getJsonForObject(token: appState.getUser.data!.accessToken, (json) => GenericRespModel.fromJson(json), ApiConsts.vehicleCategoryGet, queryParameters: postParams); + List vehicleCategories = List.generate(adsGenericModel.data.length, (index) => VehicleCategoryModel.fromJson(adsGenericModel.data[index])); + return vehicleCategories; + } + + @override + Future> getVehicleCities({required int countryId}) async { + var postParams = { + "CountryID": countryId.toString(), + }; + GenericRespModel adsGenericModel = + await apiClient.getJsonForObject(token: appState.getUser.data!.accessToken, (json) => GenericRespModel.fromJson(json), ApiConsts.vehicleCityGet, queryParameters: postParams); + List vehicleCities = List.generate(adsGenericModel.data.length, (index) => VehicleCityModel.fromJson(adsGenericModel.data[index])); + return vehicleCities; + } + + @override + Future> getVehicleColors({required int vehicleTypeId}) async { + var postParams = { + "VehicleType": vehicleTypeId.toString(), + }; + GenericRespModel adsGenericModel = + await apiClient.getJsonForObject(token: appState.getUser.data!.accessToken, (json) => GenericRespModel.fromJson(json), ApiConsts.vehicleColorGet, queryParameters: postParams); + List vehicleColors = List.generate(adsGenericModel.data.length, (index) => VehicleColorModel.fromJson(adsGenericModel.data[index])); + return vehicleColors; + } + + @override + Future> getVehicleConditions({required int vehicleTypeId}) async { + var postParams = { + "VehicleType": vehicleTypeId.toString(), + }; + GenericRespModel adsGenericModel = + await apiClient.getJsonForObject(token: appState.getUser.data!.accessToken, (json) => GenericRespModel.fromJson(json), ApiConsts.vehicleConditionGet, queryParameters: postParams); + List vehicleConditions = List.generate(adsGenericModel.data.length, (index) => VehicleConditionModel.fromJson(adsGenericModel.data[index])); + return vehicleConditions; + } + + @override + Future> getVehicleCountries() async { + GenericRespModel adsGenericModel = await apiClient.getJsonForObject( + token: appState.getUser.data!.accessToken, + (json) => GenericRespModel.fromJson(json), + ApiConsts.vehicleCountryGet, + ); + List vehicleConditions = List.generate(adsGenericModel.data.length, (index) => VehicleCountryModel.fromJson(adsGenericModel.data[index])); + return vehicleConditions; + } + + @override + Future> getVehicleMileages({required int vehicleTypeId}) async { + var postParams = { + "VehicleType": vehicleTypeId.toString(), + }; + GenericRespModel adsGenericModel = + await apiClient.getJsonForObject(token: appState.getUser.data!.accessToken, (json) => GenericRespModel.fromJson(json), ApiConsts.vehicleMileageGet, queryParameters: postParams); + List vehicleMileages = List.generate(adsGenericModel.data.length, (index) => VehicleMileageModel.fromJson(adsGenericModel.data[index])); + return vehicleMileages; + } + + @override + Future> getVehicleModelYears({required int vehicleTypeId}) async { + var postParams = { + "VehicleType": vehicleTypeId.toString(), + }; + GenericRespModel adsGenericModel = + await apiClient.getJsonForObject(token: appState.getUser.data!.accessToken, (json) => GenericRespModel.fromJson(json), ApiConsts.vehicleModelYearGet, queryParameters: postParams); + List vehicleModelYears = List.generate(adsGenericModel.data.length, (index) => VehicleYearModel.fromJson(adsGenericModel.data[index])); + return vehicleModelYears; + } + + @override + Future> getVehicleModels({required int vehicleTypeId}) async { + var postParams = { + "VehicleType": vehicleTypeId.toString(), + }; + GenericRespModel adsGenericModel = + await apiClient.getJsonForObject(token: appState.getUser.data!.accessToken, (json) => GenericRespModel.fromJson(json), ApiConsts.vehicleModelGet, queryParameters: postParams); + List vehicleModels = List.generate(adsGenericModel.data.length, (index) => VehicleModel.fromJson(adsGenericModel.data[index])); + return vehicleModels; + } + + @override + Future> getVehicleSellerTypes({required int vehicleTypeId}) async { + var postParams = { + "VehicleType": vehicleTypeId.toString(), + }; + GenericRespModel adsGenericModel = + await apiClient.getJsonForObject(token: appState.getUser.data!.accessToken, (json) => GenericRespModel.fromJson(json), ApiConsts.vehicleSellerTypeGet, queryParameters: postParams); + List vehicleSellerTypes = List.generate(adsGenericModel.data.length, (index) => VehicleSellerTypeModel.fromJson(adsGenericModel.data[index])); + return vehicleSellerTypes; + } + + @override + Future> getVehicleTransmission({required int vehicleTypeId}) async { + var postParams = { + "VehicleType": vehicleTypeId.toString(), + }; + GenericRespModel adsGenericModel = + await apiClient.getJsonForObject(token: appState.getUser.data!.accessToken, (json) => GenericRespModel.fromJson(json), ApiConsts.vehicleTransmissionGet, queryParameters: postParams); + List vehicleTransmissions = List.generate(adsGenericModel.data.length, (index) => VehicleTransmissionModel.fromJson(adsGenericModel.data[index])); + return vehicleTransmissions; + } + + @override + Future getVehicleDetails({required int vehicleTypeId}) async { + var postParams = { + "vehicleType": vehicleTypeId.toString(), + "isVehicleBrand": "true", + "vehicleBrand": "0", + "isVehicleCategory": "true", + "isVehicleColor": "true", + "isVehicleCondition": "true", + "isVehicleMileage": "true", + "isVehicleModel": "true", + "isVehicleModelYear": "true", + "isVehiclePriceRange": "true", + "isVehiclePricingMethod": "true", + "isVehcileSellerType": "true", + "isVehicleTransmission": "true", + "isCountry": "true" + }; + + String token = appState.getUser.data!.accessToken ?? ""; + GenericRespModel adsGenericModel = await apiClient.postJsonForObject( + (json) => GenericRespModel.fromJson(json), + ApiConsts.vehicleDetailsMaster, + postParams, + token: token, + ); + VehicleDetailsModel vehicleDetails = VehicleDetailsModel.fromJson(adsGenericModel.data); + return vehicleDetails; + } + + @override + Future> getVehicleDamageParts() async { + GenericRespModel adsGenericModel = await apiClient.getJsonForObject( + token: appState.getUser.data!.accessToken, + (json) => GenericRespModel.fromJson(json), + ApiConsts.vehicleDamagePartGet, + ); + List vehicleParts = List.generate(adsGenericModel.data.length, (index) => VehiclePartModel.fromJson(adsGenericModel.data[index])); + return vehicleParts; + } + + @override + Future> getAdsDuration() async { + GenericRespModel adsGenericModel = await apiClient.getJsonForObject( + token: appState.getUser.data!.accessToken, + (json) => GenericRespModel.fromJson(json), + ApiConsts.vehicleAdsDurationGet, + ); + List vehicleAdsDuration = List.generate(adsGenericModel.data.length, (index) => AdsDurationModel.fromJson(adsGenericModel.data[index])); + return vehicleAdsDuration; + } + + @override + Future> getSpecialServices({required int specialServiceId}) async { + var params = { + "SpecialServiceType": specialServiceId.toString(), + }; + GenericRespModel adsGenericModel = + await apiClient.getJsonForObject(token: appState.getUser.data!.accessToken, (json) => GenericRespModel.fromJson(json), ApiConsts.vehicleAdsSpecialServicesGet, queryParameters: params); + List vehicleAdsDuration = List.generate(adsGenericModel.data.length, (index) => SpecialServiceModel.fromJson(adsGenericModel.data[index])); + return vehicleAdsDuration; + } + + @override + Future createNewAd({required AdsCreationPayloadModel adsCreationPayloadModel}) async { + List vehiclePostingImages = []; + adsCreationPayloadModel.vehiclePosting!.vehiclePostingImages?.forEach((element) { + var imageMap = { + "id": 0, + "imageName": element.imageName, + "imageUrl": element.imageUrl, + "imageStr": element.imageStr, + "vehiclePostingID": 0, + "vehiclePosting": null, + }; + vehiclePostingImages.add(imageMap); + }); + + List vehiclePostingDamageParts = []; + adsCreationPayloadModel.vehiclePosting!.vehiclePostingDamageParts?.forEach((element) { + var imageMap = { + "id": 0, + "comment": element.comment, + "vehicleImageBase64": element.vehicleImageBase64, + "vehicleDamagePartID": element.vehicleDamagePartID, + "vehiclePostingID": 0, + "isActive": true + }; + vehiclePostingDamageParts.add(imageMap); + }); + var postParams = { + "ads": { + "id": 0, + "adsDurationID": adsCreationPayloadModel.ads!.adsDurationID, + "startDate": adsCreationPayloadModel.ads!.startDate, + "countryId": adsCreationPayloadModel.ads!.countryId, + "specialServiceIDs": adsCreationPayloadModel.ads!.specialServiceIDs, + "isMCHandled": false + }, + "vehiclePosting": { + "id": 0, + "userID": adsCreationPayloadModel.vehiclePosting!.userID, + "vehicleType": adsCreationPayloadModel.vehiclePosting!.vehicleType, + "vehicleModelID": adsCreationPayloadModel.vehiclePosting!.vehicleModelID, + "vehicleModelYearID": adsCreationPayloadModel.vehiclePosting!.vehicleModelYearID, + "vehicleColorID": adsCreationPayloadModel.vehiclePosting!.vehicleColorID, + "vehicleCategoryID": adsCreationPayloadModel.vehiclePosting!.vehicleCategoryID, + "vehicleConditionID": adsCreationPayloadModel.vehiclePosting!.vehicleConditionID, + "vehicleMileageID": adsCreationPayloadModel.vehiclePosting!.vehicleMileageID, + "vehicleTransmissionID": adsCreationPayloadModel.vehiclePosting!.vehicleTransmissionID, + "vehicleSellerTypeID": adsCreationPayloadModel.vehiclePosting!.vehicleSellerTypeID, + "cityID": adsCreationPayloadModel.vehiclePosting!.cityID, + "price": adsCreationPayloadModel.vehiclePosting!.price, + "vehicleVIN": adsCreationPayloadModel.vehiclePosting!.vehicleVIN, + "vehicleDescription": adsCreationPayloadModel.vehiclePosting!.vehicleDescription, + "vehicleTitle": adsCreationPayloadModel.vehiclePosting!.vehicleTitle, + "vehicleDescriptionN": adsCreationPayloadModel.vehiclePosting!.vehicleDescription, + "isFinanceAvailable": adsCreationPayloadModel.vehiclePosting!.isFinanceAvailable, + "warantyYears": adsCreationPayloadModel.vehiclePosting!.warantyYears, + "demandAmount": adsCreationPayloadModel.vehiclePosting!.demandAmount, + // "adStatus": 1, + "vehiclePostingImages": vehiclePostingImages, + "vehiclePostingDamageParts": vehiclePostingDamageParts + } + }; + + String token = appState.getUser.data!.accessToken ?? ""; + GenericRespModel adsGenericModel = await apiClient.postJsonForObject( + (json) => GenericRespModel.fromJson(json), + ApiConsts.vehicleAdsSingleStepCreate, + postParams, + token: token, + ); + + return Future.value(adsGenericModel); + } + + @override + Future> getAllAds({required isMyAds}) async { + var params = { + "userID": appState.getUser.data!.userInfo!.userId ?? "", + }; + + GenericRespModel adsGenericModel = await apiClient.getJsonForObject( + token: appState.getUser.data!.accessToken, + (json) => GenericRespModel.fromJson(json), + ApiConsts.vehicleAdsGet, + queryParameters: isMyAds ? params : null, + ); + List vehicleAdsDetails = List.generate(adsGenericModel.data.length, (index) => AdDetailsModel.fromJson(adsGenericModel.data[index])); + return vehicleAdsDetails; + } + + @override + Future> getMyAds() async { + var params = { + "userID": appState.getUser.data!.userInfo!.userId ?? "", + }; + GenericRespModel adsGenericModel = await apiClient.getJsonForObject( + token: appState.getUser.data!.accessToken, + (json) => GenericRespModel.fromJson(json), + queryParameters: params, + ApiConsts.vehicleAdsGet, + ); + List vehicleAdsDetails = List.generate(adsGenericModel.data.length, (index) => AdDetailsModel.fromJson(adsGenericModel.data[index])); + return vehicleAdsDetails; + } +} diff --git a/lib/repositories/common_repo.dart b/lib/repositories/common_repo.dart index 7474267..7101638 100644 --- a/lib/repositories/common_repo.dart +++ b/lib/repositories/common_repo.dart @@ -23,41 +23,6 @@ abstract class CommonRepo { Future getRoles(); - Future> getVehicleTypes(); - - Future> getVehicleModels({required int vehicleTypeId}); - - Future> getVehicleModelYears({required int vehicleTypeId}); - - Future> getVehicleColors({required int vehicleTypeId}); - - Future> getVehicleConditions({required int vehicleTypeId}); - - Future> getVehicleCategories({required int vehicleTypeId}); - - Future> getVehicleMileages({required int vehicleTypeId}); - - Future> getVehicleTransmission({required int vehicleTypeId}); - - Future> getVehicleSellerTypes({required int vehicleTypeId}); - - Future> getVehicleCountries(); - - Future> getVehicleCities({required int countryId}); - - Future> getVehicleDamageParts(); - - Future getVehicleDetails({required int vehicleTypeId}); - - Future> getAdsDuration(); - - Future> getSpecialServices({required int specialServiceId}); - - Future createNewAd({required AdsCreationPayloadModel adsCreationPayloadModel}); - - Future> getAllAds({required bool isMyAds}); - - Future> getMyAds(); Future> getMyAppointments(); @@ -92,290 +57,6 @@ class CommonRepoImp implements CommonRepo { return await apiClient.getJsonForObject((json) => Role.fromJson(json), ApiConsts.GetProviderRoles); } - @override - Future> getVehicleTypes() async { - GenericRespModel adsGenericModel = await apiClient.getJsonForObject(token: appState.getUser.data!.accessToken, (json) => GenericRespModel.fromJson(json), ApiConsts.vehicleTypeGet); - List vehicleTypes = List.generate(adsGenericModel.data.length, (index) => VehicleTypeModel.fromJson(adsGenericModel.data[index])); - return vehicleTypes; - } - - @override - Future> getVehicleCategories({required int vehicleTypeId}) async { - var postParams = { - "VehicleType": vehicleTypeId.toString(), - }; - GenericRespModel adsGenericModel = - await apiClient.getJsonForObject(token: appState.getUser.data!.accessToken, (json) => GenericRespModel.fromJson(json), ApiConsts.vehicleCategoryGet, queryParameters: postParams); - List vehicleCategories = List.generate(adsGenericModel.data.length, (index) => VehicleCategoryModel.fromJson(adsGenericModel.data[index])); - return vehicleCategories; - } - - @override - Future> getVehicleCities({required int countryId}) async { - var postParams = { - "CountryID": countryId.toString(), - }; - GenericRespModel adsGenericModel = - await apiClient.getJsonForObject(token: appState.getUser.data!.accessToken, (json) => GenericRespModel.fromJson(json), ApiConsts.vehicleCityGet, queryParameters: postParams); - List vehicleCities = List.generate(adsGenericModel.data.length, (index) => VehicleCityModel.fromJson(adsGenericModel.data[index])); - return vehicleCities; - } - - @override - Future> getVehicleColors({required int vehicleTypeId}) async { - var postParams = { - "VehicleType": vehicleTypeId.toString(), - }; - GenericRespModel adsGenericModel = - await apiClient.getJsonForObject(token: appState.getUser.data!.accessToken, (json) => GenericRespModel.fromJson(json), ApiConsts.vehicleColorGet, queryParameters: postParams); - List vehicleColors = List.generate(adsGenericModel.data.length, (index) => VehicleColorModel.fromJson(adsGenericModel.data[index])); - return vehicleColors; - } - - @override - Future> getVehicleConditions({required int vehicleTypeId}) async { - var postParams = { - "VehicleType": vehicleTypeId.toString(), - }; - GenericRespModel adsGenericModel = - await apiClient.getJsonForObject(token: appState.getUser.data!.accessToken, (json) => GenericRespModel.fromJson(json), ApiConsts.vehicleConditionGet, queryParameters: postParams); - List vehicleConditions = List.generate(adsGenericModel.data.length, (index) => VehicleConditionModel.fromJson(adsGenericModel.data[index])); - return vehicleConditions; - } - - @override - Future> getVehicleCountries() async { - GenericRespModel adsGenericModel = await apiClient.getJsonForObject( - token: appState.getUser.data!.accessToken, - (json) => GenericRespModel.fromJson(json), - ApiConsts.vehicleCountryGet, - ); - List vehicleConditions = List.generate(adsGenericModel.data.length, (index) => VehicleCountryModel.fromJson(adsGenericModel.data[index])); - return vehicleConditions; - } - - @override - Future> getVehicleMileages({required int vehicleTypeId}) async { - var postParams = { - "VehicleType": vehicleTypeId.toString(), - }; - GenericRespModel adsGenericModel = - await apiClient.getJsonForObject(token: appState.getUser.data!.accessToken, (json) => GenericRespModel.fromJson(json), ApiConsts.vehicleMileageGet, queryParameters: postParams); - List vehicleMileages = List.generate(adsGenericModel.data.length, (index) => VehicleMileageModel.fromJson(adsGenericModel.data[index])); - return vehicleMileages; - } - - @override - Future> getVehicleModelYears({required int vehicleTypeId}) async { - var postParams = { - "VehicleType": vehicleTypeId.toString(), - }; - GenericRespModel adsGenericModel = - await apiClient.getJsonForObject(token: appState.getUser.data!.accessToken, (json) => GenericRespModel.fromJson(json), ApiConsts.vehicleModelYearGet, queryParameters: postParams); - List vehicleModelYears = List.generate(adsGenericModel.data.length, (index) => VehicleYearModel.fromJson(adsGenericModel.data[index])); - return vehicleModelYears; - } - - @override - Future> getVehicleModels({required int vehicleTypeId}) async { - var postParams = { - "VehicleType": vehicleTypeId.toString(), - }; - GenericRespModel adsGenericModel = - await apiClient.getJsonForObject(token: appState.getUser.data!.accessToken, (json) => GenericRespModel.fromJson(json), ApiConsts.vehicleModelGet, queryParameters: postParams); - List vehicleModels = List.generate(adsGenericModel.data.length, (index) => VehicleModel.fromJson(adsGenericModel.data[index])); - return vehicleModels; - } - - @override - Future> getVehicleSellerTypes({required int vehicleTypeId}) async { - var postParams = { - "VehicleType": vehicleTypeId.toString(), - }; - GenericRespModel adsGenericModel = - await apiClient.getJsonForObject(token: appState.getUser.data!.accessToken, (json) => GenericRespModel.fromJson(json), ApiConsts.vehicleSellerTypeGet, queryParameters: postParams); - List vehicleSellerTypes = List.generate(adsGenericModel.data.length, (index) => VehicleSellerTypeModel.fromJson(adsGenericModel.data[index])); - return vehicleSellerTypes; - } - - @override - Future> getVehicleTransmission({required int vehicleTypeId}) async { - var postParams = { - "VehicleType": vehicleTypeId.toString(), - }; - GenericRespModel adsGenericModel = - await apiClient.getJsonForObject(token: appState.getUser.data!.accessToken, (json) => GenericRespModel.fromJson(json), ApiConsts.vehicleTransmissionGet, queryParameters: postParams); - List vehicleTransmissions = List.generate(adsGenericModel.data.length, (index) => VehicleTransmissionModel.fromJson(adsGenericModel.data[index])); - return vehicleTransmissions; - } - - @override - Future getVehicleDetails({required int vehicleTypeId}) async { - var postParams = { - "vehicleType": vehicleTypeId.toString(), - "isVehicleBrand": "true", - "vehicleBrand": "0", - "isVehicleCategory": "true", - "isVehicleColor": "true", - "isVehicleCondition": "true", - "isVehicleMileage": "true", - "isVehicleModel": "true", - "isVehicleModelYear": "true", - "isVehiclePriceRange": "true", - "isVehiclePricingMethod": "true", - "isVehcileSellerType": "true", - "isVehicleTransmission": "true", - "isCountry": "true" - }; - - String token = appState.getUser.data!.accessToken ?? ""; - GenericRespModel adsGenericModel = await apiClient.postJsonForObject( - (json) => GenericRespModel.fromJson(json), - ApiConsts.vehicleDetailsMaster, - postParams, - token: token, - ); - VehicleDetailsModel vehicleDetails = VehicleDetailsModel.fromJson(adsGenericModel.data); - return vehicleDetails; - } - - @override - Future> getVehicleDamageParts() async { - GenericRespModel adsGenericModel = await apiClient.getJsonForObject( - token: appState.getUser.data!.accessToken, - (json) => GenericRespModel.fromJson(json), - ApiConsts.vehicleDamagePartGet, - ); - List vehicleParts = List.generate(adsGenericModel.data.length, (index) => VehiclePartModel.fromJson(adsGenericModel.data[index])); - return vehicleParts; - } - - @override - Future> getAdsDuration() async { - GenericRespModel adsGenericModel = await apiClient.getJsonForObject( - token: appState.getUser.data!.accessToken, - (json) => GenericRespModel.fromJson(json), - ApiConsts.vehicleAdsDurationGet, - ); - List vehicleAdsDuration = List.generate(adsGenericModel.data.length, (index) => AdsDurationModel.fromJson(adsGenericModel.data[index])); - return vehicleAdsDuration; - } - - @override - Future> getSpecialServices({required int specialServiceId}) async { - var params = { - "SpecialServiceType": specialServiceId.toString(), - }; - GenericRespModel adsGenericModel = - await apiClient.getJsonForObject(token: appState.getUser.data!.accessToken, (json) => GenericRespModel.fromJson(json), ApiConsts.vehicleAdsSpecialServicesGet, queryParameters: params); - List vehicleAdsDuration = List.generate(adsGenericModel.data.length, (index) => SpecialServiceModel.fromJson(adsGenericModel.data[index])); - return vehicleAdsDuration; - } - - @override - Future createNewAd({required AdsCreationPayloadModel adsCreationPayloadModel}) async { - List vehiclePostingImages = []; - adsCreationPayloadModel.vehiclePosting!.vehiclePostingImages?.forEach((element) { - var imageMap = { - "id": 0, - "imageName": element.imageName, - "imageUrl": element.imageUrl, - "imageStr": element.imageStr, - "vehiclePostingID": 0, - "vehiclePosting": null, - }; - vehiclePostingImages.add(imageMap); - }); - - List vehiclePostingDamageParts = []; - adsCreationPayloadModel.vehiclePosting!.vehiclePostingDamageParts?.forEach((element) { - var imageMap = { - "id": 0, - "comment": element.comment, - "vehicleImageBase64": element.vehicleImageBase64, - "vehicleDamagePartID": element.vehicleDamagePartID, - "vehiclePostingID": 0, - "isActive": true - }; - vehiclePostingDamageParts.add(imageMap); - }); - var postParams = { - "ads": { - "id": 0, - "adsDurationID": adsCreationPayloadModel.ads!.adsDurationID, - "startDate": adsCreationPayloadModel.ads!.startDate, - "countryId": adsCreationPayloadModel.ads!.countryId, - "specialServiceIDs": adsCreationPayloadModel.ads!.specialServiceIDs, - "isMCHandled": false - }, - "vehiclePosting": { - "id": 0, - "userID": adsCreationPayloadModel.vehiclePosting!.userID, - "vehicleType": adsCreationPayloadModel.vehiclePosting!.vehicleType, - "vehicleModelID": adsCreationPayloadModel.vehiclePosting!.vehicleModelID, - "vehicleModelYearID": adsCreationPayloadModel.vehiclePosting!.vehicleModelYearID, - "vehicleColorID": adsCreationPayloadModel.vehiclePosting!.vehicleColorID, - "vehicleCategoryID": adsCreationPayloadModel.vehiclePosting!.vehicleCategoryID, - "vehicleConditionID": adsCreationPayloadModel.vehiclePosting!.vehicleConditionID, - "vehicleMileageID": adsCreationPayloadModel.vehiclePosting!.vehicleMileageID, - "vehicleTransmissionID": adsCreationPayloadModel.vehiclePosting!.vehicleTransmissionID, - "vehicleSellerTypeID": adsCreationPayloadModel.vehiclePosting!.vehicleSellerTypeID, - "cityID": adsCreationPayloadModel.vehiclePosting!.cityID, - "price": adsCreationPayloadModel.vehiclePosting!.price, - "vehicleVIN": adsCreationPayloadModel.vehiclePosting!.vehicleVIN, - "vehicleDescription": adsCreationPayloadModel.vehiclePosting!.vehicleDescription, - "vehicleTitle": adsCreationPayloadModel.vehiclePosting!.vehicleTitle, - "vehicleDescriptionN": adsCreationPayloadModel.vehiclePosting!.vehicleDescription, - "isFinanceAvailable": adsCreationPayloadModel.vehiclePosting!.isFinanceAvailable, - "warantyYears": adsCreationPayloadModel.vehiclePosting!.warantyYears, - "demandAmount": adsCreationPayloadModel.vehiclePosting!.demandAmount, - // "adStatus": 1, - "vehiclePostingImages": vehiclePostingImages, - "vehiclePostingDamageParts": vehiclePostingDamageParts - } - }; - - String token = appState.getUser.data!.accessToken ?? ""; - GenericRespModel adsGenericModel = await apiClient.postJsonForObject( - (json) => GenericRespModel.fromJson(json), - ApiConsts.vehicleAdsSingleStepCreate, - postParams, - token: token, - ); - - return Future.value(adsGenericModel); - } - - @override - Future> getAllAds({required isMyAds}) async { - var params = { - "userID": appState.getUser.data!.userInfo!.userId ?? "", - }; - - GenericRespModel adsGenericModel = await apiClient.getJsonForObject( - token: appState.getUser.data!.accessToken, - (json) => GenericRespModel.fromJson(json), - ApiConsts.vehicleAdsGet, - queryParameters: isMyAds ? params : null, - ); - List vehicleAdsDetails = List.generate(adsGenericModel.data.length, (index) => AdDetailsModel.fromJson(adsGenericModel.data[index])); - return vehicleAdsDetails; - } - - @override - Future> getMyAds() async { - var params = { - "userID": appState.getUser.data!.userInfo!.userId ?? "", - }; - GenericRespModel adsGenericModel = await apiClient.getJsonForObject( - token: appState.getUser.data!.accessToken, - (json) => GenericRespModel.fromJson(json), - queryParameters: params, - ApiConsts.vehicleAdsGet, - ); - List vehicleAdsDetails = List.generate(adsGenericModel.data.length, (index) => AdDetailsModel.fromJson(adsGenericModel.data[index])); - return vehicleAdsDetails; - } @override Future> getMyAppointments() async { diff --git a/lib/utils/utils.dart b/lib/utils/utils.dart index 9bdd7a7..ae599e0 100644 --- a/lib/utils/utils.dart +++ b/lib/utils/utils.dart @@ -156,6 +156,7 @@ class Utils { ); } + static InputDecoration txtField(String label) { return InputDecoration( border: InputBorder.none, diff --git a/lib/view_models/ad_view_model.dart b/lib/view_models/ad_view_model.dart index 0b91ef1..4b6bf5b 100644 --- a/lib/view_models/ad_view_model.dart +++ b/lib/view_models/ad_view_model.dart @@ -15,6 +15,7 @@ import 'package:mc_common_app/models/advertisment_models/ss_photo_schedule_model import 'package:mc_common_app/models/advertisment_models/vehicle_details_models.dart'; import 'package:mc_common_app/models/generic_resp_model.dart'; import 'package:mc_common_app/models/widgets_models.dart'; +import 'package:mc_common_app/repositories/ads_repo.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'; @@ -25,9 +26,11 @@ import 'package:mc_common_app/widgets/dropdown/dropdow_field.dart'; class AdVM extends BaseVM { final CommonRepo commonRepo; + final AdsRepo adsRepo; + final CommonServices commonServices; - AdVM({required this.commonServices, required this.commonRepo}); + AdVM({required this.commonServices, required this.commonRepo, required this.adsRepo}); AdCreationStepsEnum currentProgressStep = AdCreationStepsEnum.vehicleDetails; @@ -198,28 +201,28 @@ class AdVM extends BaseVM { Future getMyAds() async { isFetchingLists = true; - myAds = await commonRepo.getAllAds(isMyAds: true); + myAds = await adsRepo.getAllAds(isMyAds: true); isFetchingLists = true; notifyListeners(); } Future getExploreAds() async { - exploreAds = await commonRepo.getAllAds(isMyAds: false); + exploreAds = await adsRepo.getAllAds(isMyAds: false); notifyListeners(); } Future getVehicleTypes() async { - vehicleTypes = await commonRepo.getVehicleTypes(); + vehicleTypes = await adsRepo.getVehicleTypes(); notifyListeners(); } Future getVehicleAdsDuration() async { - vehicleAdsDurations = await commonRepo.getAdsDuration(); + vehicleAdsDurations = await adsRepo.getAdsDuration(); notifyListeners(); } Future getVehicleAdsSpecialServices() async { - vehicleAdsSpecialServices = await commonRepo.getSpecialServices(specialServiceId: 1); + vehicleAdsSpecialServices = await adsRepo.getSpecialServices(specialServiceId: 1); notifyListeners(); } @@ -232,14 +235,14 @@ class AdVM extends BaseVM { } isFetchingLists = true; notifyListeners(); - vehicleModels = await commonRepo.getVehicleModels(vehicleTypeId: vehicleTypeId.selectedId); - vehicleModelYears = await commonRepo.getVehicleModelYears(vehicleTypeId: vehicleTypeId.selectedId); - vehicleColors = await commonRepo.getVehicleColors(vehicleTypeId: vehicleTypeId.selectedId); - vehicleConditions = await commonRepo.getVehicleConditions(vehicleTypeId: vehicleTypeId.selectedId); - vehicleCategories = await commonRepo.getVehicleCategories(vehicleTypeId: vehicleTypeId.selectedId); - vehicleMileages = await commonRepo.getVehicleMileages(vehicleTypeId: vehicleTypeId.selectedId); - vehicleTransmissions = await commonRepo.getVehicleTransmission(vehicleTypeId: vehicleTypeId.selectedId); - vehicleCountries = await commonRepo.getVehicleCountries(); + vehicleModels = await adsRepo.getVehicleModels(vehicleTypeId: vehicleTypeId.selectedId); + vehicleModelYears = await adsRepo.getVehicleModelYears(vehicleTypeId: vehicleTypeId.selectedId); + vehicleColors = await adsRepo.getVehicleColors(vehicleTypeId: vehicleTypeId.selectedId); + vehicleConditions = await adsRepo.getVehicleConditions(vehicleTypeId: vehicleTypeId.selectedId); + vehicleCategories = await adsRepo.getVehicleCategories(vehicleTypeId: vehicleTypeId.selectedId); + vehicleMileages = await adsRepo.getVehicleMileages(vehicleTypeId: vehicleTypeId.selectedId); + vehicleTransmissions = await adsRepo.getVehicleTransmission(vehicleTypeId: vehicleTypeId.selectedId); + vehicleCountries = await adsRepo.getVehicleCountries(); isFetchingLists = false; notifyListeners(); } @@ -250,7 +253,7 @@ class AdVM extends BaseVM { } isFetchingLists = true; notifyListeners(); - vehicleDetails = await commonRepo.getVehicleDetails(vehicleTypeId: vehicleTypeId.selectedId); + vehicleDetails = await adsRepo.getVehicleDetails(vehicleTypeId: vehicleTypeId.selectedId); if (vehicleDetails != null) { vehicleModels = vehicleDetails!.vehicleModels!; @@ -404,7 +407,7 @@ class AdVM extends BaseVM { vehicleCountryId = id; isCountryFetching = true; notifyListeners(); - vehicleCities = await commonRepo.getVehicleCities(countryId: vehicleCountryId.selectedId); + vehicleCities = await adsRepo.getVehicleCities(countryId: vehicleCountryId.selectedId); isCountryFetching = false; notifyListeners(); } @@ -919,7 +922,7 @@ class AdVM extends BaseVM { } Future getVehicleDamagePartsList() async { - vehicleDamageParts = await commonRepo.getVehicleDamageParts(); + vehicleDamageParts = await adsRepo.getVehicleDamageParts(); notifyListeners(); } @@ -981,7 +984,7 @@ class AdVM extends BaseVM { ); AdsCreationPayloadModel adsCreationPayloadModel = AdsCreationPayloadModel(ads: ads, vehiclePosting: vehiclePosting); - GenericRespModel respModel = await commonRepo.createNewAd(adsCreationPayloadModel: adsCreationPayloadModel); + GenericRespModel respModel = await adsRepo.createNewAd(adsCreationPayloadModel: adsCreationPayloadModel); return Future.value(respModel.messageStatus); } @@ -1009,8 +1012,6 @@ class AdVM extends BaseVM { } } - - class VehicleDamageCard { List? partImages; SelectionModel? partSelectedId; diff --git a/lib/views/advertisement/ads_detail_view.dart b/lib/views/advertisement/ads_detail_view.dart index a3e8112..53f0e29 100644 --- a/lib/views/advertisement/ads_detail_view.dart +++ b/lib/views/advertisement/ads_detail_view.dart @@ -1,10 +1,12 @@ -import 'package:mc_common_app/views/advertisement/ads_images_slider.dart'; import 'package:flutter/material.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/advertisment_models/ad_details_model.dart'; import 'package:mc_common_app/theme/colors.dart'; +import 'package:mc_common_app/utils/navigator.dart'; +import 'package:mc_common_app/views/advertisement/ads_images_slider.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'; @@ -108,7 +110,9 @@ class AdsDetailView extends StatelessWidget { child: ShowFillButton( maxHeight: 55, title: "Reserve Ad", - onPressed: () {}, + onPressed: () { + navigateWithName(context, AppRoutes.paymentMethodsView); + }, ), ), 12.width, diff --git a/pubspec.lock b/pubspec.lock index 580abde..e5998c8 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -206,6 +206,14 @@ packages: url: "https://pub.dev" source: hosted version: "3.3.0" + flutter_inappwebview: + dependency: "direct main" + description: + name: flutter_inappwebview + sha256: f73505c792cf083d5566e1a94002311be497d984b5607f25be36d685cf6361cf + url: "https://pub.dev" + source: hosted + version: "5.7.2+3" flutter_lints: dependency: "direct dev" description: diff --git a/pubspec.yaml b/pubspec.yaml index 1f4ccf5..74ab43b 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -35,6 +35,7 @@ dependencies: badges: ^3.0.2 carousel_slider: ^4.2.1 dropdown_button2: ^2.0.0 + flutter_inappwebview: ^5.7.2+3 # google @@ -57,6 +58,7 @@ flutter: - assets/ - assets/langs/ - assets/icons/ + - assets/icons/payments/ - assets/images/ - assets/fonts/Poppins-Medium.ttf