Flutter问题记录 - TextField组件多行提示文本显示不全

news2024/11/20 15:28:16

文章目录

  • 前言
  • 开发环境
  • 问题描述
  • 问题分析
  • 解决方案
  • 最后


前言

梳理Flutter项目的过程中发现还有一些遗留的TODO没处理,其中有一个和TextField组件相关。

开发环境

  • Flutter: 3.10.1
  • Dart: 3.0.1

问题描述

TextField组件设置maxLines: null不限制行数,同时设置多行提示文本hintText

TextField(
  maxLines: null,
  decoration: InputDecoration(
    hintText: 'Text that suggests what sort of input the field accepts.' * 5,
    border: InputBorder.none,
  ),
);

提示文本显示不全只显示一行:

screenshot1

问题分析

首先确定是不是因为没有设置hintMaxLines属性的原因导致的问题:

TextField(
  maxLines: null,
  decoration: InputDecoration(
    hintText: 'Text that suggests what sort of input the field accepts.' * 5,
    hintMaxLines: null,
    border: InputBorder.none,
  ),
);

重新运行还是显示不全。找到hintMaxLines的定义:

/// The maximum number of lines the [hintText] can occupy.
///
/// Defaults to the value of [TextField.maxLines] attribute.
///
/// This value is passed along to the [Text.maxLines] attribute
/// of the [Text] widget used to display the hint text. [TextOverflow.ellipsis] is
/// used to handle the overflow when it is limited to single line.
final int? hintMaxLines;

从文档注释看,确实不用设置hintMaxLines属性也可以,默认等于TextField组件的maxLines,相关代码位于_TextFieldState类的_getEffectiveDecoration方法。不过,文档中出现了TextOverflow.ellipsis,这难道和这篇文章Flutter问题记录 - Text组件设置不限行数无效的问题一样?可是这里并没有设置overflow的属性为TextOverflow.ellipsis

继续找到使用hintMaxLines属性的位置,位于_InputDecoratorState类的build方法:


Widget build(BuildContext context) {
  ...
  final String? hintText = decoration.hintText;
  final Widget? hint = hintText == null
      ? null
      : AnimatedOpacity(
          opacity: (isEmpty && !_hasInlineLabel) ? 1.0 : 0.0,
          duration: _kTransitionDuration,
          curve: _kTransitionCurve,
          child: Text(
            hintText,
            style: hintStyle,
            textDirection: decoration.hintTextDirection,
            overflow: hintStyle.overflow ?? TextOverflow.ellipsis,
            textAlign: textAlign,
            maxLines: decoration.hintMaxLines,
          ),
        );
  ...
}

破案了,当没有设置hintStyle.overflow时,会默认设置为TextOverflow.ellipsis,再加上hintMaxLinesnull,这对于Text组件来说,必会截断为一行,具体缘由请看Flutter问题记录 - Text组件设置不限行数无效。

原因找到了,那问题就好解决啦!加上overflow设置,只要不是TextOverflow.ellipsis都可以:

TextField(
  maxLines: null,
  decoration: InputDecoration(
    hintText: 'Text that suggests what sort of input the field accepts.' * 5,
    hintStyle: const TextStyle(overflow: TextOverflow.fade),
    border: InputBorder.none,
  ),
);

重新运行,一切正常🎉!

screenshot2

这个遗留的TODO有点久远了,在我印象中当时好像还有其他问题解决不了。翻了翻Flutter框架的历史提交记录,果然现在的解决方法搁那时候也还是行不通的。那时候overflow是硬编码的,直到去年11月才改成现在这样,详见hintText TextOverflow:

screenshot3

解决方案

TextField组件的提示文本hintText不限制行数时,需要通过hintStyle设置overflow属性,只要不是TextOverflow.ellipsis都可以。

最后

如果这篇文章对你有所帮助,请不要吝啬你的点赞👍加星🌟,谢谢~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/591170.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【文章学习系列之模型】SCALEFORMER

本章内容 文章概况模型结构主要方法多尺度框架跨尺度标准化模型输入编码损失函数 实验结果消融实验跨尺度标准化自适应损失函数 总结 文章概况 《SCALEFORMER: ITERATIVE MULTI-SCALE REFINING TRANSFORMERS FOR TIME SERIES FORECASTING》是2023年发表于ICLR上的一篇论文。作…

硬件工程师-BUCK开关电源设计

一、电感的伏安特性 电感线圈通电之后,会产生磁场,磁场是有一定极性的,而且磁场分布,是一个封闭的回路。在线圈的内部磁力线是比较密集的,磁场的强度是比较强的,外面空气中的的这个磁力线是比较稀疏的&…

【Unity3D】调整屏幕亮度、饱和度、对比度

1 屏幕后处理流程 调整屏幕亮度、饱和度、对比度,需要使用到屏幕后处理技术。因此,本文将先介绍屏幕后处理流程,再介绍调整屏幕亮度、饱和度、对比度的实现。 屏幕后处理即:渲染完所有对象后,得到一张屏幕图像&#xf…

Centos6.5环境Nginx 1.16.1升级到1.24.0版本

一、背景 2023年4月11日,官方发布了Nginx最新稳定版,版本号为 1.24.0。该版本是基于1.23.x(1.23.0 - 1.23.4)开发版的Bug修复,以及一些新特性的加入,而形成的稳定版。安全部门扫描后,发现现场不…

车载ECU休眠唤醒-TJA1145

