Как изменить текущее состояние blo c, например добавление, обновление и удаление? - PullRequest
0 голосов
/ 04 августа 2020

У меня 2 экрана, первый экран для отображения списка элементов. Второй - это форма для создания нового предмета. На стороне сервера после каждого действия store, update, destroy я возвращаю его значение обратно клиенту в качестве ответа. Цель здесь - обновить состояние без необходимости делать новый запрос по сети и показывать экран загрузки снова и снова каждый раз, когда пользователь создает новый ресурс и возвращается к экрану, содержащему список.

Но поскольку BlocBuilder зависит только от определенного события c, а state.data доступен только внутри оператора if (event is NameOfEvent), я не мог изменить текущее состояние на pu sh новое значение для него.

Я обнаружил, что использование BlocListener в сочетании с InitState и setState каким-то образом работает, но я думаю, что это делает state.data бесполезным внутри BlocBuilder, а также усложняет алгоритм для такого маленького задача.

Есть ли более простой способ достичь этого условия?

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>
    }
...
...

1 Ответ

1 голос
/ 04 августа 2020

Создайте список для хранения данных и используйте BlocListener , чтобы вам не нужно было изменять пользовательский интерфейс при каждом изменении состояния.

var _listEducations = List<EducationData>();

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