Advertisement
rifki_cs29

Flight

Nov 12th, 2021
1,236
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Dart 2.50 KB | None | 0 0
  1. import 'package:bloc/bloc.dart';
  2. import 'package:collection/src/iterable_extensions.dart';
  3. import 'package:equatable/equatable.dart';
  4. import 'package:test_crocodic/core/error/failure.dart';
  5. import 'package:test_crocodic/feature/domain/entities/flight.dart';
  6. import 'package:test_crocodic/feature/domain/entities/flights.dart';
  7. import 'package:test_crocodic/feature/domain/usecases/get_all_flight_data.dart';
  8.  
  9. part 'home_event.dart';
  10. part 'home_state.dart';
  11.  
  12. class HomeBloc extends Bloc<HomeEvent, HomeState> {
  13.   final GetAllFlightData _getAllFlightData;
  14.   List<Flights>? lastData;
  15.  
  16.   HomeBloc(this._getAllFlightData) : super(HomeInitialState()) {
  17.     on<HomeEvent>((event, emit) async {
  18.       print(event);
  19.       if (event is GetFlightDataEvent) {
  20.         final result = await _getAllFlightData(Params());
  21.         result.fold((failure) {
  22.           if (failure is ServerFailure) {
  23.             emit(ErrorState(message: failure.message));
  24.           }
  25.           if (failure is NetworkFailure) {
  26.             emit(ErrorState(message: failure.message));
  27.           }
  28.         }, (data) {
  29.           lastData = data;
  30.           emit(DataLoadedState(data: data));
  31.         });
  32.       }
  33.  
  34.       if (event is FilterDataEvent) {
  35.         if (lastData != null && event.filter != "") {
  36.           List<Flight> flightData = [];
  37.           for (var element in lastData!) {
  38.             var filtered = element.flights
  39.                 .where(
  40.                   (element) =>
  41.                       element.countryName
  42.                           .toLowerCase()
  43.                           .contains(event.filter.toLowerCase()) ||
  44.                       element.locationName
  45.                           .toLowerCase()
  46.                           .contains(event.filter.toLowerCase()) ||
  47.                       element.airportName
  48.                           .toLowerCase()
  49.                           .contains(event.filter.toLowerCase()),
  50.                 )
  51.                 .toList();
  52.             filtered.forEach((element) {
  53.               flightData.add(element);
  54.             });
  55.           }
  56.  
  57.           var newMap = flightData.groupListsBy((element) => element.countryId);
  58.           List<Flights> results = [];
  59.           newMap.forEach((key, value) {
  60.             results.add(Flights(
  61.               flights: value,
  62.               countryId: key,
  63.               country: value.first.countryName,
  64.             ));
  65.           });
  66.           print(results);
  67.           emit(DataLoadedState(data: results));
  68.         }
  69.       }
  70.     });
  71.   }
  72. }
  73.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement