单击特定 TextField Flutter 外部后调用函数
Calling Function after clicking outside a specific TextField Flutter
我有一个表单页面,有几个文本字段,我想在一个特定文本字段外单击后调用一个函数。是否有任何 TextField 参数可以满足我的目的或任何方法?
您正在寻找的解决方案是 gestureDetector,但如果您只想在表单区域内但在文本字段外点击时调用该函数,然后用手势检测器包裹表单,则这取决于您要调用该函数的位置使用 onTap: (){},或者如果你想在整个屏幕上调用相同的点击但在文本字段之外将它包裹在整个脚手架上。
new Scaffold(
body: new GestureDetector(
onTap: () {
FocusScope.of(context).requestFocus(new FocusNode());
//this function will remove the keyboard.
},
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,
)
]));
}
}
我有一个表单页面,有几个文本字段,我想在一个特定文本字段外单击后调用一个函数。是否有任何 TextField 参数可以满足我的目的或任何方法?
您正在寻找的解决方案是 gestureDetector,但如果您只想在表单区域内但在文本字段外点击时调用该函数,然后用手势检测器包裹表单,则这取决于您要调用该函数的位置使用 onTap: (){},或者如果你想在整个屏幕上调用相同的点击但在文本字段之外将它包裹在整个脚手架上。
new Scaffold(
body: new GestureDetector(
onTap: () {
FocusScope.of(context).requestFocus(new FocusNode());
//this function will remove the keyboard.
},
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,
)
]));
}
}