我正在尝试使用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");
}
},
);
}
}
任何帮助将不胜感激。 ?
答案 0 :(得分:1)
好吧,发生了什么事,您使用了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