我有一个表单页面,并且有几个 TextFields,我想在单击一个特定文本字段之外调用一个函数。是否有任何 TextField 参数可以满足我的目的或以任何方式做到这一点?
问问题
41 次
2 回答
1
TextFormField 有 focusNode 属性,focusNode 有 addListener 回调。当 TextFormField 具有焦点和 textformfield 失去焦点时调用它,在 focusnode 的帮助下,我们可以在单击特定文本字段外部时调用方法。
class _MyWidgetState extends State<MyWidget> {
FocusNode firstFocusNode = FocusNode();
FocusNode secondFocusNode = FocusNode();
@override
void initState() {
super.initState();
firstFocusNode.addListener(() {
if (!firstFocusNode.hasFocus) {
method();
}
});
}
void method() {
print("User clicked outside the Text Form Field");
}
@override
void dispose()
{
firstFocusNode.removeListener((){});
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Column(children: [
TextFormField(focusNode: firstFocusNode),
TextFormField(
focusNode: secondFocusNode,
)
]));
}
}
于 2022-01-16T14:18:54.650 回答
1
您正在寻找的解决方案是gestureDetector,但如果您只想在表单区域内但在文本字段外点击时调用该函数,则它取决于您要调用该函数的位置,然后用手势检测器包装表单并使用onTap:() {},或者如果您想在整个屏幕上点击但在文本字段之外调用相同的内容,请将其包裹在整个脚手架上。
new Scaffold(
body: new GestureDetector(
onTap: () {
FocusScope.of(context).requestFocus(new FocusNode());
//this function will remove the keyboard.
},
于 2022-01-16T07:53:55.197 回答