@ -712,7 +712,7 @@ class AdVM extends BaseVM {
SelectionModel vehicleTypeId = SelectionModel ( selectedOption: " " , selectedId: - 1 , errorValue: " " ) ;
void updateSelectionVehicleTypeId ( SelectionModel id , { bool isForSearch = false } ) async {
Future < void > updateSelectionVehicleTypeId ( SelectionModel id , { bool isForSearch = false } ) async {
if ( isForSearch ) {
VehicleTypeModel vehicleTypeModel = vehicleTypesForFilters . firstWhere ( ( element ) = > element . id = = id . selectedId ) ;
DropValue vehicleTypeVValue = DropValue ( vehicleTypeModel . id ? ? 0 , vehicleTypeModel . vehicleTypeName ? ? " " , " " ) ;
@ -1368,24 +1368,14 @@ class AdVM extends BaseVM {
void onBackButtonPressed ( BuildContext context ) {
switch ( currentProgressStep ) {
case AdCreationStepsEnum . vehicleDetails:
/ / Check if user has entered any data
bool hasData = vehicleTypeId . selectedId ! = - 1 | |
vehicleBrandId . selectedId ! = - 1 | |
vehicleModelId . selectedId ! = - 1 | |
vehicleModelYearId . selectedId ! = - 1 | |
vehicleColorId . selectedId ! = - 1 | |
vehicleCategoryId . selectedId ! = - 1 | |
vehicleConditionId . selectedId ! = - 1 | |
vehicleMileageId . selectedId ! = - 1 | |
vehicleTransmissionId . selectedId ! = - 1 | |
vehicleCountryId . selectedId ! = - 1 | |
vehicleCityId . selectedId ! = - 1 | |
vehicleDemandAmount . isNotEmpty | |
vehicleVin . isNotEmpty | |
vehicleTitle . isNotEmpty | |
warrantyDuration . isNotEmpty | |
vehicleDescription . isNotEmpty | |
pickedPostingImages . isNotEmpty ;
/ / Only offer to save as a draft once both brand AND model are selected . Brand
/ / has no field of its own in the draft payload - - it ' s only ever recoverable by
/ / looking up model . vehicleBrandID when a draft is reopened . Confirmed on a real
/ / device: saving with a brand picked but no model meant the brand was silently
/ / lost on reopen , since there was nothing to derive it from . Any other field
/ / ( description , images , etc . ) being filled in isn ' t enough on its own -- a draft
/ / without a vehicle identified isn ' t meaningfully recoverable either.
bool hasData = vehicleBrandId . selectedId ! = - 1 & & vehicleModelId . selectedId ! = - 1 ;
if ( hasData ) {
/ / Skip save confirmation when extending ad
@ -2912,7 +2902,7 @@ class AdVM extends BaseVM {
return [ ] ;
}
void onEditUpdateAdPressed ( { required BuildContext context , required AdDetailsModel previousDetails , required bool isFromExtendAd , bool isForDraft = false } ) {
Future < void > onEditUpdateAdPressed ( { required BuildContext context , required AdDetailsModel previousDetails , required bool isFromExtendAd , bool isForDraft = false } ) async {
log ( " previousDetails: ${ previousDetails . vehiclePostingID } " ) ;
log ( " previousDetails: ${ previousDetails . vehicle ? . id } " ) ;
@ -2923,10 +2913,16 @@ class AdVM extends BaseVM {
log ( " previousAdDetails: ${ previousAdDetails ? . vehicle ? . id } " ) ;
autoFillSelectedVehicleType ( ) ;
/ / These used to all fire without awaiting , so autoFillSelectedVehicleAdsDetails could
/ / start ( and look up vehicleBrands / vehicleModels for this draft ) before
/ / autoFillSelectedVehicleType had actually finished setting vehicleTypeId and fetching
/ / brands for it - - type must resolve before brand , which must resolve before
/ / model / year / color / etc , since each step ' s dropdown options are fetched using the
/ / previous step ' s selected id.
await autoFillSelectedVehicleType ( ) ;
autoFillSelectedVehicleAdsDuration ( ) ;
/ / if ( isForDraft ) {
autoFillSelectedVehicleAdsDetails ( context ) ;
await autoFillSelectedVehicleAdsDetails ( context ) ;
/ / }
navigateWithName ( context , AppRoutes . selectAdTypeView , arguments: [ AppState ( ) . currentAppType = = AppType . provider , isFromExtendAd , previousDetails . id ] ) ;
}
@ -2953,7 +2949,7 @@ class AdVM extends BaseVM {
}
}
void autoFillSelectedVehicleType ( ) async {
Future < void > autoFillSelectedVehicleType ( ) async {
if ( vehicleTypes . isEmpty ) {
await getVehicleTypes ( ) ;
/ / return ;
@ -2964,6 +2960,14 @@ class AdVM extends BaseVM {
if ( vehicle . id = = previousAdDetails ! . vehicle ? . vehicleType ) {
vehicle . isSelected = true ;
log ( " Hi: ${ vehicle . vehicleTypeName } " ) ;
/ / This used to only flip isSelected on the type - picker list item , never
/ / vehicleTypeId itself - - confirmed on a real device: that left vehicleTypeId
/ / at whatever stale value ( or - 1 ) it already had from a previous session , which
/ / then fed the wrong / empty vehicleTypeId into getVehicleBrandsByVehicleTypeId ( )
/ / - > getVehicleDetailsByVehicleBrandId ( ) below , so the model / year / color / etc .
/ / dropdown option lists never matched the draft ' s actual selections even though
/ / their IDs were set correctly .
await updateSelectionVehicleTypeId ( SelectionModel ( selectedId: vehicle . id ! , selectedOption: vehicle . vehicleTypeName ? ? " " ) ) ;
break ;
}
}
@ -3004,7 +3008,7 @@ class AdVM extends BaseVM {
notifyListeners ( ) ;
}
void autoFillSelectedVehicleAdsDetails ( BuildContext context ) async {
Future < void > autoFillSelectedVehicleAdsDetails ( BuildContext context ) async {
bool isArabic = AppState ( ) . isArabic ( context ) ;
if ( vehicleBrands . isEmpty ) {