Fixing JIRA Issues

aamir_dev
Faiz Hashmi 1 year ago
parent 7326886660
commit c7446a91b3

@ -720,5 +720,7 @@
"noAvailableItems": "لا توجد عناصر متاحة.", "noAvailableItems": "لا توجد عناصر متاحة.",
"serviceDeliveryType": "نوع تقديم الخدمة", "serviceDeliveryType": "نوع تقديم الخدمة",
"noImagesToShow": "لا توجد صور للعرض", "noImagesToShow": "لا توجد صور للعرض",
"updateGroupServices": "تحديث خدمات المجموعة" "updateGroupServices": "تحديث خدمات المجموعة",
"addCommentsHere": "أضف التعليقات هنا",
"waitForBranchVerification": "يرجى الانتظار حتى يتم التحقق من الفرع."
} }

@ -718,5 +718,8 @@
"noAvailableItems": "There are no available items.", "noAvailableItems": "There are no available items.",
"serviceDeliveryType": "Service Delivery Type", "serviceDeliveryType": "Service Delivery Type",
"noImagesToShow": "No Images to Show", "noImagesToShow": "No Images to Show",
"updateGroupServices": "Update Group Services" "updateGroupServices": "Update Group Services",
"addCommentsHere": "Add comments here",
"waitForBranchVerification": "Please wait for the branch verification."
} }

@ -14,7 +14,7 @@ class ApiConsts {
static String basicComplete = "${baseUrlServices}api/Register/BasicComplete"; static String basicComplete = "${baseUrlServices}api/Register/BasicComplete";
static String refreshToken = "${baseUrlServices}api/Account/RefreshToken"; static String refreshToken = "${baseUrlServices}api/Account/RefreshToken";
static String signalRUrl = "$baseUrl/McHub"; static String signalRUrl = "${baseUrl}McHub";
//User //User
static String Login_V1 = "${baseUrlServices}api/Account/Login_V1"; static String Login_V1 = "${baseUrlServices}api/Account/Login_V1";

@ -736,7 +736,9 @@ class CodegenLoader extends AssetLoader{
"noAvailableItems": "لا توجد عناصر متاحة.", "noAvailableItems": "لا توجد عناصر متاحة.",
"serviceDeliveryType": "نوع تقديم الخدمة", "serviceDeliveryType": "نوع تقديم الخدمة",
"noImagesToShow": "لا توجد صور للعرض", "noImagesToShow": "لا توجد صور للعرض",
"updateGroupServices": "تحديث خدمات المجموعة" "updateGroupServices": "تحديث خدمات المجموعة",
"addCommentsHere": "أضف التعليقات هنا",
"waitForBranchVerification": "يرجى الانتظار حتى يتم التحقق من الفرع."
}; };
static const Map<String,dynamic> en_US = { static const Map<String,dynamic> en_US = {
"firstTimeLogIn": "First Time Log In", "firstTimeLogIn": "First Time Log In",
@ -1458,7 +1460,9 @@ static const Map<String,dynamic> en_US = {
"noAvailableItems": "There are no available items.", "noAvailableItems": "There are no available items.",
"serviceDeliveryType": "Service Delivery Type", "serviceDeliveryType": "Service Delivery Type",
"noImagesToShow": "No Images to Show", "noImagesToShow": "No Images to Show",
"updateGroupServices": "Update Group Services" "updateGroupServices": "Update Group Services",
"addCommentsHere": "Add comments here",
"waitForBranchVerification": "Please wait for the branch verification."
}; };
static const Map<String, Map<String,dynamic>> mapLocales = {"ar_SA": ar_SA, "en_US": en_US}; static const Map<String, Map<String,dynamic>> mapLocales = {"ar_SA": ar_SA, "en_US": en_US};
} }

