Advertisement
rifki_cs29

CategoryFilterLocationBloc

Mar 8th, 2022
1,458
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Dart 3.23 KB | None | 0 0
  1. import 'package:bloc/bloc.dart';
  2. import 'package:bloc_concurrency/bloc_concurrency.dart';
  3. import 'package:equatable/equatable.dart';
  4. import 'package:module_category/domain/entities/category_filter_location_default.dart';
  5. import 'package:module_category/domain/entities/category_filter_location_search.dart';
  6. import 'package:module_category/domain/usecases/get_category_filter_location_search.dart';
  7. import 'package:module_category/domain/usecases/post_category_filter_location_default.dart';
  8. import 'package:module_core/common/state_enum.dart';
  9. import 'package:rxdart/src/transformers/backpressure/debounce.dart';
  10. import 'package:rxdart/src/transformers/flat_map.dart';
  11.  
  12. part 'category_filter_location_event.dart';
  13. part 'category_filter_location_state.dart';
  14.  
  15. class CategoryFilterLocationBloc
  16.     extends Bloc<CategoryFilterLocationEvent, CategoryFilterLocationState> {
  17.   final PostCategoryFilterLocationDefault _postCategoryFilterLocationDefault;
  18.   final GetCategoryFilterLocationSearch _getCategoryFilterLocationSearch;
  19.   CategoryFilterLocationBloc(this._postCategoryFilterLocationDefault,
  20.       this._getCategoryFilterLocationSearch)
  21.       : super(CategoryFilterLocationState.initial()) {
  22.     on<OnClickFilterLocationDefault>(
  23.       (event, emit) async {
  24.         emit(state.copyWith(state: RequestState.Loading));
  25.         final result = await _postCategoryFilterLocationDefault.execute();
  26.  
  27.         result.fold(
  28.           (failure) => emit(state.copyWith(
  29.               state: RequestState.Error, message: failure.message)),
  30.           (categoryFilterLocationDefault) {
  31.             emit(
  32.               state.copyWith(
  33.                   state: RequestState.Loaded,
  34.                   dataDefault: categoryFilterLocationDefault,
  35.                   dataSearch: null),
  36.             );
  37.             if (categoryFilterLocationDefault.response.data.province?.length ==
  38.                 0) {
  39.               emit(
  40.                 state.copyWith(
  41.                     state: RequestState.Empty,
  42.                     message: 'Empty Category Filter Location'),
  43.               );
  44.             }
  45.           },
  46.         );
  47.       },
  48.       transformer: restartable(),
  49.     );
  50.  
  51.     on<OnChangeFilterLocationSearch>((event, emit) async {
  52.       final city = event.city;
  53.       emit(state.copyWith(state: RequestState.Loading));
  54.       final result = await _getCategoryFilterLocationSearch.execute(city);
  55.  
  56.       result.fold(
  57.         (failure) => emit(state.copyWith(
  58.             state: RequestState.Error, message: failure.message)),
  59.         (categoryFilterLocationSearch) {
  60.           emit(
  61.             state.copyWith(
  62.                 state: RequestState.Loaded,
  63.                 dataSearch: categoryFilterLocationSearch,
  64.                 dataDefault: null),
  65.           );
  66.           if (categoryFilterLocationSearch.response.data.isEmpty) {
  67.             emit(
  68.               state.copyWith(
  69.                   state: RequestState.Empty,
  70.                   message: 'Empty Category Filter Location'),
  71.             );
  72.           }
  73.         },
  74.       );
  75.     }, transformer: debounce(const Duration(milliseconds: 700)));
  76.   }
  77. }
  78.  
  79. EventTransformer<MyEvent> debounce<MyEvent>(Duration duration) {
  80.   return (events, mapper) => events.debounceTime(duration).flatMap(mapper);
  81. }
  82.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement