Flutter控件——常用控件:Text

Posted wzj_what_why_how

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flutter控件——常用控件:Text相关的知识,希望对你有一定的参考价值。

Text

text.dart 源码:

const Text(
    String this.data,       //要显示的字符串
    
        Key? key,
        this.style,         //样式TextStyle
        this.strutStyle,
        this.textAlign,     //文本应如何水平对齐enum
        this.textDirection, //
        this.locale,
        this.softWrap,
        this.overflow,
        // textScaleFactor代表文本相对于当前字体大小的缩放因子,相对于去设置文本的样式style属性的fontSize,它是调整字体大小的一个快捷方
        //式。该属性的默认值可以通过MediaQueryData.textScaleFactor获得,如果没有MediaQuery,那么会默认值将为1.0。
        this.textScaleFactor, //主要是用于系统字体大小设置改变时对 Flutter 应用字体进行全局调整。
        this.maxLines,  //最多几行
        this.semanticsLabel,
        this.textWidthBasis,
        this.textHeightBehavior,
    
  ) : assert(
         data != null,
         'A non-null String must be provided to a Text widget.',
       ),
       textSpan = null,
       super(key: key);
       ……

使用Text.rich构造函数,Text小部件可以显示具有不同样式TextSpan的段落。

const Text.rich(
    InlineSpan this.textSpan, 
    Key? key,
    this.style,
    this.strutStyle,
    this.textAlign,
    this.textDirection,
    this.locale,
    this.softWrap,
    this.overflow,
    this.textScaleFactor,
    this.maxLines,
    this.semanticsLabel,
    this.textWidthBasis,
    this.textHeightBehavior,
  ) : assert(
         textSpan != null,
         'A non-null TextSpan must be provided to a Text.rich widget.',
       ),
       data = null,
       super(key: key);

属性:

(一些比较容易记忆的就没有记录下来)
overflow:是用来设置文本溢出时,如何处理,它有下面几个常用的值供我们选择。

  • TextOverflow.clip:直接切断,剩下的文字就没有了,感觉不太友好,体验性不好。
  • TextOverflow.ellipsis:在后边显示省略号,体验性较好,这个在工作中经常使用。
  • TextOverflow.fade: 溢出的部分会进行一个渐变消失的效果,当然是上下的渐变,不是左右的哦。

textDirection:相对TextAlign中的start、end而言有用(当start使用了ltr相当于end使用了rtl,也相当于TextAlign使用了left)

  • TextDirection.ltr ltr从左至右,
  • TextDirection.rtl rtl从右至左

softWrap: 是否自动换行(true自动换行,false单行显示,超出屏幕部分默认截断处理)
style:样式TextStyle。这个属性的内容比较多:

     const TextStyle(
        this.inherit = true,
        this.color,          //字体颜色  Color.fromARGB(225, 225, 125, 125),
        this.backgroundColor,//背景色
        this.fontSize,       //字体大小 25.0, 字体大小不会跟随系统字体大小变化。可以精确指定字体大小,而textScaleFactor只能通过缩放比例来控制。
        this.fontWeight,       //字体厚度 FontWeight.w200 特轻 梯度是100 FontWeight.w900 最粗
        this.fontStyle,       //FontStyle.italic 使用斜体 FontStyle.normal 使用直立
        this.letterSpacing,       //水平字母之间的空间间隔(逻辑像素为单位)。可以使用负值来让字母更接近。
        this.wordSpacing,       //单词之间添加的空间间隔(逻辑像素为单位)。可以使用负值来使单词更接近。
        this.textBaseline,       //对齐文本的水平线:
        this.height,       //文本行与行的高度,作为字体大小的倍数(取值1~2,如1.2)具体的行高等于fontSize*height。
        this.leadingDistribution,       //
        this.locale,       //文本的前景色,不能与color共同设置
        this.foreground,       //文本的前景色,不能与color共同设置
        this.background,       //文本背景色Paint()..color = backgroundColor
        this.shadows,       //文本的阴影
        this.fontFeatures,       //
        this.decoration,       //文字的线性装饰,比如 TextDecoration.underline 下划线, TextDecoration.lineThrough删除线
        this.decorationColor,       //文本装饰线的颜色
        this.decorationStyle,       //文本装饰线的样式,比如 TextDecorationStyle.dashed 虚线 TextDecorationStyle.solid 实线
        this.decorationThickness,       //
        this.debugLabel,       //
        String? fontFamily,       //由于不同平台默认支持的字体集不同,所以在手动指定字体时一定要先在不同平台测试一下。
        List<String>? fontFamilyFallback,       //
        String? package,       //
        this.overflow,       //
      ) ...

TextSpan:对一个 Text 内容的不同部分按照不同的样式显示,这时就可以使用TextSpan,它代表文本的一个“片段”

const TextSpan(
  TextStyle style,
  Sting text,
  List<TextSpan> children,
  GestureRecognizer recognizer,
);

其中style 和 text属性代表该文本片段的样式和内容。 children是一个TextSpan的数组,也就是说TextSpan可以包括其他TextSpan。而recognizer用于对该文本片段上用于手势进行识别处理。
eg:

Text.rich(TextSpan(
    children: [
     TextSpan(
       text: "textSpan测试: "
     ),
     TextSpan(
       text: "https://flutter.com",
       style: TextStyle(
         color: Colors.blue
       ),
       recognizer: _tapRecognizer //点击链接后的一个处理器
     ),
    ]
))
  • TextSpan 实现了一个基础文本片段和一个链接片段,然后通过Text.rich 方法将TextSpan 添加到 Text 中,
  • 之所以可以这样做,是因为 Text 其实就是 RichText 的一个包装,而RichText 是可以显示多种样式(富文本)的 widget。

字体

在pubspec.yaml中指定的位置声明:

  fonts:
    - family: Oswald-Medium
      fonts:
        - asset: fonts/Oswald-Medium.ttf
          style: italic

使用字体:

// 声明文本样式
const textStyle = const TextStyle(
  fontFamily: 'Raleway',
);

// 使用文本样式
var buttonText = const Text(
  "Use the font for this text",
  style: textStyle,
);

以上是关于Flutter控件——常用控件:Text的主要内容,如果未能解决你的问题,请参考以下文章

Flutter控件——常用控件:Icon

Flutter控件——常用控件:ListView

Flutter控件——常用控件:StatelessWidget和Context

Flutter控件——常用控件:GridView

Flutter控件——常用控件:GridView

Flutter控件——常用控件:单选开关和复选框