Я только начинаю осваивать Flutter, но мне сложно понять, как установить включенное состояние кнопки.
В документации говорится, что нужно установить onPressed
значение null, чтобы отключить кнопку, и присвоить ей значение, чтобы включить ее. Это нормально, если кнопка продолжает оставаться в том же состоянии в течение жизненного цикла.
У меня сложилось впечатление, что мне нужно создать настраиваемый виджет с отслеживанием состояния, который позволит мне каким-то образом обновить состояние включения кнопки (или обратный вызов onPressed).
Итак, мой вопрос: как мне это сделать? Это кажется довольно простым требованием, но в документации я не могу найти ничего о том, как это сделать.
Спасибо.
Ответы:
Я думаю, вы можете захотеть ввести некоторые вспомогательные функции для
build
своей кнопки, а также виджет с отслеживанием состояния вместе с некоторым свойством, которое нужно отключить.isButtonDisabled
)onPressed
значение напрямую дляnull
какой- либо функцииonPressed: () {}
isButtonDisabled
как часть этого условного выражения и верните любуюnull
или некоторую функцию.setState(() => isButtonDisabled = true)
чтобы перевернуть условную переменную.build()
метод с новым состоянием, и кнопка будет отрисована с помощьюnull
обработчика нажатия и будет отключена.Вот еще несколько примеров использования счетчика Flutter.
В этом примере я использую встроенный троичный элемент для условной установки
Text
иonPressed
, но может быть более подходящим для вас извлечь его в функцию (вы также можете использовать этот же метод для изменения текста кнопки):источник
onPressed: _isButtonDisabled ? null : () => _incrementCounter
return () {}
поэтому это сделано намеренно. Я не хочу использовать здесь толстую стрелку, так как хочу, чтобы функция выполнялась, возвращаласьnull
и отключала кнопку.disabled
собственности, команда Flutter? Это просто не интуитивноСогласно документам:
«Если обратный вызов onPressed имеет значение null, кнопка будет отключена и по умолчанию будет напоминать плоскую кнопку в disabledColor».
https://docs.flutter.io/flutter/material/RaisedButton-class.html
Итак, вы можете сделать что-то вроде этого:
источник
disabledElevation
,disabledColor
иDisabledTextColor
не будет работать , как задумано.Простой ответ -
onPressed : null
дает неработающую кнопку.источник
Настройка
и
источник
onPressed
всегда является функцией, поэтому кнопка отображается как «интерактивная», хотя она будет игнорировать событие щелчка, еслиisEnabled
свойство установлено. Чтобы действительно отключить кнопку, используйтеRaisedButton(onPressed: isEnabled ? _handleClick : null
Для определенного и ограниченного числа виджетов их упаковка в виджет IgnorePointer делает именно это: когда его
ignoring
свойство имеет значение true, суб-виджет (фактически, все поддерево) не доступен для нажатия .В противном случае, если вы намереваетесь отключить все поддерево, посмотрите AbsorbPointer ().
источник
Функциональные возможности включения и отключения одинаковы для большинства виджетов.
Например, кнопка, переключатель, флажок и т. Д.
Просто установите
onPressed
свойство, как показано нижеonPressed : null
возвращает отключенный виджетonPressed : (){}
илиonPressed : _functionName
возвращает включенный виджетисточник
Вы также можете использовать AbsorbPointer, и вы можете использовать его следующим образом:
Если вы хотите узнать больше об этом виджете, вы можете проверить следующую ссылку Flutter Docs
источник
На мой взгляд, это самый простой способ:
источник