我在BlocBuilder中使用了一个滑块,该滑块允许我检索初始值,但是当我想更改滑块的值时,我总是输入LightStateOn条件,而我的值采用state.brightness值。
BlocBuilder<LightBloc, LightState>(
builder: (context, state) {
if (state is LightStateOn) {
this.brightness = state.brightness.toDouble();
return Slider(
value: this.brightness,
min: 0,
max: 255,
onChanged: (value) {
setState(() => this.brightness = value);
},
);
// );
} else {
return ...
}
}),
肯定有些我不理解的东西。有人可以给我解释一下吗?
答案 0 :(得分:0)
恕我直言,您误解了 BLoC 模式的概念。如果您能分享您的 LightBloc 和 LightStates 代码,那就太好了。
重点是(在此代码中)flutter 仅在构建小部件时检查您的条件 (state is LightStateOn)
!
我们不知道何时调用 builder 方法!那么我们该怎么办?我们将使用 BlocConsumer。然后我们监听状态变化。当状态改变并调用监听器函数时,flutter 重新构建小部件!
太好了,现在如果状态改变,flutter 会重建 UI。例如:
listener: (context, state) {
isLightOn = (state is LightStateOn)
},
我想告诉您,您需要了解您的集团将控制滑块的值,因此该值可以是类似于 state.brightness(您在您的光状态)。当我们在 this.brightness
方法中更新状态时。您编写它的方式可能有效,但在集团概念中是错误的。
可以是这样的:
onChange:
如果您分享完整的 BLoC 代码和屏幕,我可以为您提供更多帮助!并为您分享解决方案。