TextInputAction.next使键盘消失

时间:2020-07-01 12:10:20

标签: flutter dart

我在Flutter应用中使用TextFormField,如以下代码段所示:

@override
Widget build(BuildContext context) {
  return Scaffold(
    body: Column(
      children: <Widget>[
        TextField(
          decoration: InputDecoration(hintText: "TextField A"),
          textInputAction: TextInputAction.next,
          onSubmitted: (_) => FocusScope.of(context).nextFocus(), // move focus to next
        ),
        TextField(
          decoration: InputDecoration(hintText: "TextField B"),
          textInputAction: TextInputAction.next,
          onSubmitted: (_) => FocusScope.of(context).nextFocus(), // move focus to next
        ),
        TextField(
          decoration: InputDecoration(hintText: "TextField C"),
          textInputAction: TextInputAction.done,
          onSubmitted: (_) => FocusScope.of(context).unfocus(), // submit and hide keyboard
        ),
      ],
    ),
  );
}

我的问题是,每当下一个字段位于键盘后面时,键盘就会消失而不是移至下一个焦点...

这是问题的视频:

https://www.youtube.com/watch?v=h-Cv2UpnHrY&feature=youtu.be

如您所见,我想要的行为是将焦点从电子邮件字段移到地址字段,但是键盘消失了,什么也没发生。

我该如何解决?

1 个答案:

答案 0 :(得分:0)

我认为您必须首先创建一个新对象。.我在使用另一个示例来演示:

 final FocusNode _emailFocusNode = FocusNode();
 final FocusNode _passwordFocusNode = FocusNode();

TextField(
        decoration: InputDecoration(
            labelText: 'Email',
            hintText: 'test@test.com',
            errorText: emailErrorText),
        textInputAction: TextInputAction.next,
        keyboardType: TextInputType.emailAddress,
        controller: _emailController,
        focusNode: _emailFocusNode,
        onEditingComplete: _newFocusNode

TextField(
        decoration: InputDecoration(
          labelText: 'Password',
          errorText: passwordErrorText,
        ),
        obscureText: true,
        textInputAction: TextInputAction.done,
        controller: _passwordController,
        focusNode: _passwordFocusNode,
}

 void _newFocusNode() {
 final newFocus=_emailFocusNode?_passwordFocusNode:_emailFocusNode;
FocusScope.of(context).requestFocus(newFocus);
}