gpt4 book ai didi

flutter - 如何在 Flutter 中的文本(表单)字段中从 `FocusNode` 移除焦点

转载 作者:行者123 更新时间:2023-12-03 03:35:48 32 4
gpt4 key购买 nike

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,
)
);
}
}

某处有“ requestUnfocus”方法吗?如果是这样,我将如何从 TextFormField 调用它?

最佳答案

如果您想在点击不可点击的小部件时取消焦点
地点 GestureDetector在小部件树的顶部,onTap handler 用 FocusScope.of(context) 获取当前的 FocusNode , 之后检查当前 FocusNode 是否有 hasPrimaryFocus , 如果没有,我们调用 unfocus()在当前节点上移除焦点。如果您尝试 unfocus()当前具有主要焦点的节点,Flutter 将抛出异常。
代码将如下所示:

 GestureDetector(

onTap: () {
FocusScopeNode currentFocus = FocusScope.of(context);

if (!currentFocus.hasPrimaryFocus) {
currentFocus.unfocus();
}
},
child:...
),
归功于 this guy.

关于flutter - 如何在 Flutter 中的文本(表单)字段中从 `FocusNode` 移除焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61236993/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com