Flutter Xlider - setState - 数值保持为0,并回调。

问题描述 投票:1回答:1

这可能只是一个简单的问题,但我现在也搞不清楚是怎么回事。我正在使用Flutter xslider https:/pub.devpackagesflutter_xlider。 垂直方向,数值从0到90。当我拖动滑块时,它根据滑块的值重新绘制一条线,同时它改变了TextField中的数值。这曾经工作过,但在添加TextField和更新所有组件(Flutter.Dart.Packages.AndroidStudio)后,我有以下问题。

因为这一行 setState(() { });onDragging 滑块的值总是 保持为 0,并在拖动完成后回调。......如果我不使用setState方法,滑块就会工作,但是我的线条当然不会被画出来,我做错了什么? 是否与周围的组件有关,还是有其他原因?

更新:我找到了解决方案。 我现在自己更新了值的属性,如 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个回答
0
投票

变化 values:[0] 对此

values: [_angleAirplane]

之所以出现这种情况,是因为有 setState 在你 onDragging 方法,并重新绘制0值的滑块。

© www.soinside.com 2019 - 2024. All rights reserved.