Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //EVENT
- part of 'search_keyword_bloc.dart';
- abstract class SearchKeywordEvent extends Equatable {
- const SearchKeywordEvent();
- @override
- List<Object> get props => [];
- }
- class OnChangeKeyword extends SearchKeywordEvent {
- final String? keyword;
- const OnChangeKeyword(this.keyword);
- }
- //STATE
- part of 'search_keyword_bloc.dart';
- class SearchKeywordState {
- final String? keyword;
- final TextEditingController? controller;
- const SearchKeywordState({
- this.keyword,
- this.controller,
- });
- SearchKeywordState copyWith({
- String? keyword,
- TextEditingController? controller,
- }) {
- return SearchKeywordState(
- keyword: keyword ?? this.keyword,
- controller: controller ?? this.controller,
- );
- }
- factory SearchKeywordState.initial() {
- return SearchKeywordState(
- keyword: '',
- controller: TextEditingController(text: ''),
- );
- }
- }
- //BLOC
- import 'package:bloc/bloc.dart';
- import 'package:equatable/equatable.dart';
- import 'package:flutter/widgets.dart';
- import 'package:rxdart/rxdart.dart';
- part 'search_keyword_event.dart';
- part 'search_keyword_state.dart';
- class SearchKeywordBloc extends Bloc<SearchKeywordEvent, SearchKeywordState> {
- SearchKeywordBloc() : super(SearchKeywordState.initial()) {
- on<OnChangeKeyword>(
- (event, emit) {
- if (event.keyword?.isNotEmpty == true) {
- emit(
- state.copyWith(
- keyword: event.keyword,
- controller: TextEditingController(text: event.keyword)
- ..selection = TextSelection.fromPosition(
- TextPosition(offset: event.keyword?.length ?? 0),
- ),
- ),
- );
- } else {
- emit(
- state.copyWith(
- keyword: '',
- controller: TextEditingController(text: ''),
- ),
- );
- }
- },
- transformer: debounce(const Duration(milliseconds: 500)),
- );
- }
- }
- EventTransformer<MyEvent> debounce<MyEvent>(Duration duration) {
- return (events, mapper) => events.debounceTime(duration).flatMap(mapper);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement