Как непрерывно увеличивать или уменьшать значение, используя свойство onLongPressed в RawMaterialButton? - PullRequest
1 голос
/ 30 апреля 2020

Я делаю приложение со следующим элементом

enter image description here

Мой код для кнопок: -

RawMaterialButton(
      child: Icon(
        symbol,
        color: Colors.white,
      ),
      constraints: BoxConstraints.tightFor(
        width: 56.0,
        height: 56.0,
      ),
      shape: CircleBorder(),
      fillColor: Color(0xFF4C4F5E),
      elevation: 6.0,
      onPressed: action,
    )

action - определяемая пользователем функция. Я хочу, чтобы, если я продолжаю нажимать кнопку плюс или минус, значение будет соответственно увеличиваться или уменьшаться. Как я могу это сделать? Я хочу избежать использования Timer класса и предпочитаю использовать циклы.

1 Ответ

1 голос
/ 30 апреля 2020

Вы можете сделать это с помощью Timer очень легко, но поскольку вы не хотите использовать его, вы должны будете использовать будущее (asyn c), чтобы добиться этого.

Я сделал для вас демонстрационную версию Follow. Надеюсь, это поможет.

 int counter = 0;
  bool ontap = false;

  subtract() async {
    await Future.delayed(Duration(milliseconds: 100));
    setState(() {
      counter--;
    });
    if (ontap) {
      subtract();
    }
  }

  addcounter() async {
    await Future.delayed(Duration(milliseconds: 100));
    setState(() {
      counter++;
    });
    if (ontap) {
      addcounter();
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Container(
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.center,
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text(
              counter.toString(),
              style: TextStyle(fontSize: 30, color: Colors.red),
            ),
            Row(
              mainAxisAlignment: MainAxisAlignment.center,
              children: [
                GestureDetector(
                  onTap: () {
                    //  ontap = true;
                    subtract();
                  },
                  onLongPress: () {
                    ontap = true;
                    subtract();
                  },
                  onLongPressEnd: (_) {
                    setState(() {
                      ontap = false;
                    });
                  },
                  child: Container(
                    width: 100,
                    height: 100,
                    decoration: BoxDecoration(
                      shape: BoxShape.circle,
                      color: Colors.red,
                    ),
                    child: Icon(Icons.remove),
                  ),
                ),
                SizedBox(
                  width: 20,
                ),
                GestureDetector(
                  onTap: () {
                    addcounter();
                  },
                  onLongPress: () {
                    ontap = true;
                    addcounter();
                  },
                  onLongPressEnd: (_) {
                    setState(() {
                      ontap = false;
                    });
                  },
                  child: Container(
                    width: 100,
                    height: 100,
                    decoration: BoxDecoration(
                      shape: BoxShape.circle,
                      color: Colors.red,
                    ),
                    child: Icon(Icons.add),
                  ),
                )
              ],
            )
          ],
        ),
      ),
    );
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...