首页 > 解决方案 > 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 ...
  }
}),

一定有什么我不明白的。有人可以向我解释一下吗?

标签: flutterflutter-bloc

解决方案


恕我直言,您误解了 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 代码和屏幕,我可以为您提供更多帮助!并为您分享解决方案。


推荐阅读