当前位置: 首页 > 知识库问答 >
问题:

如何始终在文本字段中显示提示,而不仅仅是在颤振中单击提示?

庄新翰
2023-03-14

我有一个自定义文本字段,但如图所示,底部文本字段看起来如此模糊和空,我想保持提示显示,即使字段不集中,我如何在颤振中实现这一点?

这里是我的小部件代码:

 Container(
                    margin: EdgeInsets.all(20),
                    child: TextFormField(
                      autofocus: true,
                      textAlign: TextAlign.right,
                      decoration: InputDecoration(
                          enabledBorder: const OutlineInputBorder(
                            borderSide: const BorderSide(color: Color(0xff0E9447), width: 2.0),
                          ),
                          focusedBorder: const OutlineInputBorder(
                            borderSide: const BorderSide(color: Color(0xff0E9447), width: 2.0),
                          ),
                          hintText: AppStrings.email,
                          labelText: AppStrings.email,
                          alignLabelWithHint: true,

                          hintStyle: TextStyle(color: AppColors.primaryColorLight),
                          ),
                    ),
                  ),


共有3个答案

谭思博
2023-03-14

有办法解决这个问题。使用labelText属性并设置floatingLabelBehavior:floatingLabelBehavior。永远不要

这样,您将始终看到提示,当用户单击文本字段时,提示消失。

洪照
2023-03-14

理想情况下,在Flutter中,您不能这样做,因为hintTextlabelText都有两种不同的行为方式。只要用户不关注hintTextlabelText就会显示为hintText。只要用户单击TextField,labelText就会动画显示到特定位置,而hintText在用户键入某些内容之前仍然可见。

因此,同时使用labelTexthintText没有任何意义,因为在设置标签动画时,文本字段将擦除hintText

然而,通过一些额外的努力,您可以使用Stack小部件来解决您的问题。

声明一个类变量(相关类内的变量,任何代码块外的变量)以存储TextEditingController

TextEditingController _controller;

并在类“initState()中初始化,

_controller= TextEditingController();

解决方案代码:

    Container(
                    margin: EdgeInsets.all(20),
                    child: Stack(
                        children : <Widget>[
                          TextFormField(
                            autofocus: true,
                            textAlign: TextAlign.right,
                            decoration: InputDecoration(
                            enabledBorder: const OutlineInputBorder(
                            borderSide: const BorderSide(color: Color(0xff0E9447), width: 2.0),
                          ),
                          focusedBorder: const OutlineInputBorder(
                            borderSide: const BorderSide(color: Color(0xff0E9447), width: 2.0),
                          ),
                          labelText: AppStrings.email,
                          alignLabelWithHint: true,

                          hintStyle: TextStyle(color: AppColors.primaryColorLight),
                          ),
                    ),
                   (_controller.text=="")
            ?
            Text(
              AppStrings.email,
              style: TextStyle(
                color: Colors.grey
           // Style it according to your requirement / To make it look like hintText
         ),
       )
            :
            Container();
               ],
             ),
                  ),



上述代码的基本逻辑:如果文本字段没有任何文本,则显示(提示)textwidget,否则不显示任何内容。

冯宏恺
2023-03-14

如果希望标签在文本字段顶部可见,同时显示提示,只需添加

floatingLabelBehavior: FloatingLabelBehavior.always

到文本字段输入装饰(装饰)。

(在撰写本文时,有一个bug只会在焦点时显示提示和后缀,这已在最近的PR中修复,很快就会发布,请参阅GitHub问题)

完整示例

TextFormField(
      controller: textController,
      style: theme.textTheme.bodyText2,
      keyboardType: keyboardType ?? TextInputType.number,
      enableInteractiveSelection: false,
      decoration: InputDecoration(
          labelText: labelText,
          labelStyle: theme.textTheme.headline6,
          suffixText: suffixText ?? '',
          border: OutlineInputBorder(
            borderSide:
                BorderSide(color: theme.textTheme.bodyText2.color, width: 2),
          ),
          hintText: '0.0',
          floatingLabelBehavior: FloatingLabelBehavior.always),
      validator: (value) {
        if (value.isEmpty) {
          return 'Please enter some text';
        }
        return null;
      },
      onChanged: (String text) => onChange(text),
    );
 类似资料:
  • 我有一个PDF中定义的表单。表单中的一个字段是多行文本字段。 文本字段中的值由使用Apache PDFBox的java程序填充。 问题是当值大约为5到6行时,文本框会自动显示文本。但如果超过6行,则文本框不显示该值。我必须特别点击文本字段来显示文本。如果我再次单击文本框外,文本将消失。

  • 假设我有一个字符串: 现在我需要从两个字符串中解析23。如何从字符串值中提取该数字或任何数字?

  • 问题内容: 在调试使用AJAX的jQuery应用程序时,我经常需要查看服务返回给浏览器的json。因此,我将JSON数据的URL放入地址栏中。 这对ASPNET很好,因为在发生编码错误的情况下,我可以在浏览器中看到ASPNET诊断错误: 但是,当服务器端代码正常工作并实际返回JSON时,IE会提示我下载它,因此看不到响应。 我可以让IE不这样做吗,换句话说,就是像纯文本一样显示它吗? 我知道如果将

  • 问题内容: 我正在使用AngularJS 1.3.0 RC0和angular-messages。最初加载表单时,ng- messages会忠实地显示那些“必填”字段的错误消息。因此,新加载的表单页面充满了错误消息。这不是我想要的。如何使必填字段的ngMessage仅在这些字段不干净或提交表单时才显示? 我已经阅读了官方文档,没有头绪。并尝试在ng-messages div中放入“ ng-show

  • 我对flutter还是新手,我一直试图在条形图中显示http请求中的一些数据。我找不到任何例子。我希望你们中的一些人能帮忙:) 我想使用网上画廊的这张图表。我只是为我的应用程序更改了类的名称: 现在我想把这两者结合起来。 数据是这样的: [{“时间戳”:“2018-06-29 14:39:18”,“RPM”:0,“RPM_Filter”:0,“accel”:0,“temp1”:104,“temp2

  • 这个问题是关于如何在WooCommerce订单中显示产品自定义字段(自定义SKU)的,这是对我前面问题的回答。 如何使产品自定义字段(自定义SKU)仅在每个订单项目的管理订单编辑页面中可见? 此外,它不适用于手动订单。如何在手动订单上显示产品自定义字段(自定义SKU)?