У меня есть экран, содержащий серию ползунков, где пользователь может выбрать, согласен ли он с чем-то или не согласен, например:
Slider(
key: Key(questionId),
min: 0,
max: 5,
divisions: 5,
value: _value,
onChanged: (value) {
setState(() {
_value = value;
});
},
),
В настоящее время я реализую тест пользовательского интерфейса с использованием testWidgets, в котором пользователь выбирает несколько значений в ползунках, а затем сохраняется, когда пользователь нажимает кнопку, и я хотел бы иметь возможность выбрать значение, например, чтобы провести ползунок на значение «2».
Как я могу это сделать?
Единственная идея, которая у меня есть, это использовать tapAt с точными координатами пикселей, где значение находится в ползунке, но это кажется чрезвычайно сложным.
Для уточнения я спрашиваю о тестировании виджетов, как описано в: https://flutter.dev/docs/cookbook/testing/widget/introduction





Вероятно, это больше не нужно, но, поскольку это был единственный связанный вопрос, который я нашел, когда сам искал ответ, вот мое решение:
WidgetTester имеет функции 'drag/dragFrom/dragUntilVisible':
await tester.drag(find.byType(Slider), Offset(100, 0));
Это перетащит ползунок :)
Я построил расширение, которое перетаскивает до нужного значения. Надеюсь, это поможет кому-нибудь ;)
extension SlideTo on WidgetTester {
Future<void> slideToValue(Finder slider, double value,
{double paddingOffset = 24.0}) async {
final zeroPoint = this.getTopLeft(slider) +
Offset(paddingOffset, this.getSize(slider).height / 2);
final totalWidth = this.getSize(slider).width - (2 * paddingOffset);
final calculatdOffset = value * (totalWidth / 100);
await this.dragFrom(zeroPoint, Offset(calculatdOffset, 0));
}
}