愚蠢的Flutter新手问题在这里…
我有一个Flutter TextField,当选择该字段时,它会被软键盘覆盖。显示键盘时,我需要向上滚动该字段并使其不碍事。这是一个非常普遍的问题,在此帖子中提供了一个解决方案。
我想我已经确定了 ScrollController 部分,但是如何检测何时选择了 TextField ?似乎没有任何事件方法(例如onFocus(),onSelected(),onTap()等)。
我尝试将TextField封装在 GestureDetector中, 但这也不起作用-显然事件从未被捕获。
new GestureDetector( child: new TextField( decoration: const InputDecoration(labelText: 'City'), ), onTap: () => print('Text Selected'), ),
这是一个基本要求,我知道必须有一个简单的解决方案。
谢谢您的帮助。
我想你在找FocusNode。
FocusNode
要收听焦点变化,您可以向添加一个列表器,FocusNode并指定focusNode到TextField。
focusNode
TextField
例:
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上可见。
希望能帮助到你!