@ -1,6 +1,6 @@
// DO NOT EDIT. This is code generated via package:easy_localization/generate.dart // DO NOT EDIT. This is code generated via package:easy_localization/generate.dart
abstract class LocaleKeys { abstract class LocaleKeys {
static const firstTimeLogIn = 'firstTimeLogIn'; static const firstTimeLogIn = 'firstTimeLogIn';
static const signUp = 'signUp'; static const signUp = 'signUp';
static const changeMobile = 'changeMobile'; static const changeMobile = 'changeMobile';
@ -47,7 +47,7 @@ abstract class LocaleKeys {
static const emailChangedSuccessfully = 'emailChangedSuccessfully'; static const emailChangedSuccessfully = 'emailChangedSuccessfully';
static const passwordIsUpdated = 'passwordIsUpdated'; static const passwordIsUpdated = 'passwordIsUpdated';
static const passwordShouldContains = 'passwordShouldContains'; static const passwordShouldContains = 'passwordShouldContains';
static const successfullyRegistered = ' successfullyRegistered'; static const successfullyRegistered = ' successfullyRegistered';
static const pleaseEnterSamePassword = 'pleaseEnterSamePassword'; static const pleaseEnterSamePassword = 'pleaseEnterSamePassword';
static const firstNameMandatory = 'firstNameMandatory'; static const firstNameMandatory = 'firstNameMandatory';
static const surnameNameMandatory = 'surnameNameMandatory'; static const surnameNameMandatory = 'surnameNameMandatory';
@ -700,4 +700,7 @@ abstract class LocaleKeys {
static const serviceDeliveryType = 'serviceDeliveryType'; static const serviceDeliveryType = 'serviceDeliveryType';
static const noImagesToShow = 'noImagesToShow'; static const noImagesToShow = 'noImagesToShow';
static const updateGroupServices = 'updateGroupServices'; static const updateGroupServices = 'updateGroupServices';
static const addCommentsHere = 'addCommentsHere';
static const waitForBranchVerification = 'waitForBranchVerification';
} }

@ -411,6 +411,7 @@ class DamageReport {
isActive = json['isActive']; isActive = json['isActive'];
vehicleDamagePartID = json['vehicleDamagePartID']; vehicleDamagePartID = json['vehicleDamagePartID'];
partName = json['partName']; partName = json['partName'];
comment = json['comment'];
} }
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {

@ -6,9 +6,20 @@ class AdsDurationModel {
int? countryID; int? countryID;
bool? isActive; bool? isActive;
String? countryName; String? countryName;
String? currency;
bool? isSelected; bool? isSelected;
AdsDurationModel({this.id, this.name, this.days, this.price, this.countryID, this.isActive, this.countryName, this.isSelected}); AdsDurationModel({
this.id,
this.name,
this.days,
this.price,
this.countryID,
this.isActive,
this.countryName,
this.currency,
this.isSelected,
});
AdsDurationModel.fromJson(Map<String, dynamic> json) { AdsDurationModel.fromJson(Map<String, dynamic> json) {
id = json['id']; id = json['id'];
@ -18,6 +29,7 @@ class AdsDurationModel {
countryID = json['countryID']; countryID = json['countryID'];
isActive = json['isActive']; isActive = json['isActive'];
countryName = json['countryName']; countryName = json['countryName'];
currency = json['currency'];
isSelected = false; isSelected = false;
} }
@ -30,6 +42,7 @@ class AdsDurationModel {
data['countryID'] = countryID; data['countryID'] = countryID;
data['isActive'] = isActive; data['isActive'] = isActive;
data['countryName'] = countryName; data['countryName'] = countryName;
data['currency'] = currency;
return data; return data;
} }
} }

@ -81,7 +81,7 @@ class Office {
String? officeAreaName; String? officeAreaName;
String? officeAreaNameN; String? officeAreaNameN;
int? cityID; int? cityID;
String? city; CitySSModel? city;
int? specialServiceID; int? specialServiceID;
Office({this.id, this.officeAreaName, this.officeAreaNameN, this.cityID, this.city, this.specialServiceID}); Office({this.id, this.officeAreaName, this.officeAreaNameN, this.cityID, this.city, this.specialServiceID});
@ -91,11 +91,41 @@ class Office {
officeAreaName = json['officeAreaName']; officeAreaName = json['officeAreaName'];
officeAreaNameN = json['officeAreaNameN']; officeAreaNameN = json['officeAreaNameN'];
cityID = json['cityID']; cityID = json['cityID'];
city = json['city']; if (json['city'] != null) {
city = json['city'] != null ? CitySSModel.fromJson(json['city']) : null;
}
specialServiceID = json['specialServiceID']; specialServiceID = json['specialServiceID'];
} }
} }
class CitySSModel {
int? id;
String? cityName;
String? cityNameN;
int? countryID;
String? country;
bool? isActive;
int? createdBy;
String? createdOn;
String? modifiedBy;
String? modifiedOn;
CitySSModel({this.id, this.cityName, this.cityNameN, this.countryID, this.country, this.isActive, this.createdBy, this.createdOn, this.modifiedBy, this.modifiedOn});
CitySSModel.fromJson(Map<String, dynamic> json) {
id = json['id'];
cityName = json['cityName'];
cityNameN = json['cityNameN'];
countryID = json['countryID'];
country = json['country'];
isActive = json['isActive'];
createdBy = json['createdBy'];
createdOn = json['createdOn'];
modifiedBy = json['modifiedBy'];
modifiedOn = json['modifiedOn'];
}
}
class SpecialServiceModelForAds { class SpecialServiceModelForAds {
int? adsID; int? adsID;
int? specialServiceID; int? specialServiceID;
@ -126,7 +156,6 @@ class SpecialServiceModelForAds {
appointmentStatusEnum = (json['appointmentStatus'] as int).toAppointmentStatusEnum(); appointmentStatusEnum = (json['appointmentStatus'] as int).toAppointmentStatusEnum();
appointmentDate = json['appointmentDate']; appointmentDate = json['appointmentDate'];
appointmentStatusId = json['appointmentStatus']; appointmentStatusId = json['appointmentStatus'];
} }
@override @override

@ -26,17 +26,17 @@ class Category {
String? message; String? message;
factory Category.fromJson(Map<String, dynamic> json) => Category( factory Category.fromJson(Map<String, dynamic> json) => Category(
totalItemsCount: json["totalItemsCount"] == null ? null : json["totalItemsCount"], totalItemsCount: json["totalItemsCount"],
data: json["data"] == null ? null : List<CategoryData>.from(json["data"].map((x) => CategoryData.fromJson(x))), data: json["data"] == null ? null : List<CategoryData>.from(json["data"].map((x) => CategoryData.fromJson(x))),
messageStatus: json["messageStatus"] == null ? null : json["messageStatus"], messageStatus: json["messageStatus"],
message: json["message"] == null ? null : json["message"], message: json["message"],
); );
Map<String, dynamic> toJson() => { Map<String, dynamic> toJson() => {
"totalItemsCount": totalItemsCount == null ? null : totalItemsCount, "totalItemsCount": totalItemsCount,
"data": data == null ? null : List<dynamic>.from(data!.map((x) => x.toJson())), "data": data == null ? null : List<dynamic>.from(data!.map((x) => x.toJson())),
"messageStatus": messageStatus == null ? null : messageStatus, "messageStatus": messageStatus,
"message": message == null ? null : message, "message": message,
}; };
} }
@ -63,18 +63,18 @@ class CategoryData extends Equatable {
List<ServiceModel>? services; List<ServiceModel>? services;
factory CategoryData.fromJson(Map<String, dynamic> json) => CategoryData( factory CategoryData.fromJson(Map<String, dynamic> json) => CategoryData(
id: json["id"] == null ? null : json["id"], id: json["id"],
categoryName: json["categoryName"] == null ? null : json["categoryName"], categoryName: json["categoryName"],
categoryNameN: json["categoryNameN"] == null ? null : json["categoryNameN"], categoryNameN: json["categoryNameN"],
serviceCategoryIconUrl: json["serviceCategoryIconUrl"], serviceCategoryIconUrl: json["serviceCategoryIconUrl"],
serviceCategoryImageUrl: json["serviceCategoryImageUrl"], serviceCategoryImageUrl: json["serviceCategoryImageUrl"],
services: [], services: [],
); );
Map<String, dynamic> toJson() => { Map<String, dynamic> toJson() => {
"id": id == null ? null : id, "id": id,
"categoryName": categoryName == null ? null : categoryName, "categoryName": categoryName,
"categoryNameN": categoryNameN == null ? null : categoryNameN, "categoryNameN": categoryNameN,
"serviceCategoryIconUrl": serviceCategoryIconUrl, "serviceCategoryIconUrl": serviceCategoryIconUrl,
"serviceCategoryImageUrl": serviceCategoryImageUrl, "serviceCategoryImageUrl": serviceCategoryImageUrl,
}; };

@ -1,3 +1,5 @@
import 'dart:developer';
import 'package:mc_common_app/api/api_client.dart'; import 'package:mc_common_app/api/api_client.dart';
import 'package:mc_common_app/classes/app_state.dart'; import 'package:mc_common_app/classes/app_state.dart';
import 'package:mc_common_app/classes/consts.dart'; import 'package:mc_common_app/classes/consts.dart';
@ -76,6 +78,8 @@ class AdsRepoImp implements AdsRepo {
@override @override
Future<GenericRespModel> createOrUpdateAd({required AdsCreationPayloadModel adsCreationPayloadModel, required bool isCreateNew}) async { Future<GenericRespModel> createOrUpdateAd({required AdsCreationPayloadModel adsCreationPayloadModel, required bool isCreateNew}) async {
List vehiclePostingImages = []; List vehiclePostingImages = [];
log("adsCreationPayloadModel.ads!.adsDurationID,: ${adsCreationPayloadModel.ads!.adsDurationID}");
adsCreationPayloadModel.vehiclePosting!.vehiclePostingImages?.forEach((element) { adsCreationPayloadModel.vehiclePosting!.vehiclePostingImages?.forEach((element) {
var imageMap = { var imageMap = {
"id": element.id ?? 0, "id": element.id ?? 0,
@ -90,6 +94,7 @@ class AdsRepoImp implements AdsRepo {
List vehiclePostingDamageParts = []; List vehiclePostingDamageParts = [];
adsCreationPayloadModel.vehiclePosting!.vehiclePostingDamageParts?.forEach((element) { adsCreationPayloadModel.vehiclePosting!.vehiclePostingDamageParts?.forEach((element) {
log("comment: ${element.comment}");
var imageMap = { var imageMap = {
"id": element.id ?? 0, "id": element.id ?? 0,
"comment": element.comment, "comment": element.comment,

@ -2,7 +2,6 @@ import 'dart:io';
import 'package:device_info_plus/device_info_plus.dart'; import 'package:device_info_plus/device_info_plus.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:huawei_fido/huawei_fido.dart';
import 'package:local_auth/local_auth.dart'; import 'package:local_auth/local_auth.dart';
import 'package:local_auth_android/local_auth_android.dart'; import 'package:local_auth_android/local_auth_android.dart';
import 'package:local_auth_darwin/types/auth_messages_ios.dart'; import 'package:local_auth_darwin/types/auth_messages_ios.dart';

@ -723,6 +723,7 @@ class AdVM extends BaseVM {
SelectionModel vehicleAdDurationId = SelectionModel(selectedOption: "", selectedId: -1, errorValue: ""); SelectionModel vehicleAdDurationId = SelectionModel(selectedOption: "", selectedId: -1, errorValue: "");
void updateVehicleAdDurationId(SelectionModel id) { void updateVehicleAdDurationId(SelectionModel id) {
log("vehicleAdDurationId is updated: ${vehicleAdDurationId.selectedId}");
vehicleAdDurationId = id; vehicleAdDurationId = id;
notifyListeners(); notifyListeners();
} }
@ -1026,7 +1027,7 @@ class AdVM extends BaseVM {
bool isAdDurationValidated() { bool isAdDurationValidated() {
bool isValidated = true; bool isValidated = true;
if (vehicleAdDurationId.selectedId == -1) { if (AppState().userType != UserType.providerDealer && vehicleAdDurationId.selectedId == -1) {
vehicleAdDurationId.errorValue = LocaleKeys.vehicle_vehiclePart.tr(); vehicleAdDurationId.errorValue = LocaleKeys.vehicle_vehiclePart.tr();
isValidated = false; isValidated = false;
} else { } else {
@ -1252,6 +1253,11 @@ class AdVM extends BaseVM {
notifyListeners(); notifyListeners();
} }
void updateDamagePartDescription(int index, String value) {
vehicleDamageCards[index].damagePartDescription = value;
notifyListeners();
}
void removeDamageImageFromCard(int imageIndex, String filePath, int cardIndex) { void removeDamageImageFromCard(int imageIndex, String filePath, int cardIndex) {
VehicleDamageCard card = vehicleDamageCards.elementAt(cardIndex); VehicleDamageCard card = vehicleDamageCards.elementAt(cardIndex);
if (card.partImages == null) return; if (card.partImages == null) return;
@ -1420,14 +1426,14 @@ class AdVM extends BaseVM {
Utils.hideLoading(context); Utils.hideLoading(context);
if (genericRespModel.messageStatus != 1) { if (genericRespModel.messageStatus != 1) {
Utils.showToast(LocaleKeys.error.tr() + ": ${genericRespModel.message}"); Utils.showToast("${LocaleKeys.error.tr()}: ${genericRespModel.message}");
} else { } else {
resetSpecialServiceBottomSheet(); resetSpecialServiceBottomSheet();
navigateWithName(context, AppRoutes.paymentMethodsView, arguments: PaymentTypes.ads); navigateWithName(context, AppRoutes.paymentMethodsView, arguments: PaymentTypes.ads);
} }
} catch (e) { } catch (e) {
Utils.hideLoading(context); Utils.hideLoading(context);
Utils.showToast(LocaleKeys.error.tr() + ": ${e.toString()}"); Utils.showToast("${LocaleKeys.error.tr()}: ${e.toString()}");
} }
} }
@ -1440,7 +1446,7 @@ class AdVM extends BaseVM {
} }
Ads ads = Ads( Ads ads = Ads(
id: isAdEditEnabled ? previousAdDetails!.id : null, id: isAdEditEnabled ? previousAdDetails!.id : null,
adsDurationID: vehicleAdDurationId.selectedId, adsDurationID: vehicleAdDurationId.selectedId == -1 ? 0 : vehicleAdDurationId.selectedId,
startDate: selectionDurationStartDate, startDate: selectionDurationStartDate,
countryId: vehicleCountryId.selectedId, countryId: vehicleCountryId.selectedId,
specialServiceIDs: adsSelectedServices, specialServiceIDs: adsSelectedServices,
@ -1459,6 +1465,7 @@ class AdVM extends BaseVM {
VehiclePostingDamageParts stringImage = await convertFileToVehiclePostingDamageParts( VehiclePostingDamageParts stringImage = await convertFileToVehiclePostingDamageParts(
imageModel: image, imageModel: image,
damagePartId: card.partSelectedId!.selectedId, damagePartId: card.partSelectedId!.selectedId,
commentParam: card.damagePartDescription ?? "",
); );
vehicleDamageImages.add(stringImage); vehicleDamageImages.add(stringImage);
} }
@ -1523,7 +1530,7 @@ class AdVM extends BaseVM {
return vehiclePostingImages; return vehiclePostingImages;
} }
Future<VehiclePostingDamageParts> convertFileToVehiclePostingDamageParts({required ImageModel imageModel, required int damagePartId}) async { Future<VehiclePostingDamageParts> convertFileToVehiclePostingDamageParts({required ImageModel imageModel, required int damagePartId, required String commentParam}) async {
VehiclePostingDamageParts vehiclePostingDamageParts; VehiclePostingDamageParts vehiclePostingDamageParts;
if (imageModel.isFromNetwork ?? false) { if (imageModel.isFromNetwork ?? false) {
@ -1531,17 +1538,14 @@ class AdVM extends BaseVM {
id: imageModel.id, id: imageModel.id,
vehicleDamagePartID: damagePartId, vehicleDamagePartID: damagePartId,
imageUrl: imageModel.filePath, imageUrl: imageModel.filePath,
comment: commentParam,
vehiclePostingID: isAdEditEnabled ? previousAdDetails!.vehiclePostingID : null, vehiclePostingID: isAdEditEnabled ? previousAdDetails!.vehiclePostingID : null,
); );
} else { } else {
File file = File(imageModel.filePath!); File file = File(imageModel.filePath!);
List<int> imageBytes = await file.readAsBytes(); List<int> imageBytes = await file.readAsBytes();
String image = base64Encode(imageBytes); String image = base64Encode(imageBytes);
vehiclePostingDamageParts = VehiclePostingDamageParts( vehiclePostingDamageParts = VehiclePostingDamageParts(vehicleImageBase64: image, vehicleDamagePartID: damagePartId, imageUrl: file.path, comment: commentParam);
vehicleImageBase64: image,
vehicleDamagePartID: damagePartId,
imageUrl: file.path,
);
} }
return vehiclePostingDamageParts; return vehiclePostingDamageParts;
@ -1775,7 +1779,6 @@ class AdVM extends BaseVM {
Utils.showToast(e.toString()); Utils.showToast(e.toString());
return false; return false;
} }
return false;
} }
void autoFillSelectedVehicleType() async { void autoFillSelectedVehicleType() async {
@ -1806,7 +1809,7 @@ class AdVM extends BaseVM {
SelectionModel( SelectionModel(
selectedId: vehicleAdsDurations[index].id ?? 0, selectedId: vehicleAdsDurations[index].id ?? 0,
selectedOption: "${vehicleAdsDurations[index].days} Days", selectedOption: "${vehicleAdsDurations[index].days} Days",
itemPrice: vehicleAdsDurations[index].price!.toInt().toString(), itemPrice: vehicleAdsDurations[index].price!.toString(),
), ),
); );
} }
@ -1876,6 +1879,7 @@ class AdVM extends BaseVM {
selectedId: element.vehicleDamagePartID!, selectedId: element.vehicleDamagePartID!,
selectedOption: element.partName ?? "", selectedOption: element.partName ?? "",
), ),
damagePartDescription: "",
partImages: [imageModel], partImages: [imageModel],
); );
addNewDamagePartCard(damageCard: vehicleDamageCard); addNewDamagePartCard(damageCard: vehicleDamageCard);
@ -1964,17 +1968,19 @@ class AdVM extends BaseVM {
class VehicleDamageCard { class VehicleDamageCard {
List<ImageModel>? partImages; List<ImageModel>? partImages;
SelectionModel? partSelectedId; SelectionModel? partSelectedId;
String? damagePartDescription;
String partImageErrorValue; String partImageErrorValue;
VehicleDamageCard({ VehicleDamageCard({
this.partImages, this.partImages,
this.partSelectedId, this.partSelectedId,
this.damagePartDescription,
this.partImageErrorValue = "", this.partImageErrorValue = "",
}); });
@override @override
String toString() { String toString() {
return 'VehicleDamageCard{partImages: $partImages, partSelectedId: $partSelectedId, partImageErrorValue: $partImageErrorValue}'; return 'VehicleDamageCard{partImages: $partImages, partSelectedId: $partSelectedId,damagePartDescription: $damagePartDescription, partImageErrorValue: $partImageErrorValue}';
} }
} }

@ -67,6 +67,8 @@ class ServiceVM extends BaseVM {
List<BranchDetailModel> homePageBranches = []; List<BranchDetailModel> homePageBranches = [];
List<CategoryData> categories = []; List<CategoryData> categories = [];
bool isNeedRefreshServicesList = false;
void updateSelectionOpenTime(String date) { void updateSelectionOpenTime(String date) {
openTime = date; openTime = date;
notifyListeners(); notifyListeners();

@ -1,11 +1,13 @@
import 'package:country_code_picker/country_code_picker.dart'; import 'package:country_code_picker/country_code_picker.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.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/classes/consts.dart';
import 'package:mc_common_app/extensions/int_extensions.dart'; import 'package:mc_common_app/extensions/int_extensions.dart';
import 'package:mc_common_app/extensions/string_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/generated/locale_keys.g.dart';
import 'package:mc_common_app/theme/colors.dart'; import 'package:mc_common_app/theme/colors.dart';
import 'package:mc_common_app/utils/enums.dart';
import 'package:mc_common_app/utils/utils.dart'; import 'package:mc_common_app/utils/utils.dart';
import 'package:mc_common_app/view_models/ad_view_model.dart'; import 'package:mc_common_app/view_models/ad_view_model.dart';
import 'package:mc_common_app/views/advertisement/bottom_sheets/ad_special_service_sheet.dart'; import 'package:mc_common_app/views/advertisement/bottom_sheets/ad_special_service_sheet.dart';
@ -60,19 +62,22 @@ class AdDuration extends StatelessWidget {
children: [ children: [
LocaleKeys.adDuration.tr().toText(fontSize: 18, isBold: true), LocaleKeys.adDuration.tr().toText(fontSize: 18, isBold: true),
8.height, 8.height,
TxtField(
isBackgroundEnabled: true, if (AppState().userType != UserType.providerDealer) ...[
isButtonEnable: false, TxtField(
isNeedBorder: false, isBackgroundEnabled: true,
hint: LocaleKeys.adDuration.tr(), isButtonEnable: false,
value: adVM.vehicleAdDurationId.selectedOption, isNeedBorder: false,
isNeedClickAll: true, hint: LocaleKeys.adDuration.tr(),
postFixDataColor: MyColors.darkTextColor, value: adVM.vehicleAdDurationId.selectedOption,
onTap: () async { isNeedClickAll: true,
final formattedDate = await Utils.pickDateFromDatePicker(context); postFixDataColor: MyColors.darkTextColor,
adVM.updateSelectionDurationStartDate(formattedDate); onTap: () async {
}, final formattedDate = await Utils.pickDateFromDatePicker(context);
), adVM.updateSelectionDurationStartDate(formattedDate);
},
),
],
// Builder(builder: (context) { // Builder(builder: (context) {
// List<DropValue> vehicleAdsDurationsDrop = []; // List<DropValue> vehicleAdsDurationsDrop = [];
// for (var element in adVM.vehicleAdsDurations) { // for (var element in adVM.vehicleAdsDurations) {

@ -1,8 +1,10 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.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/int_extensions.dart';
import 'package:mc_common_app/extensions/string_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/generated/locale_keys.g.dart';
import 'package:mc_common_app/theme/colors.dart'; import 'package:mc_common_app/theme/colors.dart';
import 'package:mc_common_app/utils/enums.dart';
import 'package:mc_common_app/view_models/ad_view_model.dart'; import 'package:mc_common_app/view_models/ad_view_model.dart';
import 'package:mc_common_app/views/advertisement/components/picked_images_container_widget.dart'; import 'package:mc_common_app/views/advertisement/components/picked_images_container_widget.dart';
import 'package:mc_common_app/widgets/extensions/extensions_widget.dart'; import 'package:mc_common_app/widgets/extensions/extensions_widget.dart';
@ -10,7 +12,7 @@ import 'package:provider/provider.dart';
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
class ReviewAd extends StatelessWidget { class ReviewAd extends StatelessWidget {
const ReviewAd({Key? key}) : super(key: key); const ReviewAd({super.key});
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -30,7 +32,7 @@ class SingleDetailWidget extends StatelessWidget {
final String text; final String text;
final String type; final String type;
const SingleDetailWidget({Key? key, required this.text, required this.type}) : super(key: key); const SingleDetailWidget({super.key, required this.text, required this.type});
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -45,7 +47,7 @@ class SingleDetailWidget extends StatelessWidget {
} }
class VehicleDetailsReview extends StatelessWidget { class VehicleDetailsReview extends StatelessWidget {
const VehicleDetailsReview({Key? key}) : super(key: key); const VehicleDetailsReview({super.key});
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -127,7 +129,7 @@ class VehicleDetailsReview extends StatelessWidget {
} }
class DamagePartsReview extends StatelessWidget { class DamagePartsReview extends StatelessWidget {
const DamagePartsReview({Key? key}) : super(key: key); const DamagePartsReview({super.key});
Widget buildDamagePartList(AdVM adVM) { Widget buildDamagePartList(AdVM adVM) {
List<Widget> list = List.generate( List<Widget> list = List.generate(
@ -138,11 +140,26 @@ class DamagePartsReview extends StatelessWidget {
8.height, 8.height,
Row( Row(
children: [ children: [
SingleDetailWidget(type: LocaleKeys.vehiclePart.tr(), text: adVM.vehicleDamageCards[index].partSelectedId!.selectedOption), ("${LocaleKeys.vehiclePart.tr()}:").toText(fontSize: 12, color: MyColors.lightTextColor),
4.width,
(adVM.vehicleDamageCards[index].partSelectedId!.selectedOption ?? "").toText(fontSize: 14, color: MyColors.darkTextColor),
], ],
), ),
if (adVM.vehicleDamageCards[index].damagePartDescription != null && adVM.vehicleDamageCards[index].damagePartDescription!.isNotEmpty) ...[
Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
("${LocaleKeys.comment.tr()}:").toText(fontSize: 12, color: MyColors.lightTextColor),
4.width,
Flexible(
child: (adVM.vehicleDamageCards[index].damagePartDescription ?? "").toText(fontSize: 12, color: MyColors.darkTextColor),
),
],
),
5.height,
],
if (adVM.vehicleDamageCards[index].partImages != null && adVM.vehicleDamageCards[index].partImages!.isNotEmpty) ...[ if (adVM.vehicleDamageCards[index].partImages != null && adVM.vehicleDamageCards[index].partImages!.isNotEmpty) ...[
("${LocaleKeys.damagePartPictures.tr()}:").toText(fontSize: 12, color: MyColors.lightTextColor, isBold: true), ("${LocaleKeys.damagePartPictures.tr()}:").toText(fontSize: 12, color: MyColors.lightTextColor),
PickedFilesContainer( PickedFilesContainer(
pickedFiles: adVM.vehicleDamageCards[index].partImages!, pickedFiles: adVM.vehicleDamageCards[index].partImages!,
onCrossPressedPrimary: adVM.removeImageFromList, onCrossPressedPrimary: adVM.removeImageFromList,
@ -176,7 +193,7 @@ class DamagePartsReview extends StatelessWidget {
} }
class AdDurationReview extends StatelessWidget { class AdDurationReview extends StatelessWidget {
const AdDurationReview({Key? key}) : super(key: key); const AdDurationReview({super.key});
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -189,10 +206,12 @@ class AdDurationReview extends StatelessWidget {
8.height, 8.height,
Row( Row(
children: [ children: [
Expanded( if (AppState().userType != UserType.providerDealer) ...[
flex: 7, Expanded(
child: SingleDetailWidget(type: LocaleKeys.duration.tr(), text: adVM.vehicleAdDurationId.selectedOption), flex: 7,
), child: SingleDetailWidget(type: LocaleKeys.duration.tr(), text: adVM.vehicleAdDurationId.selectedOption),
),
],
Expanded( Expanded(
flex: 5, flex: 5,
child: SingleDetailWidget(type: LocaleKeys.startDate.tr(), text: adVM.selectionDurationStartDate), child: SingleDetailWidget(type: LocaleKeys.startDate.tr(), text: adVM.selectionDurationStartDate),

@ -9,11 +9,12 @@ import 'package:mc_common_app/views/advertisement/bottom_sheets/ad_damage_parts_
import 'package:mc_common_app/views/advertisement/components/picked_images_container_widget.dart'; import 'package:mc_common_app/views/advertisement/components/picked_images_container_widget.dart';
import 'package:mc_common_app/widgets/common_widgets/custom_add_button_widget.dart'; import 'package:mc_common_app/widgets/common_widgets/custom_add_button_widget.dart';
import 'package:mc_common_app/widgets/extensions/extensions_widget.dart'; import 'package:mc_common_app/widgets/extensions/extensions_widget.dart';
import 'package:mc_common_app/widgets/txt_field.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
class DamageParts extends StatelessWidget { class DamageParts extends StatelessWidget {
const DamageParts({Key? key}) : super(key: key); const DamageParts({super.key});
bool getEnabledStatus(bool? isSelected) { bool getEnabledStatus(bool? isSelected) {
if (isSelected == null) { if (isSelected == null) {
@ -79,7 +80,14 @@ class DamageParts extends StatelessWidget {
).onPress(() => adVM.removeDamagePartCard(index)) ).onPress(() => adVM.removeDamagePartCard(index))
], ],
), ),
10.height, 3.height,
TxtField(
isNeedBorder: false,
value: vehicleDamageCard.damagePartDescription,
hint: LocaleKeys.addCommentsHere.tr(),
onChanged: (v) => adVM.updateDamagePartDescription(index, v),
),
3.height,
// Builder(builder: (context) { // Builder(builder: (context) {
// List<DropValue> vehicleDamagePartsDrop = []; // List<DropValue> vehicleDamagePartsDrop = [];

@ -223,6 +223,7 @@ class VehicleDetails extends StatelessWidget {
value: adVM.vehicleDemandAmount, value: adVM.vehicleDemandAmount,
errorValue: adVM.demandAmountError, errorValue: adVM.demandAmountError,
keyboardType: TextInputType.number, keyboardType: TextInputType.number,
numbersOnly: true,
hint: LocaleKeys.demandAmount.tr(), hint: LocaleKeys.demandAmount.tr(),
onChanged: (v) => adVM.updateVehicleDemandAmount(v), onChanged: (v) => adVM.updateVehicleDemandAmount(v),
), ),

@ -147,7 +147,7 @@ class _AdsDetailViewState extends State<AdsDetailView> {
crossAxisAlignment: CrossAxisAlignment.end, crossAxisAlignment: CrossAxisAlignment.end,
children: [ children: [
widget.adDetails.vehicle!.demandAmount!.toInt().toString().toText(fontSize: 30, height: 1.2, isBold: true), widget.adDetails.vehicle!.demandAmount!.toInt().toString().toText(fontSize: 30, height: 1.2, isBold: true),
LocaleKeys.sar.tr().toText(fontSize: 15, color: MyColors.lightTextColor).paddingOnly(bottom: 5), (widget.adDetails.vehicle!.currency ?? LocaleKeys.sar.tr()).toText(fontSize: 15, color: MyColors.lightTextColor).paddingOnly(bottom: 5),
], ],
), ),
if (widget.adDetails.adPostStatus == AdPostStatus.expired) ...[ if (widget.adDetails.adPostStatus == AdPostStatus.expired) ...[
@ -446,7 +446,7 @@ class _AdsDetailViewState extends State<AdsDetailView> {
crossAxisAlignment: CrossAxisAlignment.end, crossAxisAlignment: CrossAxisAlignment.end,
children: [ children: [
widget.adDetails.vehicle!.demandAmount!.toInt().toString().toText(fontSize: 30, isBold: true), widget.adDetails.vehicle!.demandAmount!.toInt().toString().toText(fontSize: 30, isBold: true),
LocaleKeys.sar.tr().toText(fontSize: 15, isBold: true, color: MyColors.lightTextColor).paddingOnly(bottom: 5), (widget.adDetails.vehicle!.currency ?? LocaleKeys.sar.tr()).toText(fontSize: 15, isBold: true, color: MyColors.lightTextColor).paddingOnly(bottom: 5),
], ],
), ),
14.height, 14.height,

@ -125,6 +125,7 @@ class _AdDamagePartsSelectionSheetState extends State<AdDamagePartsSelectionShee
damageCard: VehicleDamageCard( damageCard: VehicleDamageCard(
partImageErrorValue: "", partImageErrorValue: "",
partImages: null, partImages: null,
damagePartDescription: "",
partSelectedId: SelectionModel(selectedOption: value.partName!, selectedId: value.id!, errorValue: ""), partSelectedId: SelectionModel(selectedOption: value.partName!, selectedId: value.id!, errorValue: ""),
), ),
); );

@ -58,7 +58,7 @@ class AdDurationSelectionSheet extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start,
children: [ children: [
("${adDuration.days}${LocaleKeys.daysVar.tr()}").toString().toText(fontSize: 16, isBold: true), ("${adDuration.days} ${LocaleKeys.daysVar.tr()}").toString().toText(fontSize: 16, isBold: true),
4.height, 4.height,
"Your Ad will be active for ${adDuration.days} Days and then you will need to extend it to keep it active. ".toText( "Your Ad will be active for ${adDuration.days} Days and then you will need to extend it to keep it active. ".toText(
fontSize: 14, fontSize: 14,
@ -73,7 +73,7 @@ class AdDurationSelectionSheet extends StatelessWidget {
2.width, 2.width,
Padding( Padding(
padding: const EdgeInsets.only(bottom: 4), padding: const EdgeInsets.only(bottom: 4),
child: LocaleKeys.sar.tr().toText(fontSize: 12, color: MyColors.lightTextColor, isBold: true), child: (adDuration.currency ?? LocaleKeys.sar.tr()).toText(fontSize: 12, color: MyColors.lightTextColor, isBold: true),
), ),
], ],
), ),
@ -101,7 +101,7 @@ class AdDurationSelectionSheet extends StatelessWidget {
SelectionModel( SelectionModel(
selectedId: adDuration.id ?? 0, selectedId: adDuration.id ?? 0,
selectedOption: ("${adDuration.days} ${LocaleKeys.daysVar.tr()}"), selectedOption: ("${adDuration.days} ${LocaleKeys.daysVar.tr()}"),
itemPrice: adDuration.price!.toInt().toString(), itemPrice: adDuration.price!.toString(),
), ),
); );
}); });

@ -129,6 +129,7 @@ class _BottomSheetAdDamagePartsContentState extends State<BottomSheetAdDamagePar
damageCard: VehicleDamageCard( damageCard: VehicleDamageCard(
partImageErrorValue: "", partImageErrorValue: "",
partImages: null, partImages: null,
damagePartDescription: "",
partSelectedId: SelectionModel(selectedOption: value.partName!, selectedId: value.id!, errorValue: ""), partSelectedId: SelectionModel(selectedOption: value.partName!, selectedId: value.id!, errorValue: ""),
), ),
); );

@ -1,7 +1,9 @@
import 'dart:async'; import 'dart:async';
import 'dart:developer'; import 'dart:developer';
import 'package:easy_localization/easy_localization.dart';
import 'package:mc_common_app/config/routes.dart'; import 'package:mc_common_app/config/routes.dart';
import 'package:mc_common_app/generated/locale_keys.g.dart';
import 'package:mc_common_app/models/advertisment_models/ad_details_model.dart'; import 'package:mc_common_app/models/advertisment_models/ad_details_model.dart';
import 'package:mc_common_app/models/chat_models/chat_message_model.dart'; import 'package:mc_common_app/models/chat_models/chat_message_model.dart';
import 'package:mc_common_app/models/general_models/widgets_models.dart'; import 'package:mc_common_app/models/general_models/widgets_models.dart';
@ -41,6 +43,7 @@ class _AdDamagePartPicturesSheetState extends State<AdDamagePartPicturesSheet> {
selectedId: element.vehicleDamagePartID!, selectedId: element.vehicleDamagePartID!,
selectedOption: element.partName ?? "", selectedOption: element.partName ?? "",
), ),
damagePartDescription: element.comment ?? "",
partImages: [imageModel], partImages: [imageModel],
); );
vehicleDamageCards.add(vehicleDamageCard); vehicleDamageCards.add(vehicleDamageCard);
@ -62,6 +65,9 @@ class _AdDamagePartPicturesSheetState extends State<AdDamagePartPicturesSheet> {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
vehicleDamageCard.partSelectedId!.selectedOption.toText(fontSize: 18, color: MyColors.darkTextColor), vehicleDamageCard.partSelectedId!.selectedOption.toText(fontSize: 18, color: MyColors.darkTextColor),
if (vehicleDamageCard.damagePartDescription!.isNotEmpty) ...[
vehicleDamageCard.damagePartDescription!.toText(fontSize: 14, color: MyColors.lightTextColor),
],
PickedFilesContainer( PickedFilesContainer(
pickedFiles: vehicleDamageCard.partImages ?? [], pickedFiles: vehicleDamageCard.partImages ?? [],
isReview: true, isReview: true,
@ -78,7 +84,6 @@ class _AdDamagePartPicturesSheetState extends State<AdDamagePartPicturesSheet> {
id: image.id, id: image.id,
isFromNetwork: true, isFromNetwork: true,
imageUrl: image.filePath, imageUrl: image.filePath,
)); ));
} }
navigateWithName(context, AppRoutes.mediaViewerScreen, arguments: images); navigateWithName(context, AppRoutes.mediaViewerScreen, arguments: images);

@ -17,7 +17,7 @@ import 'package:provider/provider.dart';
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
class CreateAdView extends StatefulWidget { class CreateAdView extends StatefulWidget {
const CreateAdView({Key? key}) : super(key: key); const CreateAdView({super.key});
@override @override
State<CreateAdView> createState() => _CreateAdViewState(); State<CreateAdView> createState() => _CreateAdViewState();
@ -68,7 +68,7 @@ class _CreateAdViewState extends State<CreateAdView> {
} }
class BuildFooterButton extends StatelessWidget { class BuildFooterButton extends StatelessWidget {
const BuildFooterButton({Key? key}) : super(key: key); const BuildFooterButton({super.key});
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -187,13 +187,13 @@ class BuildAdStepContainer extends StatelessWidget {
final AdCreationSteps adCreationStepsEnum; final AdCreationSteps adCreationStepsEnum;
const BuildAdStepContainer({ const BuildAdStepContainer({
Key? key, super.key,
required this.onVehicleDetails, required this.onVehicleDetails,
required this.onDamageParts, required this.onDamageParts,
required this.onAdDuration, required this.onAdDuration,
required this.onReviewAd, required this.onReviewAd,
required this.adCreationStepsEnum, required this.adCreationStepsEnum,
}) : super(key: key); });
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {

@ -14,6 +14,7 @@ import 'package:mc_common_app/theme/colors.dart';
import 'package:mc_common_app/utils/enums.dart'; import 'package:mc_common_app/utils/enums.dart';
import 'package:mc_common_app/utils/navigator.dart'; import 'package:mc_common_app/utils/navigator.dart';
import 'package:mc_common_app/view_models/ad_view_model.dart'; import 'package:mc_common_app/view_models/ad_view_model.dart';
import 'package:mc_common_app/views/advertisement/ads_buyer_chats_view.dart';
import 'package:mc_common_app/views/advertisement/bottom_sheets/ad_duration_selection_sheet.dart'; import 'package:mc_common_app/views/advertisement/bottom_sheets/ad_duration_selection_sheet.dart';
import 'package:mc_common_app/widgets/bottom_sheet.dart'; import 'package:mc_common_app/widgets/bottom_sheet.dart';
import 'package:mc_common_app/widgets/common_widgets/app_bar.dart'; import 'package:mc_common_app/widgets/common_widgets/app_bar.dart';
@ -24,7 +25,7 @@ import 'package:easy_localization/easy_localization.dart';
class SelectAdTypeView extends StatelessWidget { class SelectAdTypeView extends StatelessWidget {
final List<dynamic> arguments; // [0] isProviderOrCustomer [1] isFromExtendAd final List<dynamic> arguments; // [0] isProviderOrCustomer [1] isFromExtendAd
const SelectAdTypeView({Key? key, required this.arguments}) : super(key: key); const SelectAdTypeView({super.key, required this.arguments});
Widget getVehicleAdTypeIcon(VehicleType vehicleTypeEnum) { Widget getVehicleAdTypeIcon(VehicleType vehicleTypeEnum) {
switch (vehicleTypeEnum) { switch (vehicleTypeEnum) {
@ -74,12 +75,24 @@ class SelectAdTypeView extends StatelessWidget {
itemBuilder: (BuildContext context, int index) { itemBuilder: (BuildContext context, int index) {
VehicleTypeModel vehicleTypeModel = adVM.vehicleTypes[index]; VehicleTypeModel vehicleTypeModel = adVM.vehicleTypes[index];
return InkWell( return InkWell(
onTap: () { onTap: () async {
adVM.updateSelectionVehicleTypeId(SelectionModel(selectedId: vehicleTypeModel.id!, selectedOption: vehicleTypeModel.vehicleTypeName ?? "", errorValue: "")); adVM.updateSelectionVehicleTypeId(SelectionModel(selectedId: vehicleTypeModel.id!, selectedOption: vehicleTypeModel.vehicleTypeName ?? "", errorValue: ""));
if (adVM.isAdEditEnabled) { if (adVM.isAdEditEnabled) {
adVM.autoFillSelectedVehicleAdsDetails(); adVM.autoFillSelectedVehicleAdsDetails();
} }
showMyBottomSheet(context, child: AdDurationSelectionSheet(isUpdateAdSelected: adVM.isAdEditEnabled, isFromExtendAd: isFromExtendAd, adsID: adsId)); if (AppState().currentAppType == AppType.provider && AppState().userType == UserType.providerDealer) {
if (isFromExtendAd && !adVM.isAdEditEnabled) {
bool status = await adVM.createAdExtensionOrder(context, adId: adsId, adsDurationId: adVM.vehicleAdDurationId.selectedId);
log("hereStatus: $status");
if (status) {
navigateWithName(context, AppRoutes.paymentMethodsView, arguments: PaymentTypes.extendAds);
}
} else {
navigateReplaceWithName(context, AppRoutes.createAdView);
}
} else {
showMyBottomSheet(context, child: AdDurationSelectionSheet(isUpdateAdSelected: adVM.isAdEditEnabled, isFromExtendAd: isFromExtendAd, adsID: adsId));
}
}, },
child: SizedBox( child: SizedBox(
width: double.infinity, width: double.infinity,
@ -95,21 +108,23 @@ class SelectAdTypeView extends StatelessWidget {
Row( Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [
vehicleTypeModel.vehicleTypeName.toString().toText(fontSize: 18, isBold: true), vehicleTypeModel.vehicleTypeName.toString().toText(fontSize: 18),
getVehicleAdTypeIcon(vehicleTypeModel.vehicleTypeEnum!), getVehicleAdTypeIcon(vehicleTypeModel.vehicleTypeEnum!),
], ],
), ),
if (isProvider) ...[ if (isProvider) ...[
Row( Row(
children: [ children: [
LocaleKeys.duration.tr().toText(fontSize: 12, color: MyColors.lightTextColor, isBold: true), "${LocaleKeys.duration.tr()}: ".toText(fontSize: 12, color: MyColors.lightTextColor, isBold: true),
LocaleKeys.validUntilSubscriptionExpiration.tr().toText(fontSize: 13, isBold: true), 2.width,
LocaleKeys.validUntilSubscriptionExpiration.tr().toText(fontSize: 13),
], ],
).paddingOnly(top: 5, bottom: 5), ).paddingOnly(top: 5, bottom: 5),
] else ...[ ] else ...[
Row( Row(
children: [ children: [
LocaleKeys.duration.tr().toText(fontSize: 12, color: MyColors.lightTextColor, isBold: true), LocaleKeys.duration.tr().toText(fontSize: 12, color: MyColors.lightTextColor, isBold: true),
4.width,
adVM.vehicleAdDurationId.selectedOption.toText(fontSize: 13, isBold: true), adVM.vehicleAdDurationId.selectedOption.toText(fontSize: 13, isBold: true),
const Icon(Icons.keyboard_arrow_down_sharp, color: MyColors.darkPrimaryColor, size: 20), const Icon(Icons.keyboard_arrow_down_sharp, color: MyColors.darkPrimaryColor, size: 20),
], ],
@ -150,7 +165,7 @@ class SelectAdTypeView extends StatelessWidget {
Row( Row(
children: [ children: [
"$remainingAds ".toText(fontSize: 29, isBold: true, letterSpacing: 0, height: 1), "$remainingAds ".toText(fontSize: 29, isBold: true, letterSpacing: 0, height: 1),
LocaleKeys.adsRemaining.tr().toText(fontSize: 17, color: MyColors.lightTextColor, isBold: true), LocaleKeys.adsRemaining.tr().toText(fontSize: 17, color: MyColors.lightTextColor),
], ],
), ),
Text.rich( Text.rich(

@ -7,6 +7,7 @@ import 'package:mc_common_app/extensions/int_extensions.dart';
import 'package:mc_common_app/extensions/string_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/generated/locale_keys.g.dart';
import 'package:mc_common_app/models/advertisment_models/ad_details_model.dart'; import 'package:mc_common_app/models/advertisment_models/ad_details_model.dart';
import 'package:mc_common_app/models/general_models/widgets_models.dart';
import 'package:mc_common_app/theme/colors.dart'; import 'package:mc_common_app/theme/colors.dart';
import 'package:mc_common_app/utils/enums.dart'; import 'package:mc_common_app/utils/enums.dart';
import 'package:mc_common_app/utils/navigator.dart'; import 'package:mc_common_app/utils/navigator.dart';
@ -145,6 +146,17 @@ class AdsFragment extends StatelessWidget {
), ),
floatingActionButton: FloatingActionButton( floatingActionButton: FloatingActionButton(
onPressed: () async { onPressed: () async {
if (AppState().userType != UserType.providerDealer) {
if (adVM.vehicleAdDurationId.selectedId == -1 && adVM.vehicleAdsDurations.isNotEmpty) {
SelectionModel selection = SelectionModel(
selectedId: adVM.vehicleAdsDurations.first.id ?? 0,
selectedOption: ("${adVM.vehicleAdsDurations.first.days} ${LocaleKeys.daysVar.tr()}"),
itemPrice: adVM.vehicleAdsDurations.first.price!.toString(),
);
adVM.updateVehicleAdDurationId(selection);
}
}
navigateWithName(context, AppRoutes.selectAdTypeView, arguments: [injector.get<AppState>().currentAppType == AppType.provider, false, -1]); navigateWithName(context, AppRoutes.selectAdTypeView, arguments: [injector.get<AppState>().currentAppType == AppType.provider, false, -1]);
}, },
backgroundColor: MyColors.darkPrimaryColor, backgroundColor: MyColors.darkPrimaryColor,

@ -61,7 +61,7 @@ dependencies:
# Auth # Auth
local_auth: ^2.2.0 local_auth: ^2.2.0
huawei_fido: ^6.3.0+305 # huawei_fido: ^6.3.0+305
device_info_plus: ^10.1.0 device_info_plus: ^10.1.0

Loading…
Cancel
Save