Flutter:文本表单字段的问题

Posted

技术标签:

【中文标题】Flutter:文本表单字段的问题【英文标题】:Flutter : Problems with textformfield 【发布时间】:2020-10-09 10:00:06 【问题描述】:

我的应用中有一个 textformfield,如下所示:

TextFormField(
           //maxLength: 02,
           textAlign: TextAlign.center,
           keyboardType: TextInputType.numberWithOptions(decimal: true),
           decoration: InputDecoration(
              labelText: textFieldInitVal.toString(),
              contentPadding: const EdgeInsets.all(0),
              border: OutlineInputBorder(
                  borderSide: BorderSide(
                  color: Colors.black54,
                  ),
                ),
                focusedBorder: OutlineInputBorder(
                   borderSide: BorderSide(
                     color: Colors.blue,
                     ),
                   ),
                ),
              //initialValue: textFieldInitVal.toString(),
              onChanged: (val) 
               if (int.parse(val) > 24) 
                  setState(() 
                    errorTxt = 'ERROR: Value cannot be more than 24 Hrs';
                  );
                else 
                  setState(() errorTxt = '';);
                  setState(() value1 = int.parse(val).toDouble(););
                  //setState(() value1 = double.parse(val););
               
             
         ),

在上面的 sn-p 中,textFieldInitValvalue1 都是 double 类型。

我面临两个不同的问题:

    即使我使用textAlign: TextAlign.center,我也无法将labelText: textFieldInitVal.toString() 居中。标签贴在 TextFormField 的左边缘。添加一些padding 会有所帮助,但它也会影响输入文本的放置方式,因此我试图避免它。

    1234563整数。

它们看起来像非常小的问题,但我无法找到摆脱这种情况的方法。我做错了什么?

【问题讨论】:

【参考方案1】:

即使我使用 textAlign:TextAlign.center,我也无法将 labelText:textFieldInitVal.toString() 居中。标签贴在 TextFormField 的左边缘。添加一些填充会有所帮助,但它也会影响输入文本的放置方式,因此我试图避免它。

textAlign 属性将在字段中间对齐您在字段内写入的文本,但标签将保持在左侧。


在 onChanged: (val) 片段中,当我执行 print(val) 时,我注意到 TextFormField 无法获取小数点后的任何内容,因此在从字符串转换为 val 的 double 时,我只会得到完整数字。

关于这个问题,转换时需要使用double类而不是int类来获取小数。

              onChanged: (val) 
               if (double.parse(val) > 24) 
                  setState(() 
                    errorTxt = 'ERROR: Value cannot be more than 24 Hrs';
                  );
                else 
                 print(double.parse(val).toDouble());
                  setState(() errorTxt = '';);
                  setState(() value1 = int.parse(val).toDouble(););
               
             

【讨论】:

我会接受这个,因为这与我解决问题的方式非常接近,但有一点需要注意:

以上是关于Flutter:文本表单字段的问题的主要内容,如果未能解决你的问题,请参考以下文章

Flutter - 文本字段标签溢出切断文本

使用 Flutter 将表单上传到 Firestore

Flutter BLoC 库中带有验证的文本字段

Flutter 焦点管理 FocusScope 组件

Flutter 制作漂亮的登录表单

Flutter TextFormField 控件