Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 如何防止多次点击手势?_Flutter_Dart - Fatal编程技术网

Flutter 如何防止多次点击手势?

Flutter 如何防止多次点击手势?,flutter,dart,Flutter,Dart,我有一个需要启动url的手势检测器。但是如果这个手势被多次点击,那么启动就会被多次调用 在当前代码中,我试图使用状态按钮来控制点击。但是,在发射开始之前,什么时候完成 _isButtonTapped = false Widget _buildButton(String key, Text title, String url) { _onTapped() async { if (await canLaunch(url)) { launch(url)

我有一个需要启动url的手势检测器。但是如果这个手势被多次点击,那么启动就会被多次调用

在当前代码中,我试图使用状态按钮来控制点击。但是,在发射开始之前,什么时候完成

   _isButtonTapped = false

   Widget _buildButton(String key, Text title, String url) {
    _onTapped() async {
      if (await canLaunch(url)) {
        launch(url).whenComplete(
          () => setState(() {
                _isButtonTapped = false;
              }),
        );
      }
    }

    return GestureDetector(
      onTap: () {
        _isButtonTapped ? null : _onTapped();
        setState(() {
          _isButtonTapped = true;
        });
      },
      child: Container(
        child: Padding(
          padding: EdgeInsets.all(6.0),
          child: Center(child: title),
        ),
      ),
    );
  }
试试这个:

class _HomePageState extends State<HomePage> {
  bool _isButtonTapped = false;
  String _url = "https://google.ca";

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Container(
          color: Colors.blue,
          width: 100,
          height: 100,
          child: GestureDetector(
            onTap: () async {
              if (!_isButtonTapped) { // only allow click if it is false
                _isButtonTapped = true; // make it true when clicked
                if (await canLaunch(_url)) {
                  await launch(_url);
                  _isButtonTapped = false; // once url is launched successfully, we again make it false, allowing tapping again
                }
              }
            },
          ),
        ),
      ),
    );
  }
}
class\u HomePageState扩展状态{
bool _isButtonTapped=假;
字符串url=”https://google.ca";
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:中(
子:容器(
颜色:颜色,蓝色,
宽度:100,
身高:100,
儿童:手势检测器(
onTap:()异步{
如果(!\u isButtonTapped){//仅允许在为false时单击
_isButtonTapped=true;//单击时将其设置为true
如果(等待canLaunch(_url)){
等待启动(_url);
_isButtonTapped=false;//一旦url成功启动,我们再次将其设为false,允许再次点击
}
}
},
),
),
),
);
}
}

添加
onDoubleTap:()=>null
可防止双重点击,并使执行多重点击更加困难。但这并不能完全阻止它。谢谢你的回答,但这并不能改变任何事情。。。如果“\u isButtonTapped=false;”,则它确实有效在最后一行中,已删除。但是,该按钮只能永久单击一次。它就像启动(_url)没有等待,并且在操作完成之前将_isButtonTapped设置为false。。。我会尽力调查:)