如何在处理过程中禁用按钮?我制作了一个喜欢按钮,但是在 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);
如何防止双击此按钮事件??
答案 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('函数正在运行,请稍候');
//您可以编辑它并向用户显示进程正在进行的对话框,他需要等待
}
}