Flutter Messaging App - отключение иконки
У меня есть приложение для обмена сообщениями, где вы можете выбрать из списка пользователей для общения. На панели приложений есть кнопка со значком, с помощью которой вы можете подтвердить группу пользователей, которым вы хотите отправить сообщение. Прямо сейчас пользователь может спамить кнопку со значком несколько раз. Я хочу отключить значок кнопки после ее однократного нажатия. У меня есть переменная 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);
},
),
],
),
2 ответа
Если у вас уже есть логика для того, когда включать / отключать кнопку, то вы на 99%.
Если onPressed
пропущен ноль, кнопка будет отключена. Таким образом, вы можете просто внести небольшие изменения в создание IconButton
:
onPressed: !iconEnabled ? null : (widget.isNew // ... and put the closing parentheses after the onPressed callbacks
Оберните IconButton виджетом AbsorbPointer следующим образом:
AbsorbPointer(
absorbing: buttonDisabled,
child: IconButton(
icon: Icon(Icons.check),
onPressed: () { disableButton();}
),
),
Для этого примера я объявил глобальную переменную:
bool buttonDisabled = false;
Когда кнопка нажата:
void disableButton() {
setState(() {
buttonDisabled = true;
});
}