Ответ 1
Я полагаю, вы ищете класс FocusNode. Используйте метод addListener
для добавления функции слушателя, которая прослушивает изменение фокуса.
В Android мы можем вызвать setOnFocusChangeListener()
, сделать что-нибудь в onFocusChanged()
, но flutter не предоставляет интерфейс onFocus()
такой как onTap()
в GestureDetector или onKey()
в RawKeyboardListener.
Я прочитал API флаттера о фокусе, https://docs.flutter.io/flutter/widgets/FocusManager-class.html, но я не могу найти способ выполнить мою просьбу, кто-нибудь, кто может мне помочь?
Я полагаю, вы ищете класс FocusNode. Используйте метод addListener
для добавления функции слушателя, которая прослушивает изменение фокуса.
Вот простой рабочий пример FocusNode с использованием TextField.
Widget build(BuildContext context) {
...
var _focusNode = new FocusNode();
var _textField = new TextField(
focusNode: _focusNode
);
_focusNode.addListener(() {
if (!_focusNode.hasFocus) {
// TextField has lost focus
}
});
...
}
Здесь полностью правильный ответ. addListener
в initState()
, а не build()
, потому что это может вызвать многократные вызовы слушателя.
class _SomeWidgetState extends State<SomeWidget> {
final FocusNode _focusNode = FocusNode();
@override
void initState() {
super.initState();
_focusNode.addListener(() {
print("Has focus: ${_focusNode.hasFocus}");
});
}
@override
Widget build(BuildContext context) {
return TextField(focusNode: _focusNode);
}
@override
void dispose() {
_focusNode.dispose();
super.dispose();
}
}