You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中BlocProvider下BlocBuilder仅首次接收状态更新问题求助

问题根源

你的CarouselState继承了Equatable但没有将pageSelected属性加入props列表,这是Bloc状态不触发更新的典型错误。
Bloc默认会对比前后两次状态是否相等,只有状态发生变化时才会通知BlocBuilder刷新UI。而Equatable判断两个实例相等的逻辑就是对比props列表里的所有属性,你当前props返回空数组,意味着所有CarouselState实例都会被判定为完全相等,自然不会触发后续的UI更新。

修复方案

修改CarouselState的props实现,将pageSelected加入对比列表即可:

class CarouselState extends Equatable {
  CarouselState({required this.pageSelected}) {
    print('creating new CarouselState. pageSelected: $pageSelected');
  }

  @override
  List<Object> get props => [pageSelected]; // 将pageSelected加入对比属性列表

  final int pageSelected;
}

修改后重新运行,所有页码切换的状态变更都会正常触发BlocBuilder回调,页码指示器也会跟随选中状态同步更新。

内容的提问来源于stack exchange,提问作者Max90

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 15:15:02