Advertisement
rifki_cs29

SearckKeywordBloc

Apr 23rd, 2022
1,410
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Dart 2.14 KB | None | 0 0
  1. //EVENT
  2.  
  3. part of 'search_keyword_bloc.dart';
  4.  
  5. abstract class SearchKeywordEvent extends Equatable {
  6.   const SearchKeywordEvent();
  7.  
  8.   @override
  9.   List<Object> get props => [];
  10. }
  11.  
  12. class OnChangeKeyword extends SearchKeywordEvent {
  13.   final String? keyword;
  14.  
  15.   const OnChangeKeyword(this.keyword);
  16. }
  17.  
  18. //STATE
  19.  
  20. part of 'search_keyword_bloc.dart';
  21.  
  22. class SearchKeywordState {
  23.   final String? keyword;
  24.   final TextEditingController? controller;
  25.  
  26.   const SearchKeywordState({
  27.     this.keyword,
  28.     this.controller,
  29.   });
  30.  
  31.   SearchKeywordState copyWith({
  32.     String? keyword,
  33.     TextEditingController? controller,
  34.   }) {
  35.     return SearchKeywordState(
  36.       keyword: keyword ?? this.keyword,
  37.       controller: controller ?? this.controller,
  38.     );
  39.   }
  40.  
  41.   factory SearchKeywordState.initial() {
  42.     return SearchKeywordState(
  43.       keyword: '',
  44.       controller: TextEditingController(text: ''),
  45.     );
  46.   }
  47. }
  48.  
  49. //BLOC
  50. import 'package:bloc/bloc.dart';
  51. import 'package:equatable/equatable.dart';
  52. import 'package:flutter/widgets.dart';
  53. import 'package:rxdart/rxdart.dart';
  54.  
  55. part 'search_keyword_event.dart';
  56. part 'search_keyword_state.dart';
  57.  
  58. class SearchKeywordBloc extends Bloc<SearchKeywordEvent, SearchKeywordState> {
  59.   SearchKeywordBloc() : super(SearchKeywordState.initial()) {
  60.     on<OnChangeKeyword>(
  61.       (event, emit) {
  62.         if (event.keyword?.isNotEmpty == true) {
  63.           emit(
  64.             state.copyWith(
  65.               keyword: event.keyword,
  66.               controller: TextEditingController(text: event.keyword)
  67.                 ..selection = TextSelection.fromPosition(
  68.                   TextPosition(offset: event.keyword?.length ?? 0),
  69.                 ),
  70.             ),
  71.           );
  72.         } else {
  73.           emit(
  74.             state.copyWith(
  75.               keyword: '',
  76.               controller: TextEditingController(text: ''),
  77.             ),
  78.           );
  79.         }
  80.       },
  81.       transformer: debounce(const Duration(milliseconds: 500)),
  82.     );
  83.   }
  84. }
  85.  
  86. EventTransformer<MyEvent> debounce<MyEvent>(Duration duration) {
  87.   return (events, mapper) => events.debounceTime(duration).flatMap(mapper);
  88. }
  89.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement