深度理解Flutter开发之Text组件

539 阅读6分钟

屏幕截图 2025-02-20 171830.png


前言

Text 组件是 Flutter 中用于显示文本的基本组件,提供了丰富的样式和布局选项。通过合理使用其属性,可以轻松实现各种文本显示效果。


一、基础用法

    //直接显示
    const Text("这里是文本内容")
    
    //变量传入,注意考虑非空
    Text(text ?? "")
  • 可以直接字符串或者变量传入
  • 文本内容必须非空
  • 静态文本用const修饰

二、Text常用属性

属性名类型说明
dataString必须属性,指定要显示的文本内容。
styleTextStyle?定义文本的样式,包括字体大小、颜色、字体粗细等。
textAlignTextAlign?设置文本的对齐方式,如TextAlign.leftTextAlign.center等。
overflowTextOverflow?设置文本溢出时的处理方式,如TextOverflow.ellipsis(显示省略号)。
maxLinesint?设置文本的最大行数,超出部分根据overflow属性处理。
softWrapbool是否自动换行,默认为true
textScaleFactordouble文本缩放因子,用于调整文本大小。
localeLocale?指定文本的语言环境,用于字体选择和文本方向等。
textDirectionTextDirection?设置文本的书写方向,如TextDirection.ltr(从左到右)或TextDirection.rtl(从右到左)。
strutStyleStrutStyle?定义行高和字体间距等。
textWidthBasisTextWidthBasis?定义文本宽度的计算方式,如TextWidthBasis.parentTextWidthBasis.longestLine
textHeightBehaviorTextHeightBehavior?定义文本高度的计算方式,用于调整行间距等。

常用代码示例:

Text(
 //文本内容
  "Hello, Flutter",
  //定义文本样式
  style: TextStyle(fontSize: 20, color: Colors.blue, fontWeight: FontWeight.bold),
  //定义文本对齐方式
  textAlign: TextAlign.center,
  //定义文本最大行数
  maxLines: 2,
  //定义文本溢出处理
  overflow: TextOverflow.ellipsis,
)
  • 常使用maxLines限制文本显示的最大行数结合overflow属性,处理文本溢出。
  • 常使用Container限制文本宽度结合textAlign属性将文本对齐。

三、 Style

Textstyle常用属性

属性名类型说明
colorColor?文本颜色。
fontSizedouble?字体大小。
fontWeightFontWeight?字体粗细,如FontWeight.bold(加粗)或FontWeight.normal(正常)。
fontStyleFontStyle?字体样式,如FontStyle.italic(斜体)或FontStyle.normal(正常)。
letterSpacingdouble?字母间距,单位为逻辑像素。
wordSpacingdouble?单词间距,单位为逻辑像素。
textBaselineTextBaseline?文本基线类型,如TextBaseline.alphabeticTextBaseline.ideographic
heightdouble?行高,相对于字体大小的倍数(例如1.5表示行高为字体大小的1.5倍)。
decorationTextDecoration?文本装饰,如TextDecoration.underline(下划线)、TextDecoration.lineThrough(删除线)等。
decorationColorColor?文本装饰的颜色。
decorationStyleTextDecorationStyle?文本装饰的样式,如TextDecorationStyle.solid(实线)、TextDecorationStyle.dashed(虚线)等。
decorationThicknessdouble?文本装饰的厚度。
fontFamilyString?字体家族名称,指定字体样式。
fontFamilyFallbackList<String>?字体家族的备用列表,当主字体不可用时使用。
fontFeaturesList<FontFeature>?字体特性,用于控制字体的特殊行为,如连字等。
shadowsList<Shadow>?文本的阴影列表,可以设置多个阴影效果。
backgroundPaint?文本背景的画笔,用于绘制背景图案。

常用代码示例:

Text('这里是文字',                  //Text必须有值
  style: TextStyle(                //Text控制字体样式
    backgroundColor: Colors.red,   //‘设置背景颜色为红色’
    color: Colors.black,           //‘设置文字颜色为黑色’
    fontSize: 30,                  //‘字体大小’
    fontWeight: FontWeight.bold,   //‘字体粗细<img src="’" alt="" width="50%" />
  ),
  textAlign: TextAlign.center,     //字体居中展示
)

