我知道不专心的一般答案是使用以下代码:FocusScope.of(context).requestFocus(new FocusNode());
但是,当TextField具有自定义focusNode时,此代码似乎无效。SystemChannels.textInput.invokeMethod('TextInput.hide');
仍然可以使用,但是只能移除键盘-字段本身仍处于选中状态。
代码(删除了不相关的部分):
class RegisterScreen extends StatelessWidget {
final phoneNumberTEC = TextEditingController();
final passwordTEC = TextEditingController();
final passwordFocusNode = FocusNode();
@override
Widget build(BuildContext context) {
return this.keyboardDismisser(
context: context,
child: Scaffold(
appBar: new AppBar(
title: new Text("Register"),
),
body: this.page(context),
resizeToAvoidBottomPadding: false,
),
);
}
Widget keyboardDismisser({BuildContext context, Widget child}) {
final gesture = GestureDetector(
onTap: () {
this.passwordFocusNode.unfocus();
FocusScope.of(context).requestFocus(new FocusNode());
SystemChannels.textInput.invokeMethod('TextInput.hide');
},
child: child,
);
return gesture;
}
Widget page(BuildContext context) {
return Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Container(
padding: new EdgeInsets.all(16.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
this.phoneNumberTextField(context),
this.passwordTextField(context),
]
),
),
// cutting irrelevant widgets out
)
]
);
}
Widget phoneNumberTextField(BuildContext context) {
return TextField(
controller: this.phoneNumberTEC,
decoration: InputDecoration(hintText: "Phone number"),
onSubmitted: (string) {
FocusScope.of(context).requestFocus(this.passwordFocusNode);
},
);
}
Widget passwordTextField(BuildContext context) {
return TextField(
controller: this.passwordTEC,
decoration: InputDecoration(hintText: "Password"),
obscureText: true,
focusNode: this.passwordFocusNode,
onSubmitted: (string) {
this.performRegister(context);
},
);
}
}
最佳答案
这是与@kasiara的答案类似的答案,但是是另一种方式。
FocusScope.of(context).unfocus();
_textEditingController.clear();
关于flutter - 如何使具有自定义FocusNode的TextField失去焦点?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53481261/