【问题标题】:Flutter Xlider - setState - value remains 0 and snaps backFlutter Xlider - setState - 值保持为 0 并回弹
【发布时间】:2020-05-30 11:32:16
【问题描述】:

这可能只是一个简单的问题,但我现在无法弄清楚。我正在垂直使用 Flutter xslider https://pub.dev/packages/flutter_xlider,其值从 0 到 90。当我拖动滑块时,它会根据滑块的值重新绘制一条线,同时它会更改 TextField 中的数值。这曾经有效,但在添加 TextField 并更新所有组件(Flutter.Dart.Packages.AndroidStudio)之后,我遇到了以下问题:

由于onDragging 中的setState(() { }); 行,滑块的值始终保持为0,并在拖动完成后弹回。如果我省略了 setState 方法,则滑块可以工作,但是我的线条当然不会被绘制。我究竟做错了什么?建造时与周围的组件有关吗?还是有其他原因?

更新:我找到了解决方案。我现在自己更新 values 属性,例如 values: [sliderValue],而 sliderValue 是一个双重初始化一次,然后在 onDragging 中更新。奇怪的是,文档中从未建议过这一点

 body: Column(
            children: [
              new Padding(
                padding: new EdgeInsets.all(15.0),
              ),
              angleTextQuestion,
              new Padding(
                child: Column(children:[ TextField(  controller: txtAngleC,
                  keyboardType: TextInputType.number,
                  onChanged: (text) {
                    double angle = double.parse(text);
                    if(angle >= 0 && angle <= 90) {
                      _angleAirplane = double.parse(text);
                      setState(() {});
                    }
                  },),
                  Text("(type in a value between 0 - 90)")
                ]),
                padding: new EdgeInsets.all(15.0),
              ),

              Expanded( child: new Row( children: [
                new Padding(
                  padding: new EdgeInsets.all(20.0),
                ),
                Expanded( child: new SizedBox(
                    height: 250,
                    width: 50,
                    child: FlutterSlider(
                values: [0],
                rangeSlider: false,
                max: 90,
                min: 0,
                rtl: true,
                step: FlutterSliderStep(step: 1.0),
                axis: Axis.vertical,
                      tooltip: FlutterSliderTooltip(
                        textStyle: TextStyle(fontSize: 14, color: Colors.lightBlue),
                      ),
                onDragging: (handlerIndex, lowerValue, upperValue) {
                  _angleAirplane = lowerValue;
                  txtAngleC.text = _angleAirplane.toString();
                  setState(() { });
                },
              ))),
                Text(_angleAirplane.toString()),
                new Padding(
                  padding: new EdgeInsets.all(10.0),
                ),
                Expanded( child: new CustomPaint(
                  foregroundPainter: new AnglePainter(
                  angle: _angleAirplane
                )))
              ]
              )),
 ]
        ),
```

【问题讨论】:

    标签: flutter setstate


    【解决方案1】:

    values:[0]改成这个

    values: [_angleAirplane]
    

    发生这种情况是因为您的 onDragging 方法中有一个 setState 并使用 0 值重绘滑块。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-03
      • 2016-04-24
      • 1970-01-01
      • 2020-09-10
      • 2021-11-13
      • 2013-04-13
      • 2021-04-30
      相关资源
      最近更新 更多