Flutter:如何将焦点转移到下一个 TextFormField?

问题描述

我是 Flutter 的新手,希望在当前 TextFormField 达到其 maxLength 时从一个 TextFormField 移动到另一个,而无需按 Enter。这意味着我可以在小时 TextFormField 上输入 2 位数字,焦点 TextFormField 将移动到分钟 TextFormField 等。

我尝试过使用 nextFocus(),但是这仅在按 Enter 时有效。

小时输入小部件示例:

=DLookUp([fld_linear_foot],[tbl_model_number],[fld_model_number_official]=[Forms]![frm_estimator]![cbx_model_number])

解决方法

给你所有的TextFormField一个FocusNode和一个TextEditingController

  TextEditingController fooController = TextEditingController();
  TextEditingController bahController = TextEditingController();

  FocusNode fooFocusNode;
  FocusNode bahFocusNode;

 @override
  void initState() {
    super.initState();

    fooFocusNode = FocusNode();
    bahFocusNode = FocusNode();
  }

@override
  void dispose() {

    fooFocusNode.dispose();
    bagFocusNode.dispose();
    fooController.dispose();
    bahController.dispose();
    super.dispose();
  }

ControllerFocusNode 分配给您的 TextFormField

在您的 TextFormField 中监听 onChanged 这将返回您的控制器拥有的当前值。 从这里您可以做一个简单的检查,看看您的参数是否满足。

onChanged: (value) {

  if (value.length >= 2) {
    fooFocusNode.unfocus();
    FocusScope.of(context).requestFocus(bahFocusNode);
  }
},
,
final node = FocusScope.of(context);

在build方法下初始化这个变量

onChanged: (value) {
                   if (value.length == 2) node.nextFocus();
                     },

将此 onChanged 方法添加到您的 TextFormField, 如果 textfield 中的文本长度等于 2,它会自动移动焦点。