flutter - BlocBuilder 中的 Flutter Slider 循环
问题描述
我在 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 ...
}
}),
一定有什么我不明白的。有人可以向我解释一下吗?
解决方案
恕我直言,您误解了 BLoC 模式的概念。如果您分享您的 LightBloc 和 LightStates 代码,那就太好了。
关键是(在此代码中)flutter(state is LightStateOn)
仅在构建小部件时检查您的条件!
我们不知道何时调用了builder方法!那么我们该怎么办?我们将使用 BlocConsumer。然后我们监听状态变化。当状态改变和监听函数被调用时,颤振重建小部件!
Greate,现在如果状态改变,flutter 会重建 UI。例如:
listener: (context, state) {
isLightOn = (state is LightStateOn)
},
我想告诉您,您需要了解您的 bloc 将控制滑块的值,因此this.brightness
该值可以是 state.brightness (您在 LightState 中定义)之类的东西,而不是 。当我们在onChange:
方法中更新状态时。您编写它的方式可能有效,但在集团概念中是错误的。
可以是这样的:
onChanged: (v) => context.read<LightBloc>().add(UpdateBrightnessEvent(v))
如果您分享完整的 BLoC 代码和屏幕,我可以为您提供更多帮助!并为您分享解决方案。
推荐阅读
- python - 向上移动行并重置索引熊猫数据框
- powershell - 活动目录通过powershell删除描述和office字段
- vb.net - 记录我想使用 vb.net 在相同的信封 id 中发送其他文件
- python - Django orm 删除重叠的 date_ranges
- r - r:使用重复循环创建有限大小的集群
- jmeter - 在一个 Jmeter 正则表达式中提取多个标签值
- django - graphene-django:没有“Meta.fields”或“Meta.exclude”的“Meta.model”自 0.15.0 以来已被弃用,现在已被禁止
- java - 单向一对多关联的条件查询,使用实体列表进行搜索
- angular - 如何在 ngRX 效果中测试 forkJoin
- python - 仅在包含两列 NaN 的那些行中填写 NaN