initPassengers method
void
initPassengers({ - bool clearPassengers = true,
})
Implementation
void initPassengers({bool clearPassengers = true}) async {
autoSelectedAdults.value = 0;
passengersController.clearAddPassengerFields();
isEditingPassenger.value = false;
passengerTypes.clear();
passengerTitles.clear();
if (Requests.box.hasData('searchAdults')) {
searchAdults.value = Requests.box.read('searchAdults');
searchChildren.value = Requests.box.read('searchChildren');
searchInfantsInSeats.value = Requests.box.read('searchInfantsInSeats');
searchInfantsInLap.value = Requests.box.read('searchInfantsInLap');
}
if (clearPassengers) {
openPassengerIndex.value = 0;
selectedPassengers.clear();
} else {
openPassengerIndex.value = -1;
final oldPassengers = selectedPassengers.where((p) => p != null).toList();
selectedPassengers.clear();
for (int i = 0; i < totalPassengers; i++) {
if (i + 1 > oldPassengers.length) {
selectedPassengers.add(null);
} else {
selectedPassengers.add(oldPassengers[i]);
}
}
}
for (int i = 0; i < totalPassengers; i++) {
String title;
String type;
int typedIndex;
if (i < searchAdults.value) {
title = 'Adult';
type = 'ADULT';
typedIndex = i;
} else if (i < searchAdults.value + searchChildren.value) {
title = 'Child';
type = 'CHILD';
typedIndex = i - searchAdults.value;
} else if (i <
searchAdults.value +
searchChildren.value +
searchInfantsInLap.value) {
title = 'Infant on lap';
type = 'INFANT';
typedIndex = i - (searchAdults.value + searchChildren.value);
} else {
title = 'Infant on seat';
type = 'INFANT';
typedIndex = i -
searchAdults.value -
searchChildren.value -
searchInfantsInLap.value;
}
passengerTitles.add("$title ${typedIndex + 1}");
passengerTypes.add(type);
if (clearPassengers) {
selectedPassengers.add(null);
}
}
if (clearPassengers) {
await passengersController.getPassengers();
if (!hasDiscountedFlight ||
!authenticationController.hasConfirmedBooking) {
return;
}
final confirmedPassengers = passengersController.activePassengers
.where((p) => p.isConfirmed ?? false)
.where((p) =>
isExpiryDateValid(DateTime.tryParse(p.passportExpiry ?? '')))
.toList();
if (confirmedPassengers.isEmpty) {
return;
}
int f = searchAdults.value;
int s = authenticationController.userProfileModel.value.data?.adultPassengerLimit ?? 0;
int n = confirmedPassengers.length;
final minimum = min(min(f, s), n);
for (int i = 0; i < minimum; i++) {
selectedPassengers[i] = confirmedPassengers[i];
autoSelectedAdults.value += 1;
}
canChangeAdults.value = autoSelectedAdults.value < n;
if (selectedPassengers[0] != null) {
isEditingPassenger.value = true;
passengersController.selectedPassengerToEdit(selectedPassengers[0]!);
}
}
}