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,
                )),
Другие вопросы по тегам