屏幕截图 2025-02-25 151346.png

  • 互斥参数color/backgroundColorforeground/background不可同时使用,优先选color/backgroundColor实现。
  • 布局影响height可能破坏原有行高设计,谨慎使用

四、textAlign

TextAlign 属性

描述
TextAlign.left文本靠左对齐。这是默认值。
TextAlign.right文本靠右对齐。
TextAlign.center文本居中对齐。
TextAlign.justify文本两端对齐(类似于报纸排版)。每一行的左右两端都会对齐,通过调整单词间距或字符间距实现。最后一行可以设置为左对齐或右对齐(取决于textDirection)。
TextAlign.start文本对齐到容器的起始方向。如果textDirectionTextDirection.ltr(从左到右),则等同于TextAlign.left;如果是TextDirection.rtl(从右到左),则等同于TextAlign.right
TextAlign.end文本对齐到容器的结束方向。与TextAlign.start相反,具体对齐方式取决于textDirection

常用代码示例:

Text('right:1111111111111111111111111111111111111111111111111111',
  style: TextStyle(
    color: Colors.black,
    fontSize: 15,
    fontWeight: FontWeight.bold,
  ),
  textAlign: TextAlign.right,       //控制文本对齐方式
),

屏幕截图 2025-02-25 154801.png

  • 如果使用的是多行文本,TextAlign.justify 可能不会对最后一行进行两端对齐。如果需要对最后一行也进行两端对齐,可以使用 TextPainter 或其他自定义逻辑。
  • 对于从右到左的语言(如阿拉伯语),建议使用 TextAlign.startTextAlign.end,以确保对齐方式符合语言习惯。

五、maxlines和overflow

overflow属性

Overflow 属性值描述
TextOverflow.ellipsis当文本溢出时,在末尾显示省略号(...)。
TextOverflow.clip直接裁剪文本,不显示省略号。
TextOverflow.fade文本末尾使用渐变效果来裁剪文本,适用于单行文本。
TextOverflow.visible允许文本溢出其容器,不进行任何处理。

常用代码示例:

Text(
  '这是一段很长的文本,我们希望通过 maxLines 属性限制它的显示行数,并且通过 overflow 属性定义超出部分的显示方式。如果文本内容超出了指定的行数,我们希望它以省略号的形式显示,而不是溢出容器。',
  maxLines: 3, // 限制文本显示的最大行数
  overflow: TextOverflow.ellipsis, // 超出部分以省略号显示
  style: TextStyle(fontSize: 16),
),

屏幕截图 2025-02-25 162843.png


六、RichText

RichText 通常用于需要在同一个文本块中显示不同样式文本的场景,例如,显示带有强调的单词或不同颜色的链接。RichText 的构造函数接受一个 TextSpan 对象作为参数,这个 TextSpan 可以包含多个子 TextSpan,每个都可以有自己的样式。

常用代码示例:

RichText(
  text: const TextSpan(
    children: <TextSpan>[
      TextSpan(
        text: 'This is a ',
        style: TextStyle(color: Colors.black, fontSize: 20),
      ),
      TextSpan(
        text: 'special ',
        style: TextStyle(color: Colors.red, fontSize: 20, fontWeight: FontWeight.bold),
      ),
      TextSpan(
        text: 'text with ',
        style: TextStyle(color: Colors.blue, fontSize: 20),
      ),
      TextSpan(
        text: 'rich formatting.',
        style: TextStyle(backgroundColor: Colors.black, fontSize: 20),
      ),
    ],
  ),
);

屏幕截图 2025-02-25 163859.png

总结:

理解 Flutter 中 Text 组件的核心在于掌握信息展示的设计理念:

  1. 视觉层面:需要精确到像素级别地控制字体大小、颜色和字间距等视觉元素。
  2. 布局层面:要实现文本内容与界面布局之间的协调,使文本能够适应不同的容器尺寸。
  3. 交互层面:确保文本的可访问性,支持多语言,以适应不同用户的需求。

我们应该构建一个分层次的认知体系:

  • 基础认知:了解和配置 Text 组件的基本属性。
  • 逻辑认知:掌握文本布局的计算方法,理解文本是如何在界面上排列的。
  • 体验认知:关注性能优化和无障碍设计,提升用户体验。

通过“标准化配置—场景定制—性能优化”的逐步实践,可以将 Text 组件从简单的信息展示工具转变为提升用户体验的关键因素。