我有个问题.我有几个纽扣.我想如果用户点击一个按钮,标签应该显示10秒.现在我有了下面的问题.正如我所说的,我有几个按钮.

enter image description here

如果用户点击button1,则isTagActive == True应设置为10秒. 这对我很管用.

但问题是,如果用户点击button1,而在2秒button2之后,isTagActive == True也只显示10秒.但定时器应在button2设置后从新开始.所以计时器从第一个按钮开始计时,但是应该从最后一个按钮开始计时.我怎么才能改变这一切呢?

因此,如果用户单击一个按钮,计时器应该从头开始.

代码

void processClick() async {

    setState(() {
      number++;
    });
    changeActiveStatus();
...
}


  // This is the method
  Future<void> changeActiveStatus() async {
    isTagActive = true;
    if(mounted) {
      setState(() {});
    }

    await Future.delayed(const Duration(seconds: 10), () {
      isTagActive = false;
      if(mounted) {
        setState(() {});
      }
    });


  }

推荐答案

如果您打算重置时间,您可以使用debounce.

void processClick() async {
  setState(() {
    number++;
  });

  changeActiveStatus();
  ...
}

Timer? _debounce;

// This is the method
Future<void> changeActiveStatus() async {
  isTagActive = true;
  if (mounted) {
    setState(() {});
  }

  if (_debounce?.isActive ?? false) _debounce!.cancel();
  _debounce = Timer(
    const Duration(seconds: 10),
    () {
      isTagActive = false;
      if (mounted) {
        setState(() {});
      }
    },
  );
}

Flutter相关问答推荐

如何将图像从顶部和底部半向外设置为飘动

如何在用Ffltter成功登录后重定向下一页?

从超级应用程序启动时,Flutter 小应用程序中未加载资源

在Flutter 中更改扩展瓷砖的高度

如何在 Dart/Flutter 中克隆 Future

参数类型void Function()无法分配给参数类型void Function(LongPressEndDetails)?

要禁用按钮上的通知声音,请点击Flutter

Flutter Riverpod 对提供者状态的变化做出react

如何计算 Firestore 集合中的文档数量?

使用 Play Integrity API 时,Firebase 电话身份验证问题缺少客户端标识符错误

如何在 Flutter 中的 BackdropFilter.blur 中制作一个 100x100 的清晰孔

对话框打开时如何使背景模糊?

按下 Command+W 时关闭窗口

无效的 depfile: C:\xxx\xxx\Flutter\project_name\.dart_tool\flutter_build\df4b308df1ee4bce22c56c71751554d1\kernel_snapshot.d 无效

在 flutter 中使用 Firebase 实时数据库数据创建无限滚动效果

将 onSaved(value) 从自定义 TextFormField 小部件传递给另一个?

我的主屏幕上的 FutureBuilder 不断重新加载(但仅在其他屏幕上时)?

是否可以在 Flutter 中使用 ToggleButtons 在页面 PageView 之间切换?

如何在 Flutter 中创建类似箭头标签的设计

Flutter Firebase 可以在真实设备上运行,而不是在 Android 模拟器上运行