0

I have been battling with this flutter bloc problem. I am currently using flutter Bloc 7.0.1. The BlocConsumer doesn't listen to the state changes at all. Anytime I enter values inside the search field, event is been called and state is yielded but the listener fail to listen to state changes.

This issue is really driving me mad.

STATE

part of 'people_bloc.dart';
@immutable
abstract class PeopleState {}

class PeopleInitial extends PeopleState {}

class PeopleLoadingState extends PeopleState {
  @override
  List<Object?> get props => [];
}

class SearchLoadingState extends PeopleState {
  @override
  List<Object?> get props => [];
}

BLOC

List<SearchPeopleResponseData> people = [];
  @override
  Stream<PeopleState> mapEventToState(
    PeopleEvent event,
  ) async* {
    if (event is SearchPeopleEvent) {
      yield SearchLoadingState();
      try {
        var token = await getToken();
        //print(token);
        SearchPeopleResponse responseData =
            await client.getPeople(token!, event.term);

        if (responseData.status == 200) {
          yield GetSearchResultState(getPeopleResponse: responseData);
        } else {
          yield PeopleErrorState(message: responseData.msg);
          print("loadingE");
        }
      } catch (e) {
        //print("error msg here ${e.toString()}");
        PeopleErrorState(message: e.toString());
      }
    }

EVENT

part of 'people_bloc.dart';

@immutable
abstract class PeopleEvent {
  const PeopleEvent();
}

class GetPeopleEvent extends PeopleEvent {
  final String term;
  GetPeopleEvent({required this.term});
  @override
  List<Object> get props => [term];
}

class SearchPeopleEvent extends PeopleEvent {
  final String term;
  SearchPeopleEvent({required this.term});
  @override
  List<Object> get props => [term];
}

VIEW

Widget build(BuildContext context) {
    return BlocConsumer<PeopleBloc, PeopleState>(
                listener: (context, state) {
        print("Listener has been called");
        if (state is GetSearchResultState) {
          loading = false;
          print("Result Found in view");
        } else if (state is SearchLoadingState) {
          loading = true;
          print("Search loading");
        } else if (state is PeopleLoadingState) {
          loading = true;
        }

See screenshot

0 Answers0