flutter - 只关注 TextField 中的 IconButton
问题描述
我有一个TextFormField
for 密码输入,带有一个IconButton
which toggles obscureText
。我想让它在单击按钮时,文本字段不会成为焦点。然而,事实并非如此。我想这与FocusNode
.
ValueListenableBuilder<bool>(
valueListenable: _obscureText,
builder: (context, obscureText, child) => TextFormField(
obscureText: obscureText,
decoration: InputDecoration(
suffixIcon: IconButton(
icon: Icon(obscureText ? Icons.visibility_off : Icons.visibility),
onPressed: () => _obscureText.value = !obscureText,
),
),
),
),
有谁知道解决方案?
解决方案
所有你需要的是
FocusNode.unfocus()
setState
在你的onPressed()
方法中调用它。
输出:
完整解决方案:
bool obscureText = false;
FocusNode _focusNode = FocusNode();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(),
body: Padding(
padding: const EdgeInsets.all(24.0),
child: Column(
children: <Widget>[
TextFormField(
focusNode: _focusNode,
obscureText: obscureText,
decoration: InputDecoration(
suffixIcon: IconButton(
icon: Icon(obscureText ? Icons.visibility_off : Icons.visibility),
onPressed: () {
setState(() => obscureText = !obscureText);
Timer.run(() => _focusNode.unfocus());
},
),
),
),
TextField(),
],
),
),
);
}
推荐阅读
- c++ - 在循环c ++中得到奇怪的结果
- javascript - JS:更改 ScrollTop 以显示浏览器宽度
- mysql - Telnet 到 mysql 被拒绝
- dialogflow-es - 用于条件块和响应的 DialogFlow CX 语法
- gradle - 如何设置我的 build.gradle 存储库以从我们的内部 Nexus 存储库中提取这些?
- xml - 判断XML标签是否包含元素的条件语句?(XSLT)
- airflow - 在 Mac 上运行气流调度程序时出现 sqllite 错误
- javascript - React Router v5 - 嵌套路由中的全局不匹配
- reactjs - 将“调整大小”事件监听器从类转换为功能组件?
- ios - 更改 UISearchBar 中 clearbutton 的宽度和高度以修复 IOS 中的可访问性问题