当前位置: 首页 > 知识库问答 >
问题:

如何在单击一次后禁用onTap功能。使用颤振

谭嘉歆
2023-03-14
class VoteCalonUmumPage extends StatelessWidget {

Const VoteCalonUmumPage({Key?key,必需this.title}):超级(key: key);

最后的字符串标题;

小部件_buildListItem(BuildContext上下文,DocumentSnapshot文档){返回ListTile(tileColor: Color(0xff99c2ec),标题:Row(子:[Expanded(子:文本(文档['name'],样式:TextStyle(颜色:Colors.black87,fontsize: 20,)),

      ),
      Container(
        decoration: const BoxDecoration(
          color: Color(0xffecc399),
        ),
        padding: const EdgeInsets.all(10.0),
        child: Text(
          document['votes'].toString(),
          style: Theme
              .of(context)
              .textTheme
              .headline4,
        ),
      ),
    ],
  ),
  onTap: () {
    FirebaseFirestore.instance.runTransaction((transaction) async {
      DocumentSnapshot freshSnap =
      await transaction.get(document.reference);
      await transaction.update(freshSnap.reference, {
        'votes': freshSnap['votes'] + 1,
      });
    });
  },
);

}

共有3个答案

高琛
2023-03-14

为了实际禁用onTap处理程序,您必须将null传递给onTap。我将在这个类中创建一个变量来跟踪onTap是否已经被按下,如果已经按下,则将null传递到onTap而不是您的回调函数。

onTap: onTapPressed ? null : () {
  setState(() {
    // call set state here so that the UI will be updated.
    onTapPressed = true;
  });
  FirebaseFirestore.instance.runTransaction((transaction) async {
    DocumentSnapshot freshSnap =
    await transaction.get(document.reference);
    await transaction.update(freshSnap.reference, {
      'votes': freshSnap['votes'] + 1,
    });
  });
},

然后在小部件中添加此成员。

bool onTapPressed = false;

另外listile还有一个名为enabled的可选参数,您可以将该参数设置为false,而不是将null传递给onTap。此方法将禁用列表互动程序上的所有处理程序,而不仅仅是onTap(例如,您可能还有一个onLongPress处理程序)。它还将更新样式以使用当前主题中的禁用的颜色。

disabled: !onTapPressed,
onTap: () {
  setState(() {
    // call set state here so that the UI will be updated.
    onTapPressed = true;
  });
  FirebaseFirestore.instance.runTransaction((transaction) async {
    DocumentSnapshot freshSnap =
    await transaction.get(document.reference);
    await transaction.update(freshSnap.reference, {
      'votes': freshSnap['votes'] + 1,
    });
  });
},

朱啸
2023-03-14

签出下面的代码一个简单的逻辑它可能会帮助你,

bool isLoading = false; //global variable

onTap: () {
if(!isLoading)
  {

    isLoading = true;
    try{
      FirebaseFirestore.instance.runTransaction((transaction) async {
        DocumentSnapshot freshSnap =  await transaction.get(document.reference);
        await transaction.update(freshSnap.reference, {'votes': freshSnap['votes'] + 1,});
        isLoading = false;
      });
    }catch((e){
      isLoading = false
    });
  }
},
穆建元
2023-03-14

你可以提出这样的条件:-

设置一个bool变量并将其设置为true,当用户点击按钮时,如果要永久禁用使用优先级,则将其设置为false

bool=true;

GestureDetector(
onTap:  (){
      if(isClicked){
        isClicked = true;
    enter code here
       }

   } 
  child: Container(),
)
 类似资料:
  • 编辑:底部的解决方案 这是一个跳棋游戏。单击一个按钮后,它等待单击第二个按钮与之交换。然而,有时你可能不想移动那个按钮,但一旦你点击了它,就没有回头路了,因为我无法禁用它。 在这里的其他帖子中,我看到人们使用 这只是使它在第一次单击后不可见。 这什么都干不了。 这也没什么用。编辑:所有这些方法都用true和false进行了尝试。 私有无效交换(){ 但你也需要 这样它就重新启用了它,或者其他什么,

  • 问题内容: 我在网上浏览了很多,其中包括几个堆栈溢出示例,以解决该问题。具体来说,我尝试了以下方法: 两者都不如广告中所述。还有其他建议吗?请仅提供角度建议。谢谢。 问题答案: 您非常接近答案。您唯一错过的是使用调用按钮上的函数。 另一个问题是,控制器中的功能应该是,而不是 工作示例: index.html应该类似于: 您的控制器application.js就像:

  • 问题内容: jQuery click函数在这里工作正常 但是如果我通过ajax 设置一些功能,将无法正常工作。 例如 现在,最后一个不起作用。 jsfiddle示例:http : //jsfiddle.net/suhailvs/wjqjq/ 注意:CSS在这里工作正常。 我想使这些新添加的与jQuery click一起工作。 问题答案: 问题是.click仅适用于页面上已经存在的元素。如果要连接将

  • 好的,伙计们。我正在尝试创建一个小费计算器,我遇到了一些问题。问题是当用户输入一个值时,程序会询问(禁用enter按钮)用户是否希望包含提示,因此用户选择是或否。如果选择了其中任何一个,前面的问题就消失了,文字出现“小费包括在内”或“小费不包括在内”。现在,如果用户想要编辑上面的值,按钮将再次被启用,但是如果它点击了一个,它将再次询问用户是否想要包含提示。所以我的问题是,我怎样才能使它使它,无论那

  • 问题内容: 提交表单时,我正在使用jquery $ .post。我想在单击按钮后禁用按钮约5秒钟,以避免多次提交表单。 这是我现在所做的: 我之前使用了fadeIn和fadeOut,但是当我快速测试单击按钮时仍然无法正常工作。我应该怎么做才能实现自己想实现的目标? 问题答案: 您可以这样操作: 或者您可以使用ajax收到响应后正在执行的jQuery 方法: 编辑: 这是一个 3秒钟服务器端响应延迟

  • 本文向大家介绍如何禁止浏览器使用后退按钮功能,包括了如何禁止浏览器使用后退按钮功能的使用技巧和注意事项,需要的朋友参考一下 本文介绍可找到的各种禁用浏览器后退按钮方案,分析它们各自的优缺点和适用场合。 一、概述    曾经有许多人问起,“怎样才能‘禁用'浏览器的后退按钮?”,或者“怎样才能防止用户点击后退按钮返回以前浏览过的页面?”在ASP论坛上,这个问题也是问得最多的问题之一。遗憾的是,答案非常