Я занимаюсь разработкой приложения 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). Я не знаю, что еще делать.
Надеюсь, вы понимаете, что я пытаюсь сделать. Спасибо всем!