如何设置计数器以同时处理 LongPress 和 onTap?

How to set counter to working onLongPress and onTap same time?

我刚刚开始使用 Flutter。如您所知,Flutter 一开始就有一个演示项目。每次我点击,数字都会增加。但是我想当我按住屏幕时,数字以一定的速度增加。但与此同时,一键式命令应该保留。我希望我能说出这件事。 如您所见,我放置了 GestureDetector 和一些东西来自定义代码。那么如何通过添加什么来做到这一点呢?请用这段代码告诉我,我真的很感激。提前致谢!




import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(title: 'Ana Sayfa'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key, required this.title}) : super(key: key);

  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;
  void _incrementCounter() {
    setState(() {
      _counter++;
    });
  }

  @override
  Widget build(BuildContext context) {
    return GestureDetector(
      onTap: () {
        setState(() {
          _counter++;
        });
      },
      child: Scaffold(
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Text(
                'Click Anywhere',
              ),
              Text(
                '$_counter',
              ),
            ],
          ),
        ),
      ),
    );
  }
}

这可以通过使用 Timer 来存档,当有人长按按钮或其他东西时,它将被激活,一旦按钮被释放,它将被停用。为此:

异步导入 dart:

import 'dart:async';

定义一个空定时器:

Timer? timer;

使用 onLongPress 属性 of GestureDetector 来启动定时器,该定时器会周期性地增加计数器:

onLongPress: (){
 timer = Timer.periodic(const Duration(milliseconds: 100), (timer) {
  setState(() {
    _counter++;
   });
 });
},

并在松开长按时使用onLongPressEnd停止计时:

onLongPressEnd: (details){
  timer?.cancel();
},

PS: 降低milliseconds以加快计数器速度。