一尘不染

如何检测何时在Flutter中选择了TextField?

flutter

愚蠢的Flutter新手问题在这里…

我有一个Flutter
TextField,当选择该字段时,它会被软键盘覆盖。显示键盘时,我需要向上滚动该字段并使其不碍事。这是一个非常普遍的问题,在此帖子中提供了一个解决方案。

我想我已经确定了 ScrollController 部分,但是如何检测何时选择了 TextField
?似乎没有任何事件方法(例如onFocus(),onSelected(),onTap()等)。

我尝试将TextField封装在 GestureDetector中, 但这也不起作用-显然事件从未被捕获。

new GestureDetector(
  child: new TextField(
    decoration: const InputDecoration(labelText: 'City'),
  ),
  onTap: () => print('Text Selected'),
),

这是一个基本要求,我知道必须有一个简单的解决方案。

谢谢您的帮助。


阅读 344

收藏
2020-08-13

共1个答案

一尘不染

我想你在找FocusNode

要收听焦点变化,您可以向添加一个列表器,FocusNode并指定focusNodeTextField

例:

class TextFieldFocus extends StatefulWidget {
  @override
  _TextFieldFocusState createState() => new _TextFieldFocusState();
}

class _TextFieldFocusState extends State<TextFieldFocus> {
  FocusNode _focus = new FocusNode();

  TextEditingController _controller = new TextEditingController();

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

  void _onFocusChange(){
    debugPrint("Focus: "+_focus.hasFocus.toString());
  }

  @override
  Widget build(BuildContext context) {
    return new Container(
      color: Colors.white,
      child: new TextField(
        focusNode: _focus,
      ),
    );
  }
}

要点表示如何确保聚焦的节点在ui上可见。

希望能帮助到你!

2020-08-13