处理颤振时禁用按钮

时间:2021-04-19 13:01:11

标签: flutter flutter-layout

如何在处理过程中禁用按钮?我制作了一个喜欢按钮,但是在 db 上注册喜欢需要一些延迟。如何在处理完成时防止按下按钮。 ??

onPressed: () {
                  setState(() {
                    _color = Colors.green;
                    _icon = Icon(Icons.favorite);
                    final like = LikeData(
                      campaingID: donation.campaignID,
                      dateTime: Timestamp.now(),
                      userName: FirebaseAuth.instance.currentUser.displayName,
                      userId: user.uid,
                    );
                    likeService.newLike(donation, like);

如何防止双击此按钮事件??

4 个答案:

答案 0 :(得分:2)

试试这个

bool isProcessing = false; // in your class before build method

onPressed: !isProcessing ? () {
          setState(() {
            isProcessing = true;
            _color = Colors.green;
            _icon = Icon(Icons.favorite);
            final like = LikeData(
              campaingID: donation.campaignID,
              dateTime: Timestamp.now(),
              userName: FirebaseAuth.instance.currentUser.displayName,
              userId: user.uid,
            );
            likeService.newLike(donation, like).then((val) {
              setState() {
                isProcessing = false;
              }
            });
          });
        } : null,

答案 1 :(得分:0)

将其视为三种不同的状态,例如“初始”、“pressedConfirmationPending”和“pressedAndConfirmed”。然后可以根据此状态启用按钮,例如:

String buttonStatus = 'initial';
...
MyButton(
  ...
  enabled: buttonStatus == 'initial' || buttonStatus == 'pressedAndConfirmed',
  ...
);

在您开始输入处理之前将状态设置为“pressedConfirmationPending”,然后在您收到处理完成的确认后设置为“pressedAndConfirmed”。

此外,按钮的设计和子小部件很可能会有所不同,也可能是 onPressed 功能。

答案 2 :(得分:0)

您可以在处理之间添加一个变量。

我认为'newLike'是同步方法。
因此,您将检查变量设置为 true 并处理“newLike”。
之后设置检查变量 false 以启用按钮。

bool isProcessing = false;

...

onPressed: isProcessing ? null : () async {
                  setState(() {
                     isProcessing = true;

                    final like = LikeData(
                      campaingID: donation.campaignID,
                      dateTime: Timestamp.now(),
                      userName: FirebaseAuth.instance.currentUser.displayName,
                      userId: user.uid,
                    );
                    await likeService.newLike(donation, like);
                  });

                  setState(() {
                    _color = Colors.green;
                    _icon = Icon(Icons.favorite);
                      isProcessing = false;
                  });

答案 3 :(得分:0)

首先你需要像这样创建 bool 变量 '

bool _isworking=false;

onPressed:(){

if(_isworking==false){

 setState(() {
_isworking=true;
});

{{ 这里是你的函数 }}

setState(() {

_isworking=false;

});

} 别的 {

print('函数正在运行,请稍候');

//您可以编辑它并向用户显示进程正在进行的对话框,他需要等待

}

}