0

I found an excellent way to make a filter using both Equatable and Block

But I want to convert it to Get. I tried a lot for days, but I couldn't..Can I get help converting it to Get, please ?

The filter method consists of three classes, the first FilterEvent :

abstract class FilterEvent extends Equatable {
  const FilterEvent();
  @override
  List<Object> get props => [];
}

class FilterLoad extends FilterEvent {
  @override
  List<Object> get props => [];
}

class LocationFilterUpdated extends FilterEvent {
  final LocationFilter locationFilter;
  const LocationFilterUpdated({required this.locationFilter});

  @override
  List<Object> get props => [locationFilter];
}

Second FilterState :

class FilterState extends Equatable {
  const FilterState();
  @override
  List<Object> get props => [];
}

class FilterLoading extends FilterState {}

class FilterLoaded extends FilterState {
  final Filter filter;
  const FilterLoaded({this.filter = const Filter()});

  @override
  List<Object> get props => [filter];
}

Finally Block:

class FilterBlock extends Block<FilterEvent, FilterState> {
  FilterBlock() : super(FilterLoading());
  @override
  Stream<FilterState> mapEventToState(FilterEvent event) async* {
    if (event is FilterLoad) {
      yield* _mapFilterLoadToState();
    }
    if(event is LocationFilterUpdated){
      yield* _mapLocationFilterUpdated(event, state)
    }
  }
  


Stream<FilterState> _mapFilterLoadToState() async*{
  yield*  FilterLoaded(filter: Filter(locationsFilter: updatedLocationFilters));
}

Stream<FilterState> _mapLocationFilterUpdated(LocationFilterUpdated event , FilterState state) async*{
  if(state is FilterLoaded){
    final List<LocationFilter> updatedLocationFilters =
        state.filter.locationsFilter.map((locationFilter) {
      return locationFilter.id == event.locationFilter.id
          ? event.locationFilter
          : locationFilter;
    }).toList();
     FilterLoaded(filter: Filter(locationsFilter: updatedLocationFilters));
  }
}

}
Khalid
  • 123
  • 1
  • 7

0 Answers0