flutter - BlocBuilder 没有更新状态变化
问题描述
我正在尝试使用 BLOC 模式实现播放器。当我更改 mapEventToState() 方法中的状态时,BlocBulder() 小部件未按预期更新。
这是 PlayerBloc:-
class PlayerBloc extends Bloc<PlayerEvent, PlayerState> {
@override
get initialState => PlayerState.Initialized;
@override
Stream<PlayerState> mapEventToState(PlayerEvent event) async* {
if (event is InitialLoad) {
yield PlayerState.Initialized;
} else if (event is PlayStation) {
yield PlayerState.Playing;
} else if (event is StationPlaying) {
yield PlayerState.Playing;
} else if (event is StationStopped) {
yield PlayerState.Stopped;
} else {
yield PlayerState.Stopped;
}
}
}
这是 BlocBuilder:-
class PlayerCollapsed extends StatelessWidget {
@override
Widget build(BuildContext context) {
return BlocBuilder<PlayerBloc, PlayerState>(
bloc: PlayerBloc(),
builder: (BuildContext context, PlayerState state) {
if (state == PlayerState.Initialized) {
print(state);
return Center(child: CircularProgressIndicator());
} else {
return Text("State Updated");
}
},
);
}
}
任何帮助将不胜感激。
解决方案
好的,发生的事情是您使用了 BlocProvider 提供的 PlayerBloc 实例来发出事件,但您为 BlocBuilder 使用了不同的 PlayerBloc 实例。
如果您已使用 BlocProvider 将 PlayerBloc 提供给子树,则您不想创建一个新的。
class PlayerCollapsed extends StatelessWidget {
@override
Widget build(BuildContext context) {
return BlocBuilder<PlayerBloc, PlayerState>(
// bloc: PlayerBloc(), <= delete this part
builder: (BuildContext context, PlayerState state) {
if (state == PlayerState.Initialized) {
print(state);
return Center(child: CircularProgressIndicator());
} else {
return Text("State Updated");
}
},
);
}
}
你可能想看看这个https://github.com/felangel/bloc/issues/943#issuecomment-596220570
推荐阅读
- javascript - 画
- python - requests.exceptions.ConnectionError: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response',))
- c++ - 特征 vect 犰狳 c++
- javascript - 有关 json 更改的状态更新信息失败
- powerbi - 如何将参数传递给 Power BI 中的存储过程
- c# - 是否可以在 AWS Lambda 函数中使用 HTTPClient 和 Windows 身份验证?
- python - cv2.HoughCircles 中的图像加载问题
- spring-integration - 如何使用 ZooKeeper 在 Spring Integration 中实现轮询器的分布式锁
- sql - 需要 SQL JOIN 语句协助
- ios - 已安装cordova-plugin-camera,但未安装xcode说插件