Phi*_*aro 5 textfield dart flutter
在 a 中TextFormField,您可以使用 来请求焦点FocusScope.of(context).requestFocus(_focusNode)。然而,如何确保同一个焦点节点一直处于未聚焦状态呢?
例如,在我的工作流程中,我希望hintText最初为 X,聚焦时为 Y,未聚焦时返回 X。但是,如果我使用如下所示的常用内容,我将无法返回到 X。
class TextFormFieldErrorOnLabel extends StatefulWidget {
final String hintText;
final String hintTextOnFocus;
const NewTextFormField({
this.hintText,
this.hintTextOnFocus,
}) : super(key: key);
@override
_NewTextFormFieldState createState() => _NewTextFormFieldState();
}
class _NewTextFormFieldState {
final FocusNode _focusNode = FocusNode();
void _requestFocus() {
setState(() {
FocusScope.of(context).requestFocus(_focusNode);
});
}
@override
Widget build(BuildContext context) {
return TextFormField(
onTap: _requestFocus,
focusNode: _focusNode,
decoration: InputDecoration(
hintText: _focusNode.hasFocus ? widget.hintTextOnFocus : widget.hintText,
)
);
}
}
Run Code Online (Sandbox Code Playgroud)
requestUnfocus某处有“”方法吗?如果是这样,我将如何从 调用它TextFormField?
小智 5
如果您想在点击GestureDetector小部件树顶部的不可点击小部件时取消焦点,请在onTap处理程序上使用 获取当前 FocusNode FocusScope.of(context),然后检查当前 FocusNode 是否有hasPrimaryFocus,如果没有,我们unfocus()调用当前节点以移除焦点。如果您尝试unfocus()当前具有主要焦点的节点,Flutter 将抛出异常。代码将如下所示:
GestureDetector(
onTap: () {
FocusScopeNode currentFocus = FocusScope.of(context);
if (!currentFocus.hasPrimaryFocus) {
currentFocus.unfocus();
}
},
child:...
),
Run Code Online (Sandbox Code Playgroud)
归功于这个家伙。
小智 2
我不知道这是否是最佳实践,但我所做的是打电话
FocusScope.of(context).requestFocus(null);
Run Code Online (Sandbox Code Playgroud)
以确保没有选择任何节点。