flutter - 如何取消具有自定义 FocusNode 的 TextField 的焦点?
问题描述
我知道分散注意力的一般答案是使用这段代码: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();
推荐阅读
- javascript - 如何以 $all 和数组作为参数查询表
- python - 如何动态获取json路径并用路径修改json字段值
- node.js - 图片未从 Axios 上传到文件系统 nodejs
- html - 进行重定向的按钮
- mongodb - 如何在 MongoDB 中替换子字符串
- javascript - 如何使用 chrome 扩展更改 chrome devtools 中的 JavaScript 上下文?
- python - 使用动态变量解析 ElementTree 在 Spyder 中有效,但在 PyCharm 中无效
- sql-server - 回滚事务的奇怪异常
- javascript - 我似乎无法理解这一行代码(JavaScript)的含义
- python-3.x - 枚举python3中所有硬链接的快速方法