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
相关产品推荐
相关产品推荐

