You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多流触发场景下限制SnackBar每2秒最多显示一次的问题求助

多流触发场景下限制SnackBar每2秒最多显示一次的问题求助

各位好,我最近在Flutter开发中碰到了个头疼的小问题,想请教下大家的解决方案:

我有三个独立的数据流,它们随时都可能触发回调。不管哪个流触发,我都希望给用户弹出一个提示数据更新的SnackBar,但有个核心要求:每2秒最多只能显示一次SnackBar,绝对不能出现短时间内连续弹出好几个的情况。

目前的现状是,这几个流经常会在相近的时间点触发,导致SnackBar连续弹3次,完全没达到我想要的限制效果。我自己尝试用一个布尔变量来做开关控制,但好像没起作用,以下是我当前的代码:

class StateClass extends State<MyStatefulWidget> {
  bool _canShowDataUpdatedMessage = true;

  void _showDataUpdatedMessage() {
    if (mounted && _canShowDataUpdatedMessage) {
      _canShowDataUpdatedMessage = false;
      ScaffoldMessenger.of(
        context,
      ).showSnackBar(
        SnackBar(
          content: Text(
            "Data updated",
            style: TextStyle(
              color: Colors.green,
            ),
          ),
        ),
      );
      Future.delayed(
        Duration(
          seconds: 2,
        ),
      ).then(
        (value) => _canShowDataUpdatedMessage = true,
      );
    }
  }

  @override
  void initState() {
    _stream.listen(
      (event) {
        _showDataUpdatedMessage();
      },
    );
    _stream1.listen(
      (event) {
        _showDataUpdatedMessage();
      },
    );
    _stream2.listen(
      (event) {
        _showDataUpdatedMessage();
      },
    );
  }
}

我原本的思路是,用_canShowDataUpdatedMessage这个变量来标记是否可以显示SnackBar,每次触发后就把它设为false,然后通过Future.delayed延迟2秒再把它改回true,但实际运行下来还是会连续弹出多个SnackBar,有没有大佬能帮我看看问题出在哪,或者有没有更靠谱的实现方式?

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.08 10:52:58