Как прослушать изменения свойств состояния Flutter blo c pattern - PullRequest
0 голосов
/ 03 марта 2020

Я занимаюсь разработкой приложения Flutter и столкнулся с упомянутой в заголовке проблемой.

BLo C управляет поведением формы со свойствами модели Person.

Так что мой Класс состояния выглядит следующим образом.

class SynchronizedForm extends Equatable {

  final PersonModel savedModel;

  final PersonModel actualModel;

  SynchronizedForm(this.savedModel, this.actualModel);

} 

Примечание : PersonModel также расширяет Equatable.

Я добавил простой делегат в BLo C, просто чтобы я знал, что именно происходит во время выполнения приложения.

Делегат печатает на всех переходах состояний.

Свойства actualModel обновляются с помощью Events (шаблон BLo C).

class PersonBloc extends Bloc<PersonEvent, PersonState> {

  PersonModel person;

  PersonBloc (PersonModel person);

  @override
  PersonState get initialState => SynchronizedForm (person, person.copyWith());

  @override
  Stream<PersonState> mapEventToState(
    PersonEvent event) async* {

    if (event is ModifyPerson)
      yield* _modifyPerson();

    else if ...
  }

  Stream<PersonState> _modifyPerson(
    ModifyPerson event) async* {

    PersonModel actual = state.actualModel;

    actual.prop = event.value;

    yield SynchronizedForm (
       state.savedModel,
       actual);
   }
}

Итак, основная проблема заключается в том, что у меня на экранах виджеты, которые потребляют это состояние, меняются, но когда фактическое состояние - SynchronizedForm, и я изменяю человека, я снова возвращаю SynchronizedForm. Здесь нет явного перехода, но мне нужен один.

Я пробовал без Equatable, с Equatable. Использование BlocConsumer, BlocListener (все это из пакета flutter_blo c). Я не знаю, что еще делать.

Надеюсь, вы понимаете, что я пытаюсь сделать. Спасибо всем!

1 Ответ

0 голосов
/ 23 апреля 2020

Из того, что я понимаю, вы хотите в основном восстановить состояние, даже если вы переходите в то же состояние. Для этого вам нужно будет создать новые копии свойств состояния, чтобы оно уловило изменение.

Подробнее об этом здесь: https://bloclibrary.dev/# / faqs

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...