initPassengers method

void initPassengers({
  1. 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]!);
    }
  }
}