Flutter Messaging App - 禁用图标按钮
Flutter Messaging App - Disabling Icon Button
我有一个消息传递应用程序,您可以在其中 select 与用户列表中的用户进行交谈。应用栏上有一个图标按钮,您可以在其中确认要发送消息的用户组。现在,用户可以多次向图标按钮发送垃圾邮件。我想在按下一次后禁用图标按钮。我有一个 bool iconEnabled 变量,但我不确定将它放在 onPressed 中的什么位置。
return Scaffold(
appBar: AppBar(
title: Text("Users"),
actions: <Widget>[
new IconButton(
icon: new Icon(Icons.check),
onPressed: widget.isNew
? () async {
if (newUsers.length == 0) {
return;
}
widget.thread.users.addAll(newUsers);
widget.thread.userIds.addAll(widget.thread.users.map((user) => user.id).toList());
widget.thread.users = widget.thread.users;
// Call New Thread
var threadId = await Client.addThread(widget.thread);
widget.thread.id = threadId;
Navigator.pushReplacement(
context,
MaterialPageRoute(
settings: RouteSettings(name: "MessagePage"),
builder: (context) => MessagePage(
thread: widget.thread,
),
),
);
}
: () {
if (newUsers.length == 0) {
return;
}
widget.thread.users.addAll(newUsers);
widget.thread.userIds.addAll(widget.thread.users.map((user) => user.id).toList());
widget.thread.users = widget.thread.users;
// Call users patch
Client.addUsers(widget.thread);
Navigator.pop(context);
},
),
],
),
像这样用 AbsorbPointer 小部件包裹 IconButton:
AbsorbPointer(
absorbing: buttonDisabled,
child: IconButton(
icon: Icon(Icons.check),
onPressed: () { disableButton();}
),
),
对于这个例子,我声明了一个全局变量:
bool buttonDisabled = false;
按下按钮时:
void disableButton() {
setState(() {
buttonDisabled = true;
});
}
如果您已经完成了何时 enable/disable 按钮的逻辑,那么您已经完成了 99%。
如果onPressed
传null,按钮将被禁用。所以你可以在 IconButton
:
的创建中做一点改变
onPressed: !iconEnabled ? null : (widget.isNew // ... and put the closing parentheses after the onPressed callbacks
我有一个消息传递应用程序,您可以在其中 select 与用户列表中的用户进行交谈。应用栏上有一个图标按钮,您可以在其中确认要发送消息的用户组。现在,用户可以多次向图标按钮发送垃圾邮件。我想在按下一次后禁用图标按钮。我有一个 bool iconEnabled 变量,但我不确定将它放在 onPressed 中的什么位置。
return Scaffold(
appBar: AppBar(
title: Text("Users"),
actions: <Widget>[
new IconButton(
icon: new Icon(Icons.check),
onPressed: widget.isNew
? () async {
if (newUsers.length == 0) {
return;
}
widget.thread.users.addAll(newUsers);
widget.thread.userIds.addAll(widget.thread.users.map((user) => user.id).toList());
widget.thread.users = widget.thread.users;
// Call New Thread
var threadId = await Client.addThread(widget.thread);
widget.thread.id = threadId;
Navigator.pushReplacement(
context,
MaterialPageRoute(
settings: RouteSettings(name: "MessagePage"),
builder: (context) => MessagePage(
thread: widget.thread,
),
),
);
}
: () {
if (newUsers.length == 0) {
return;
}
widget.thread.users.addAll(newUsers);
widget.thread.userIds.addAll(widget.thread.users.map((user) => user.id).toList());
widget.thread.users = widget.thread.users;
// Call users patch
Client.addUsers(widget.thread);
Navigator.pop(context);
},
),
],
),
像这样用 AbsorbPointer 小部件包裹 IconButton:
AbsorbPointer(
absorbing: buttonDisabled,
child: IconButton(
icon: Icon(Icons.check),
onPressed: () { disableButton();}
),
),
对于这个例子,我声明了一个全局变量:
bool buttonDisabled = false;
按下按钮时:
void disableButton() {
setState(() {
buttonDisabled = true;
});
}
如果您已经完成了何时 enable/disable 按钮的逻辑,那么您已经完成了 99%。
如果onPressed
传null,按钮将被禁用。所以你可以在 IconButton
:
onPressed: !iconEnabled ? null : (widget.isNew // ... and put the closing parentheses after the onPressed callbacks