繁体   English   中英

如何从颤振中的TextField的buildTextField(一个提取的小部件)中获取值

[英]How to get a value from the buildTextField(a Extracted Widget) of TextField in flutter

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

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

  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),
      ),
    );
  }

为 TextFields 使用控制器总是更好,所以不要像这样传递_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作为输入字段

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM