在Flutter中将焦点从一个文本字段更改为下一个文本字段

Cal*_*her 13 android ios dart flutter

我有两个textFormField小部件.一旦用户竞争了第一个textField,我想关注下一个textField.Flutter有办法做到这一点吗?目前,完成按钮只是关闭键盘.我猜测focusNode类可能是这个的答案,但不确定如何工作有没有人有任何好的focusNode类的例子?提前致谢.

Ash*_*mas 28

是的,FocusNodeonFieldSubmittedTextFormField可能是要走的路.

FocusScope.of(上下文).requestFocus(focusNode);

这是一个可能有用的示例:

    FocusNode textSecondFocusNode = new FocusNode();

    TextFormField textFirst = new TextFormField(
      onFieldSubmitted: (String value) {
        FocusScope.of(context).requestFocus(textSecondFocusNode);
      },
    );

    TextFormField textSecond = new TextFormField(
      focusNode: textSecondFocusNode,
    );

    // render textFirst and textSecond where you want
Run Code Online (Sandbox Code Playgroud)

您可能还希望FocusScope.of()从按钮而不是onFieldSubmitted 触发,但希望上面的示例为您提供足够的上下文来为您的用例构建适当的解决方案.


Cop*_*oad 24

截屏:

在此处输入图片说明


无需使用 FocusNode

@override
Widget build(BuildContext context) {
  return Scaffold(
    appBar: AppBar(),
    body: Column(
      children: [
        TextField(
          decoration: InputDecoration(hintText: 'First Name'),
          textInputAction: TextInputAction.next,
          onEditingComplete: () => FocusScope.of(context).nextFocus(),
        ),
        TextField(
          decoration: InputDecoration(hintText: 'Last Name'),
          textInputAction: TextInputAction.done,
          onSubmitted: (_) => FocusScope.of(context).unfocus(),
        ),
      ],
    ),
  );
}
Run Code Online (Sandbox Code Playgroud)


Hos*_*our 8

我就是这样做的:

  var _focusNodes = List.generate(6, (index) => FocusNode()));
Run Code Online (Sandbox Code Playgroud)

在 TextFormField 中:

  TextFormField(
    focusNode: _focusNodes[i],
    maxLines: 1,
    textInputAction: TextInputAction.next,
    onChanged: (text) {
      if (i < _controllers.length) {
        if (text.isEmpty)
          _focusNodes[i - 1].requestFocus();
        else
          _focusNodes[i + 1].requestFocus();
      }
    },
  ),
Run Code Online (Sandbox Code Playgroud)


Man*_*ath 6

有一个类似的方法,就像在 Android 中一样。

添加

textInputAction
Run Code Online (Sandbox Code Playgroud)

参数到 TextFormField 小部件,然后将属性添加为;

 TextInputAction.next
Run Code Online (Sandbox Code Playgroud)

  • 这不是只改变弹出键盘吗? (4认同)
  • 这实际上有效,但仅当文本字段没有带有 onPressed 设置的后缀小部件时 (2认同)