Advertisement
rifki_cs29

Bloc

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