Это может быть простая проблема, но я как-то не могу ее решить прямо сейчас. Я использую 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
)))
]
)),
]
),
```