Flutter:如何限制用户在给定时间段内点击按钮的次数?

问题描述 投票:0回答:3

我正在使用一个在小吃栏中显示提示的按钮。现在,如果我快速按下按钮(例如 50 次),小吃栏会出现几秒钟,然后再按一次,然后再按一次,直到显示 50 次。我怎样才能防止这种情况发生?

这是我的代码-

          actions: <Widget>[
            Padding(
              padding: const EdgeInsets.all(8.0),
              child: RaisedButton(
                elevation: 7,
                color: Colors.black26,
                child: Text('Button'),
                onPressed: () {
                  _scaffoldKey.currentState
                      .showSnackBar(SnackBar(content: Text("Welcome")));
                },
              ),
            ),
          ],

flutter dart
3个回答
5
投票

您可以使用 tap_debouncer 包来解决您的问题。只需使用冷却功能在有限的时间内禁用按钮按下,以防止多次点击。该软件包还提供了许多其他功能,可以用来解决您的问题。


2
投票

解决这个问题有不同的方法。一是,您可以轻松地暂时防止多次点击。

           bool _enabled = true;


           onPressed: !_enabled
            ? null 
            : () {
              setState(() => _enabled = false);
              _scaffoldKey.currentState
                  .showSnackBar(SnackBar(content: Text("Welcome")));
             
               // Enable it after 1s.
               Timer(Duration(seconds: 1), () => setState(() => _enabled = true));
            },

0
投票

对于这种特殊情况,您可以使用本机 ScaffoldMessenger 方法

removeCurrentSnackBar()

您可以在调用

showSnackBar()
之前调用它来删除正在显示的任何 SnackBar,然后继续渲染新的 SnackBar。

在你的情况下,它看起来像这样:

onPressed: () {
  ScaffoldMessenger.of(context).removeCurrentSnackBar();
  ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text("Welcome")));
},

请注意,

_scaffoldKey.currentState.showSnackBar()
已被弃用,因此需要使用
ScaffoldMessenger.of(context)
来代替。

请参阅文档了解

removeCurrentSnackBar()

Removes the current [SnackBar] (if any) immediately from registered [Scaffold]s.

The removed snack bar does not run its normal exit animation.
If there are any queued snack bars, they begin their entrance animation immediately.
© www.soinside.com 2019 - 2024. All rights reserved.