Flutter:在 TextField 之外单击时,不会调用带有 FocusNode 的 TextField

Mis*_*tyD 5 flutter flutter-layout

我有一个包含文本字段的 Statefull 小部件。我想知道用户何时在文本字段外单击。为了做到这一点,我使用了一个 FocusNode。现在的问题是当用户在 texfield 之外单击时,我的回调不会被调用。这是我的代码

class TestText extends State<SingleFieldEdit> 
{
    TextEditingController _qTextEditController = new TextEditingController();
    FocusNode _focus;

    TestText();

    @override
    void initState() {
        super.initState();
        _focus = new FocusNode();
        _focus.addListener(_onFocusChange);
    }

    @override
    void dispose() {
        super.dispose();
        _focus.dispose();
    }

    void _onFocusChange(){
        print("Focus changed - Does not get called when clicked outside of textbox");
        if(_focus.hasFocus==false){
            setState(() {
                _enableEdit=false;
                _qTextEditController.text = _existingText;
            });

        }
    }


    Widget getEditableField()
    {
        Widget containerBorder =  new Container(
                margin: const EdgeInsets.all(0.0),
                padding: const EdgeInsets.only(top:0.0,bottom:0.0),
                decoration: new BoxDecoration(
                    border: new Border(top:BorderSide(width: 0.4),bottom: BorderSide(width: 0.4) ),
                    ),
                child: new Row(
                    mainAxisAlignment: MainAxisAlignment.spaceBetween,
                    crossAxisAlignment: CrossAxisAlignment.center,
                    children: <Widget>[
                 new Flexible(child:TextField(
                        focusNode: _focus,
                        controller: _qTextEditController,
                        decoration: InputDecoration.collapsed(hintText: 'Your hint goes here',enabled: _enableEdit),//InputDecoration(hintText: 'Your hint goes here', /*labelText: "Your Label goes here",*/ enabled: _enableEdit),
                        )),
                    getIcon(),
                    ],)
                );

        return getEditableField
    }

    @override
    Widget build(BuildContext context)
    {
        return getEditableField();
    }

}
Run Code Online (Sandbox Code Playgroud)

Gün*_*uer 2

您需要关注另一个FocusNode
或调用unfocus焦点FocusNodehttps://github.com/flutter/flutter/issues/19552#issuecomment-410909751

请关注并投票https://github.com/flutter/flutter/issues/20227以获得更简单的解决方案(也许也可以https://github.com/flutter/flutter/issues/7247)。