loadTripsV3 method

Future<void> loadTripsV3({
  1. bool fromHome = false,
})

Implementation

Future<void> loadTripsV3({bool fromHome = false}) async {
  _clearExclusiveFiltersValues();
  _clearStandardFilterValues();
  hasConfirmedBooking.value = false;
  passengerExpanded.value = true;
  tripExpanded.value = true;
  if (tempFlightType.value == FlightType.exclusivePlus &&
      remainingSearchCredit < neededSearchCredit) {
    final res = await InsufficientSearchCreditsDialog.show();
    if (res) {
      tempFlightType.value = FlightType.standard;
    } else {
      return;
    }
  }


  visibleItem.value = 12;
  if (isStreamingExclusive.value) {
    debugPrint('### Canceling the request');
    isStreamingExclusive.value = false;
    _disposeMap();
    departureRes?.cancel();
    if (isRoundTrip) {
      returnRes?.cancel();
    }
  }
  exclusiveOffers.value = [];
  standardOffers.value = [];

  if (!isValidSearch()) {
    return;
  }

  if (totalPassengers > 9) {
    CustomFlashWidget.showFlashMessage(
      type: FlashType.error,
      title: "Invalid Search",
      message: "Maximum number of passengers per a booking is 9.",
    );

    return;
  }

  if (fromHome) {
    await storeSearch();
    clearSearch();
    initSearch();
    goto(Routes.FLIGHT_SEARCH);
    return;
  }

  try {
    _startCarouselTimer();
    isSearching.value = true;
    searchCreditEarned.value = 0;
    searchCreditUsed.value = 0;
    exclusiveOffers.clear();
    filteredList.clear();
    standardOffers.clear();
    openLoadingDialog();

    final departureDate =
        DateFormat('EEE, dd/MM/yy').parse(searchDepartureDate.value);
    var departureTrip = {
      "departureDate": DateFormat('yyyy-MM-dd').format(departureDate),
      "tripType": isRoundTrip ? "roundtrip" : "oneway",
      // "flixableDate": isFlexibleDeparture.value,
      "fromAirportCode": searchFromAirport.value?.code ?? '',
      "toAirportCode": searchToAirport.value?.code ?? '',
      "flightClass": FlightSearchUtils.mapFlightClassFromIndex(
          searchClassIndex.value, version.value),
      "adultPassengersCount": searchAdults.value,
      "childPassengersCount": searchChildren.value,
      "infantWithSeatPassengersCount": searchInfantsInSeats.value,
      "infantNoSeatPassengersCount": searchInfantsInLap.value,
      // "searchCreditUsed": isExclusivePlus,
    };

    if (isRoundTrip) {
      final returnDate =
          DateFormat('EEE, dd/MM/yy').parse(searchReturnDate.value);
      final formatedDate = DateFormat('yyyy-MM-dd').format(returnDate);
      departureTrip['returnDate'] = formatedDate;
    }

    loadNonDiscountedTrips(departureTrip);

    if (isExclusivePlus) {
      // load discounted
      isStreamingExclusive.value = true;
      _fetchAndProcessDiscountedTrips(departureTrip);
    }else{
      departureRes = null;
    }
  } on DioException catch (e) {
    if (cancelToken.isCancelled) {
      isSearching.value = false;
      debugPrint("Request cancelled");
    } else {
      _stopCarouselTimer();
      isSearching.value = false;
      isStreamingExclusive.value = false;
      _disposeMap();
      departureRes?.cancel();
      if (isRoundTrip) {
        returnRes?.cancel();
      }
      debugPrint("## exception here ${e.toString()}");
      CustomFlashWidget.showFlashMessage(
        type: FlashType.error,
        title: "Error",
        message:
            "We couldn't fetch flight data due to a timeout. Please try again or check your internet connection.",
      );
    }
  } catch (e) {
    _stopCarouselTimer();
    stopAnimationTimer();
    isSearching.value = false;
    isStreamingExclusive.value = false;
    _disposeMap();
    departureRes?.cancel();
    if (isRoundTrip) {
      returnRes?.cancel();
    }

    debugPrint("## exception here ${e.toString()}");
    CustomFlashWidget.showFlashMessage(
      type: FlashType.error,
      title: "Error",
      message:
          "Something went wrong. Please try again or check your internet connection.",
    );
  }
}