普通TextField切换为密码TextField后,密码TextField会失去焦点

问题描述 投票:0回答:1

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,
          ),
       ),
    ],
)
flutter textfield harmonyos
1个回答
0
投票

你在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,
              ),
            ),
          ],
        ),
      ),
    );
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.