Flutter(频道稳定,3.13.9,在 Microsoft Windows [版本 10.0.22621.4],区域设置 zh-CN)
华为Mate 30 Pro 5G,鸿蒙操作系统4.0
该页面有两个文本字段,一个用于普通文本,一个用于密码。当光标从普通TextField跳转到密码TextField时,密码TextField将失去焦点,键盘将切换为安全键盘。您需要再次单击密码 TextField 才能获得焦点。
我尝试了以下方法,但还是不行
final _accountFocus = FocusNode();
final _passwordFocus = FocusNode();
Column(
children: [
Listener(
onPointerDown: (e) => FocusScope.of(context).requestFocus(_accountFocus),
child: TextField(
focusNode: _accountFocus
),
),
Listener(
onPointerDown: (e) => FocusScope.of(context).requestFocus(_passwordFocus),
child: TextField(
focusNode: _passwordFocus,
obscureText: true,
),
),
],
)
你在build()方法下定义了这些变量吗?
final _accountFocus = FocusNode();
final _passwordFocus = FocusNode();
您应该在 build() 方法之外定义这些变量,如下所示:
class _MyHomePageState extends State<MyHomePage> {
final _accountFocus = FocusNode();
final _passwordFocus = FocusNode();
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Column(
children: [
Listener(
onPointerDown: (e) =>
FocusScope.of(context).requestFocus(_accountFocus),
child: TextField(focusNode: _accountFocus),
),
Listener(
onPointerDown: (e) =>
FocusScope.of(context).requestFocus(_passwordFocus),
child: TextField(
focusNode: _passwordFocus,
obscureText: true,
),
),
],
),
),
);
}
}