如何监听状态属性变化 Flutter bloc 模式

Fed*_*zza 5 android state flutter bloc

我正在开发一个 Flutter 应用程序,我遇到了标题提到的问题。

BLoC 管理具有人员模型属性的表单的行为。

所以我的状态类看起来像这样。

class SynchronizedForm extends Equatable {

  final PersonModel savedModel;

  final PersonModel actualModel;

  SynchronizedForm(this.savedModel, this.actualModel);

} 
Run Code Online (Sandbox Code Playgroud)

注意:PersonModel 还扩展了 Equatable。

我向 BLoC 添加了一个简单委托,只是为了让我知道应用程序运行期间到底发生了什么。

委托打印所有状态转换。

实际模型的属性通过事件(BLoC 模式)进行更新。

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);
   }
}
Run Code Online (Sandbox Code Playgroud)

所以主要问题是我的屏幕中有一些小部件会消耗此状态更改,但是当实际状态是 SynchronizedForm 并且我修改了 person 时,我再次返回 SynchronizedForm。这里没有明确的转换,但我需要一个。

我尝试不用 Equatable,用 Equatable。使用 BlocConsumer、BlocListener(所有这些都来自 flutter_bloc 包)。我不知道还要做什么。

我希望你明白我想做什么。谢谢你们!

Jos*_*ges 0

据我了解,即使您正在传递相同的状态,您也希望基本上重建状态。为此,您需要创建状态属性的新副本,以便它捕获更改。

更多信息请参见: https: //bloclibrary.dev/#/faqs