在Android中,我们可以调用setOnFocusChangeListener()
,在onFocusChanged()
方法中执行某些操作,但是flutter不会在GestureDetector中提供onFocus()
接口onTap()
或onKey()
在RawKeyboardListener中。
我已阅读关于焦点的颤动api,https://docs.flutter.io/flutter/widgets/FocusManager-class.html 但我无法找到实现我的要求的方法,任何可以帮助我的人?
答案 0 :(得分:45)
此外,您可以使用Focus小部件。
Focus(
child: TextFormField(...),
onFocusChange: (hasFocus) {
if(hasFocus) {
// do stuff
}
},
)
答案 1 :(得分:15)
以下是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
}
});
...
}
答案 2 :(得分:6)
我想你正在寻找FocusNode课程。使用addListener
方法添加侦听焦点更改的侦听器函数。
答案 3 :(得分:3)
这是完全正确的答案。 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();
}
}
,因为这会导致多次调用监听器。
{{1}}