【问题标题】:How to get a value from the buildTextField(a Extracted Widget) of TextField in flutter如何从 Flutter 中 TextField 的 buildTextField(a Extracted Widget) 中获取值
【发布时间】:2021-09-15 04:09:48
【问题描述】:

我提取了一个小部件并在代码中多次使用它 我在从每个文本字段中获取值时卡住了

我的自定义函数代码是这样的:

  Widget buildTextField(
      IconData icon, String hintText, bool isEmail, dynamic _valueoffield) {
    return Padding(
      padding: const EdgeInsets.only(bottom: 8.0),
      child: TextField(
        obscureText: hintText == "Password" ? _isHidden : false,
        keyboardType: isEmail ? TextInputType.emailAddress : TextInputType.text,
        onSubmitted: (_valueoffield) {},
        decoration: InputDecoration(
            prefixIcon: Icon(
              icon,
              color: Palette.iconColor,
            ),
            enabledBorder: OutlineInputBorder(
              borderSide: BorderSide(color: Palette.textColor1),
              borderRadius: BorderRadius.all(Radius.circular(35.0)),
            ),
            focusedBorder: OutlineInputBorder(
              borderSide: BorderSide(color: Palette.textColor1),
              borderRadius: BorderRadius.all(Radius.circular(35.0)),
            ),
            contentPadding: EdgeInsets.all(10),
            hintText: hintText,
            hintStyle: TextStyle(fontSize: 14, color: Palette.textColor1),
            suffixIcon: hintText == 'Password'
                ? IconButton(
                    onPressed: _toggleVisibility,
                    icon: _isHidden
                        ? Icon(Icons.visibility_off_outlined)
                        : Icon(Icons.visibility_outlined))
                : null),
      ),
    );
  }

【问题讨论】:

    标签: flutter


    【解决方案1】:

    对 TextField 使用控制器总是更好,所以不要像 _valueoffield 那样传递 TextEditingController:

      TextEditingController usernameController = TextEditingController();
      TextEditingController passwordController = TextEditingController();
      ...
      buildTextField(
        ....
        usernameController,
      )
      buildTextField(
        ....
        passwordController,
      )
    

    并得到这样的值

    String username;
    ...
    username = usernameController.text;
    

    所以函数会是

      Widget buildTextField(
          IconData icon, String hintText, bool isEmail, TextEditingController controller) {
        return Padding(
          padding: const EdgeInsets.only(bottom: 8.0),
          child: TextField(
            obscureText: hintText == "Password" ? _isHidden : false,
            keyboardType: isEmail ? TextInputType.emailAddress : TextInputType.text,
            controller: controller,
            decoration: InputDecoration(
                prefixIcon: Icon(
                  icon,
                  color: Palette.iconColor,
                ),
                enabledBorder: OutlineInputBorder(
                  borderSide: BorderSide(color: Palette.textColor1),
                  borderRadius: BorderRadius.all(Radius.circular(35.0)),
                ),
                focusedBorder: OutlineInputBorder(
                  borderSide: BorderSide(color: Palette.textColor1),
                  borderRadius: BorderRadius.all(Radius.circular(35.0)),
                ),
                contentPadding: EdgeInsets.all(10),
                hintText: hintText,
                hintStyle: TextStyle(fontSize: 14, color: Palette.textColor1),
                suffixIcon: hintText == 'Password'
                    ? IconButton(
                        onPressed: _toggleVisibility,
                        icon: _isHidden
                            ? Icon(Icons.visibility_off_outlined)
                            : Icon(Icons.visibility_outlined))
                    : null),
          ),
        );
      }
    
    • 我强烈建议在输入字段中使用 FormTextFormField

    【讨论】:

      猜你喜欢
      • 2021-07-22
      • 1970-01-01
      • 2019-01-18
      • 1970-01-01
      • 2019-08-27
      • 2021-03-08
      • 1970-01-01
      • 1970-01-01
      • 2021-03-10
      相关资源
      最近更新 更多