扑:用FocusNode文本字段不会获得任何点击之外的文本字段时调用

问题描述 投票:3回答:2

我有一个有状态的Widget包含一个文本框。我想知道,当用户点击文本字段之外。为了做到这一点我使用的是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();
    }

}
flutter flutter-layout
2个回答
1
投票

你需要关注的另一个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)。


3
投票

用GestureDetector包住支架,并设置到的onTap重点另一个节点上

© www.soinside.com 2019 - 2024. All rights reserved.