Flutter: есть ли опция "onhold" вместо "угнетенного" один раз, чтобы повторить SetState
Мне нужна кнопка, которую я могу удерживать, а затем Settate повторяется, если я не перестану удерживать ее.
Я новичок и работаю над своим первым приложением. Я хочу рассчитать объем. Люди должны поставить в высоту, ширину и глубину. Я не хочу в поле текста (формы), потому что клавиатура необходима. Я нашел решение с двумя кнопками, кнопка добавления и минус.
У меня это работает, но людям приходится нажимать кнопку очень часто, чтобы установить желаемое значение высоты.
Я думал, что вместо угнетения я использую что-то в режиме ожидания, и счетчик быстро добавляется. Но я не знаю решения.
RawMaterialButton(
child: Icon(MdiIcons.minus),
onPressed: () {
setState(() {
width--;
3 ответа
Если эта тема вам все еще интересна, вы можете попробовать holding_gesture
см. https://pub.dev/packages/holding_gesture
Хорошо, я не исправил это. Это было сложно для меня как новичка. Я нашел другое решение. Я сделал ряд с тремя детьми: кнопка "минус" и кнопка "плюс" для точной настройки ползунка для больших шагов.
Это код, который я использовал, у вас есть лучшие решения, дайте мне знать. Я просто размещаю это для других начинающих, как я. Я хочу поблагодарить специального @Abbas.M, который пытался мне помочь.
Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
AnimatedOpacity(
opacity: height == 1 ? 0.0 : 1.0,
duration: Duration(milliseconds: 500),
child: RawMaterialButton(
child: Icon(MdiIcons.minus),
onPressed: () {
setState(() {
height > 1 ? height-- : height = height;
});
},
constraints: BoxConstraints.tightFor(
width: 25.0,
height: 25.0,
),
shape: CircleBorder(),
fillColor: white,
),
),
SliderTheme(
data: SliderTheme.of(context).copyWith(
inactiveTrackColor: cAppBottomBar,
activeTrackColor: white,
thumbColor: white,
overlayColor: cShadow,
thumbShape:
RoundSliderThumbShape(enabledThumbRadius: 10.0),
overlayShape:
RoundSliderOverlayShape(overlayRadius: 17.0),
),
child: Slider(
value: height.toDouble(),
min: 1,
max: 300,
onChanged: (value) {
setState(() {
height = value.toInt();
});
}),
),
AnimatedOpacity(
opacity: height == 300 ? 0.0 : 1.0,
duration: Duration(milliseconds: 500),
child: RawMaterialButton(
child: Icon(Icons.add),
onPressed: () {
setState(() {
height < 300 ? height++ : height = height;
});
},
constraints: BoxConstraints.tightFor(
width: 25.0,
height: 25.0,
),
shape: CircleBorder(),
fillColor: white,
),
),
Вы должны использовать виджет GestureDetector
onTapDown
(для удержания кнопки) и
onTapUp
(для пальца пользователя выпуска).
GestureDetector(
onTapDown: (details) {
print("Someone is touchin' me !!");
},
onTapUp: (details) {
print("I relaxed, oh.");
},
child: Container(
height: 100,
width: 100,
color: Colors.brown,
)),