前言 首先,请教大家几个小小问题,你清楚: 什么是TJA1145吗?你知道休眠唤醒控制基本逻辑是怎么样的吗?TJA1145又是如何控制ECU进行休眠唤醒的呢?使用TJA1145时有哪些注意事项呢? 今天&#xff…

chatgpt赋能python:Python中如何输入中文——从安装到常见问题解决

Python中如何输入中文——从安装到常见问题解决 Python是一门广泛使用的编程语言,其优秀的开源性、易用性、灵活性以及庞大的生态圈也令越来越多的人选择Python。但是对于初学者来说,如何正确输入中文常常成为一个问题。本篇文章从安装、常见问题解决、…

LeetCode 560 和为 K 的子数组

LeetCode 560 和为 K 的子数组 来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/subarray-sum-equals-k/description 博主Github:https://github.com/GDUT-Rp/LeetCode 题目: 给你一个整数数组 …

ChatGPT的4个不为人知却非常实用的小功能

今天重点介绍四个ChatGPT很实用的小功能。 一、停止生成 如果在ChatGPT输出内容的过程中,我们发现结果不是自己想要的,可以直接点击“Stop generating”按钮,这样它就会立即停止输出。 二、复制功能 在ChatGPT返回对话的右侧,有三…

在vue中集成高德地图amap-jsapi-loader

前往高德地图开发平台高德开放平台 | 高德地图API 一:申请高德key 去高德官网去创建一个属于自己的地图应用 (得到key和秘钥) 。 首先,我们要注册一个开发者账号,根据实际情况填写,身份写个人:…

制作嵌入式busybox rootfs系统

1、busybox下载 BusyBox 此篇使用版本BusyBox 1.31.1 (stable) 2、设置交叉编译环境变量 source environment-setup-aarch64-poky-linux或者其他架构的编译链工具 3、busybox编译设置 cd busybox-1.31.1 修改根目录Makefile中的CROSS_COMPILE和ARCH参数 比如ARCH ? ar…

Flask-RESTful的使用

Flask-RESTful的使用 Flask-RESTful基本使用安装定义资源Resources创建API实例添加资源到API运行Flask应用 请求处理请求解析参数校验 响应处理数据序列化定制返回格式 其他功能蓝图装饰器集合路由命名规范路由名称 Flask-RESTful Flask-RESTful是一个用于构建RESTful API的扩展…

中台分类

大家好,我是易安,之前我们谈到过中台的概念,以及如何落地中台。今天我就带你一起看一看,行业常见的中台分类。 业务中台与数据中台 业务中台 业务这个词,其实是有些宽泛的,我听到很多人口中说的业务都不是…

RK3588平台开发系列讲解(驱动基础篇)设备树常用 of 函数

平台内核版本安卓版本RK3588Linux 5.10Android 12文章目录 一、查找节点的 of 函数二、获取属性值的 of 函数三、实验示例3.1、查找的节点代码3.2、获取属性内容代码沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 设备树描述了设备的详细信息,这些信息包括数字类型的…

Web安全神器-Burpsuite社区版/专业版下载、安装及使用教程

一、Burpsuite下载 Burp Suite是进行Web应用安全测试的一个集成平台,无缝融合各种安全工具并提供全面的接口适配,支持完整的Web应用测试流程,从最初的映射和应用程序的攻击面分析到发现和利用安全漏洞等领域均适用,同时还可以做抓…

TYAN 于Computex2023 展示支持第四代英特尔至强可扩展处理器的新款服务器

【台北讯2023年5月30日】隶属神达集团,神雲科技旗下服务器通路领导品牌TYAN(泰安),于2023 台北国际计算机展(Computex 2023)5月30日至6月2日展览期间,在台北世贸南港展览1馆4楼 M0701a摊位展示最…

pyest+appium实现APP自动化测试

目录 01、appium环境搭建 2、搭建pythonpytestappium环境 3、安装pycharm搭建项目编写脚本 4、执行测试 绵薄之力 01、appium环境搭建 安装nodejs http://nodejs.cn/ 为什么要安装nodejs? 因为appium这个工具的服务端是由nodejs语言开发的 安装jdk&#x…

设计模式之~工厂系列

目录 简单工厂模式 工厂方法模式 简单工厂 VS 工厂方法 抽象工厂模式: 拓展: 利用简单工厂模式优化抽象工厂 利用反射抽象工厂 进行优化 反射配置文件抽象工厂进行优化 简单工厂模式 优点:简单工厂模式的最大优点在于工厂类包含…

基于深度学习的高精度家禽猪检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要:基于深度学习的高精度家禽猪检测识别系统可用于日常生活中或野外来检测与定位家禽猪目标,利用深度学习算法可实现图片、视频、摄像头等方式的家禽猪目标检测识别,另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5目标检…

函数(C语言程序设计)

目录 一、函数定义 二、函数调用 三、递归函数 四、局部变量和全局变量 一、函数定义 1、无参函数的定义 类型名 函数名() /*函数首部*/ { 函数体 } 或 类型名 函数名(void) /*函数首部*/ { 函数体 } void类型的函数不…

玻璃制品行业丨外贸业务管理难点及解决方案

玻璃作为一种重要的建筑材料,在国际贸易中一直占有一定的份额。随着国外市场需求量的不断增加,对玻璃制品的技术含量要求越来越高,需要在研发方面的投入也逐步加大。由于国际市场竞争激烈,想要做玻璃制品行业的外贸公司&#xff0…