多流触发场景下限制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
相关产品推荐
相关产品推荐

