Вы можете сделать это с помощью 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),
),
)
],
)
],
),
),
);
}