cod*_*ohn 16 focus dart flutter
在Android中,我们可以调用setOnFocusChangeListener(),在onFocusChanged()方法中执行某些操作,但是flutter不会onFocus()像onTap()GestureDetector或onKey()RawKeyboardListener 中那样提供接口.
我已经阅读了关于焦点的flutter api,https://docs.flutter.io/flutter/widgets/FocusManager-class.html 但我无法找到实现我的请求的方法,任何人都可以帮我一臂之力?
Bam*_*oUA 88
此外,您可以使用Focus小部件。
Focus(
child: TextFormField(...),
onFocusChange: (hasFocus) {
if(hasFocus) {
// do stuff
}
},
)
Run Code Online (Sandbox Code Playgroud)
Ste*_*ane 19
这是使用TextField 的FocusNode的简单工作示例.
Widget build(BuildContext context) {
...
var _focusNode = new FocusNode();
var _textField = new TextField(
focusNode: _focusNode
);
_focusNode.addListener(() {
if (!_focusNode.hasFocus) {
// TextField has lost focus
}
});
...
}
Run Code Online (Sandbox Code Playgroud)
Alb*_*221 16
这是完全正确的答案。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();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10372 次 |
| 最近记录: |