Yura
Yura

Reputation: 2248

How to modify current bloc state like adding, updating, and deleting?

I have 2 screens, the first screen is to display a list of items. The second one is a form for creating a new item. On the server side, after each store, update, destroy action, I returns its value back to the client as a response. The goal here is to update the state without having to make a new request over the network and showing a loading screen over and over every time the user creating a new resource and going back to the screen containing the list.

But since the BlocBuilder is only depends on a specific event and state.data is only available inside an if (event is NameOfEvent) statement, I couldn't modify the current state to push the new value to it.

I found that using BlocListener combined with InitState and setState is somehow working, but I think it makes the state.data is useless inside the BlocBuilder also making the algorithm complicated for such a small task.

Is there any simpler way to achieve this condition?

child: BlocBuilder<EducationBloc, EducationState>(
  builder: (context, state) {
    if (state is EducationLoaded) {
      return ListEducationData(educations: state.data);
    }

    if (state is EducationCreated) {
      final education = state.data;
      // i want to push [education] to <ListEducationData>
    }
...
...

Upvotes: 0

Views: 1219

Answers (1)

Lzyct
Lzyct

Reputation: 46

Create list to store data and use BlocListener so you don't need to change ui every state changes.

var _listEducations = List<EducationData>();

child : BlocListener<EducationBloc,EducationState>(
     listener: (_,state){
             if (state is EducationLoaded) {
                setState(() { //update _listEducations
                   _listEducations.addAll(state.data);
                  });
                }
           },
     child : Container()
)

Upvotes: 1

Related Questions