Flutter Xlider - setState - значение остается 0 и возвращается назад - PullRequest
1 голос
/ 30 мая 2020

Это может быть простая проблема, но я как-то не могу ее решить прямо сейчас. Я использую Flutter xslider https://pub.dev/packages/flutter_xlider вертикально со значениями от 0 до 90. Когда я перетаскиваю ползунок, он перерисовывает строку в зависимости от значения ползунка и одновременно меняет значение numeri c в текстовом поле. Когда-то это сработало, но после добавления TextField и обновления всех компонентов (Flutter. Dart. Packages. AndroidStudio) у меня возникла следующая проблема:

из-за строки setState(() { }); в onDragging значение ползунка всегда остается 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
                )))
              ]
              )),
 ]
        ),
```

1 Ответ

0 голосов
/ 02 июня 2020

замените values:[0] на это

values: [_angleAirplane]

это происходит потому, что в вашем методе onDragging есть setState и перерисуйте ползунок со значением 0.

...