【问题标题】:Flutter Slider loop in BlocBuilderBlocBuilder 中的 Flutter Slider 循环
【发布时间】:2020-06-12 13:33:08
【问题描述】:

我在 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 ...
  }
}),

一定有什么我不明白的地方。谁能给我解释一下?

【问题讨论】:

    标签: flutter flutter-bloc


    【解决方案1】:

    恕我直言,您误解了 BLoC 模式的概念。如果您分享您的 LightBloc 和 LightStates 代码,那就太好了。

    重点是(在此代码中)flutter 仅在构建小部件时检查您的条件(state is LightStateOn) 我们不知道何时调用了builder方法!那么我们该怎么办?我们将使用 BlocConsumer。然后我们监听状态变化。当状态改变并调用监听函数时,flutter 重建小部件

    太好了,现在如果状态改变,flutter 会重建 UI。例如:

     listener: (context, state) {
                isLightOn = (state is LightStateOn) 
              },
    

    我想告诉您,您需要了解您的 bloc 将控制滑块的值,因此该值可以类似于 state.brightness(您在 LightState 中定义)而不是 this.brightness .当我们在onChange: 方法中更新状态时。您编写它的方式可能有效,但在集团概念上是错误的。

    可以是这样的:

    onChanged: (v) => context.read<LightBloc>().add(UpdateBrightnessEvent(v))
                          
    

    如果您分享完整的 BLoC 代码和屏幕,我可以为您提供更多帮助!并为您分享解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-06
      • 1970-01-01
      • 2022-01-25
      • 2021-03-08
      • 1970-01-01
      • 2021-07-28
      • 2017-11-17
      • 2019-07-30
      相关资源
      最近更新 更多