我有一个用来输入密码的TextFormField,它有一个切换obscureText的IconButton。我想让它在按钮被单击时,文本字段不会成为焦点。然而,事实并非如此。我想这和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,
),
),
),
),有没有人知道解决方案?
发布于 2019-08-12 17:47:45
你所需要的是
FocusNode.unfocus()在onPressed()方法中的setState之后调用它。
输出:

完整的解决方案:
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(),
],
),
),
);
}https://stackoverflow.com/questions/57458243
复制相似问题