BlocBuilder 构建器函数仅被调用一次

Posted

技术标签:

【中文标题】BlocBuilder 构建器函数仅被调用一次【英文标题】:BlocBuilder builder function gets called only once 【发布时间】:2021-05-19 22:23:09 【问题描述】:

晚上好,我一直在使用 bloc 模式,但遇到了一些问题:无论我做什么,状态更新都只会在 BlocBuilder 上调用一次

我的状态是:

class DateScreenState 
  Future<List<PrimaryPetModifierModel>> primaryPetModifiers;
  Future<List<SecondaryPetModifierModel>> secondaryPetModifiers;

  PrimaryPetModifierModel primaryPetModifierSelected;
  SecondaryPetModifierModel secondaryPetModifierSelected;

  Widget animatedWidget;

  DateTime dateOfSchedule;
  DateTime timeOfSchedule;

  bool shouldReload = false;
  bool isFirstCallAnimation = true;

我的 mapEventToState 看起来像这样:

@override
  Stream<DateScreenState> mapEventToState(
      ScheduleDateScreenEvent event) async* 
    if (event is SelectPrimaryModifierEvent) 
      state.primaryPetModifierSelected = event.modifier;
      yield state;
     else if (event is SelectSecondaryModifierEvent) 
      state.secondaryPetModifierSelected = event.modifier;
      yield state;
    
  

我的确切问题是,当我更改 DropdownButton 中的值时,它会触发 SelectedPrimaryModifierEvent 或 SelectedSecondaryModifier 事件,事件触发工作正常,但状态生成和更新只会在 一次之后发生任何这些事件的第一次触发,之后,BlocBuilder 构建器函数将不再在任何事件之后被调用。

【问题讨论】:

【参考方案1】:

尽管您正在使用 DateScreenState 类更改变量,但每个事件都会产生相同的状态。尝试将您的主要和次要分为不同的状态类,并在您的 mapEventToState 中分别生成它们。

【讨论】:

像深度克隆什么的? 它不会是一个克隆。根据您分享的内容,我并不真正了解您所在集团的所有情况,但您似乎可以为主要国家定义一个单独的状态,为次要定义另一个状态。如果您分享完整的 Bloc/Event/State 代码,我可以看看。 在理解你说的之后,我可以解决我的问题了。谢谢! 很好,没问题。

以上是关于BlocBuilder 构建器函数仅被调用一次的主要内容,如果未能解决你的问题,请参考以下文章

Scipy回调只调用一次

使用 blocbuilder 检查 bloc 状态

使用 bloc 更改屏幕

来自普通函数的 Flutter 调用构建器函数

深潜Koltin协程:协程构建器

我正在使用 BLOC 制作一个简单的计数器应用程序,但是当我增加/减少计数器时,我的计数器没有更新?我使用 BlocBuilder 构建 UI