【问题标题】:How AutoFocus Textfield in flutterFlutter中的AutoFocus Textfield如何
【发布时间】:2019-11-17 05:22:38
【问题描述】:

我在开发应用程序时遇到问题 - 如何在完成前一个字段的输入后自动聚焦文本字段,而无需单击文本字段?

【问题讨论】:

    标签: flutter flutter-layout


    【解决方案1】:

    使用 focusNode 属性和 onEditingComplete 事件。用户单击第一个文本字段上的输入后触发事件,然后 focusNode 请求第二个文本字段的焦点。

    例如:

      FocusNode focusNode = FocusNode();
    
      @override
      Widget build(BuildContext context) => Scaffold(
          body: Column(
            children: <Widget>[
              TextField(
                autofocus: true,
                onEditingComplete: (() => focusNode.requestFocus())
              ),
              TextField(
                focusNode: focusNode,
              )
            ]
          )
        );
    

    更多信息请访问:https://flutter.dev/docs/cookbook/forms/focus

    【讨论】:

    • 感谢您的回复,但我尝试 requestFocus() 错误?
    • 不知道你有什么问题。如果您复制粘贴出现的错误会很有帮助。无论如何,我编辑了我的答案,所以应该更清楚该怎么做。
    【解决方案2】:
    TextField(
      onEditingComplete: () => FocusScope.of(context).nextFocus(),
    ),
    

    对于最后一个文本字段,您可以将 'nextFocus()' 更改为 'unfocus()'

    【讨论】:

      【解决方案3】:
      return Focus(
        child: TextField(
          onChanged: (value) => context.read<SignupBloc>().add(SignupPasswordChanged(value)),
          controller: controller,
          keyboardType: TextInputType.visiblePassword,
          obscureText: true,
          key: const Key('signupForm_passwordInput_textField'),
          decoration: InputDecoration(
            labelText: 'Password *',
            errorText: state.password.invalid
                ? 'Passwords must be at least 10 characters in length\nand a minimum of 1 '
                'upper case and 1 lower case letter [A-Za-z]'
                : null,
          ),
        ),
      );
      

      【讨论】:

        猜你喜欢
        • 2020-10-27
        • 2019-07-02
        • 1970-01-01
        • 2019-01-18
        • 2021-04-27
        • 2019-06-20
        • 2020-06-12
        • 2018-10-05
        • 2021-05-19
        相关资源
        最近更新 更多