如何在颤动时听取焦点变化?

时间:2017-12-25 01:48:39

标签: dart focus flutter television

在Android中,我们可以调用setOnFocusChangeListener(),在onFocusChanged()方法中执行某些操作,但是flutter不会在GestureDetector中提供onFocus()接口onTap()onKey()在RawKeyboardListener中。

我已阅读关于焦点的颤动api,https://docs.flutter.io/flutter/widgets/FocusManager-class.html 但我无法找到实现我的要求的方法,任何可以帮助我的人?​​

4 个答案:

答案 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}}