【Flutter 组件】002-基础组件:文本与样式

news2024/11/15 13:36:28

【Flutter 组件】002-基础组件:文本与样式

文章目录

  • 【Flutter 组件】002-基础组件:文本与样式
  • 一、Text
    • 1、概述
    • 2、属性列表
    • 3、构造方法
    • 4、示例
      • 代码演示
      • 运行结果
  • 二、TextStyle
    • 1、概述
    • 2、属性列表
    • 3、构造方法
    • 4、示例
      • 代码示例
      • 运行结果
  • 三、TextSpan
    • 1、概述
    • 2、构造方法
    • 3、示例
      • 代码示例
      • 运行结果
  • 四、DefaultTextStyle
    • 1、概述
    • 2、构造方法
    • 3、示例
      • 代码示例
      • 运行结果
  • 五、字体
    • 1、概述
    • 2、详细使用步骤
      • 第一步:在 asset 中声明
      • 第二步:使用字体
    • 3、Package中的字体
  • N、参考资料

一、Text

1、概述

Text 用于显示简单样式文本,它包含一些控制文本显示样式的一些属性。

继承关系: Text -> StatelessWidget -> Widget -> DiagnosticableTree -> Diagnosticable -> Object

2、属性列表

Text 属性介绍
styleTextStyle 对象,最常用属性,详情见下方表格
strutStyle字体在文本内的一些偏移,使用时 style 属性必须有值,很少使用
textAlign对齐方式:left、start、right、end、center、justify
textDirectionTextDirection.ltr:从左到右、TextDirection.rtl:从右到左
locale区域设置,基本不会用
softWrap是否自动换行
overflow超出部分截取方式,clip->直接截取,fade->渐隐,ellipsis->省略号
textScaleFactor字体缩放
maxLines最多显示行数
semanticsLabel语义标签,如文本为"$$“,这里设置为"双美元”
textWidthBasis测量行宽度
textHeightBehavior官方备注: 定义如何应用第一行的ascent和最后一行的descent

3、构造方法

const Text(
    // 要显示的文字内容
    this.data, 
   {
    // key类似于id
    Key key,
    // 文字显示样式和属性
    this.style,
    this.strutStyle,
    // 文字对齐方式
    this.textAlign,
    // 文字显示方向
    this.textDirection,
    // 设置语言环境
    this.locale,
    // 是否自动换行
    this.softWrap,
    // 文字溢出后处理方式
    this.overflow,
    // 字体缩放
    this.textScaleFactor,
    // 最大显示行数
    this.maxLines,
    // 图像的语义描述,用于向Andoid上的TalkBack和iOS上的VoiceOver提供图像描述
    this.semanticsLabel,
  })

4、示例

代码演示

import 'package:flutter/material.dart';

void main() {
  runApp(MaterialApp(
    home: Scaffold(
      appBar: AppBar(title: const Text("訾博的学习笔记")),
      body: const MyApp(),
    ),
  ));
}

// 代码块 StatelessWidget
class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  
  Widget build(BuildContext context) {
    return Center(
      child: Container(
        alignment: Alignment.center,
        height: 200,
        width: 200,
        // LinearGradient 背景线性渐变 RadialGradient 径向渐变
        decoration: BoxDecoration(
            color: Colors.yellow,
            gradient: const LinearGradient(
              colors: [Colors.lightBlue, Colors.greenAccent, Colors.purple],
            ),
            boxShadow: const [
              //卡片阴影
              BoxShadow(
                color: Colors.blue,
                offset: Offset(2.0, 2.0),
                blurRadius: 10.0,
              )
            ],
            border: Border.all(color: Colors.black, width: 1),
        ),
        transform: Matrix4.rotationZ(0.2),
        child: const Text(
          "你好 Flutter !",
          textAlign: TextAlign.left,
          overflow: TextOverflow.ellipsis,
          maxLines: 2,
          textScaleFactor: 1.5,
        ),
      ),
    );
  }
}

运行结果

47b317b2998cd57342c5f5f533957cb

二、TextStyle

1、概述

TextStyle用于指定文本显示的样式如颜色、字体、粗细、背景等。

2、属性列表

TextStyle 属性介绍
inherit是否继承父类
color字体颜色
backgroundColor背景色
fontSize字体大小
fontWeight字体加粗
fontStyle系统字体
fontFamily字体
letterSpacing字母间距
wordSpacing单词间距
textBaseline字体基线,有兴趣的可以单独了解,flex 布局中会有一种baseline,不常用
height高度
locale区域设置
foreground前置层
background背景层
shadows阴影
fontFeatures指定字体的多种变体
decoration文字划线:上,中,下
decorationColor划线颜色
decorationStyle划线样式:虚线,单线,双线
decorationThickness线宽,默认1.0
debugLabel仅在 debug 模式下有用

3、构造方法

const TextStyle({
    // 是否继承父类组件属性
    this.inherit = true,
    // 字体颜色
    this.color,
    // 文字大小,默认14px
    this.fontSize,
    // 字体粗细
    this.fontWeight,
    // 字体样式,normal或italic
    this.fontStyle,
    // 字母间距,默认为0,负数间距缩小,正数间距增大
    this.letterSpacing,
    // 单词间距,默认为0,负数间距缩小,正数间距增大
    this.wordSpacing,
    // 字体基线
    this.textBaseline,
    // 行高
    this.height,
    // 设置区域
    this.locale,
    // 前景色
    this.foreground,
    // 背景色
    this.background,
    // 阴影
    this.shadows,
    // 文字划线,下换线等等装饰
    this.decoration,
    // 划线颜色
    this.decorationColor,
    // 划线样式,虚线、实线等样式
    this.decorationStyle,
    // 描述信息
    this.debugLabel,
    // 字体
    String fontFamily,
    List<String> fontFamilyFallback,
    String package,
  })

4、示例

代码示例

Text("Hello world",
  style: TextStyle(
    color: Colors.blue,
    fontSize: 18.0,
    height: 1.2,  
    fontFamily: "Courier",
    background: Paint()..color=Colors.yellow,
    decoration:TextDecoration.underline,
    decorationStyle: TextDecorationStyle.dashed
  ),
);

运行结果

image-20221211123213860

三、TextSpan

1、概述

不同样式的文本组合在一起!

Text 的所有文本内容只能按同一种样式,如果我们需要对一个 Text 内容的不同部分按照不同的样式显示,这时就可以使用TextSpan,它代表文本的一个“片段”。

2、构造方法

const TextSpan({
    // 文本内容
    this.text,
    // 子 TextSpan ,可以指定多个
    this.children,
    // 文本样式
    super.style,
    // 手势识别监听器
    this.recognizer,
    MouseCursor? mouseCursor,
    this.onEnter,
    this.onExit,
    this.semanticsLabel,
    this.locale,
    this.spellOut,
  }) : mouseCursor = mouseCursor ??
         (recognizer == null ? MouseCursor.defer : SystemMouseCursors.click),
       assert(!(text == null && semanticsLabel != null));

3、示例

代码示例

import 'package:flutter/material.dart';

void main() {
  runApp(MaterialApp(
    home: Scaffold(
      appBar: AppBar(title: const Text("訾博的学习笔记")),
      body: const MyApp(),
    ),
  ));
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  
  Widget build(BuildContext context) {
    return Center(
      child: Container(
        alignment: Alignment.center,
        height: 200,
        width: 200,
        child: Text.rich(
          TextSpan(
            text: "訾博",
            style: TextStyle(
              color: Colors.black,
              fontSize: 40,
              fontWeight: FontWeight.bold,
              fontStyle: FontStyle.italic,
              decoration: TextDecoration.underline,
              decorationStyle: TextDecorationStyle.dashed,
            ),
            children: [
              TextSpan(
                text: "正在学习",
                style: TextStyle(
                  fontSize: 22,
                  color: Colors.red,
                ),
              ),
              TextSpan(
                text: "Flutter",
                style: TextStyle(
                  fontSize: 34,
                  color: Colors.green,
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

运行结果

53b4a15cd0e4aee61b64014bbdeb967

四、DefaultTextStyle

1、概述

文本的默认样式!

在 Widget 树中,文本的样式默认是可以被继承的(子类文本类组件未指定具体样式时可以使用 Widget 树中父级设置的默认样式),因此,如果在 Widget 树的某一个节点处设置一个默认的文本样式,那么该节点的子树中所有文本都会默认使用这个样式,而DefaultTextStyle正是用于设置默认文本样式的。

2、构造方法

const DefaultTextStyle({
    super.key,
    required this.style,
    this.textAlign,
    this.softWrap = true,
    this.overflow = TextOverflow.clip,
    this.maxLines,
    this.textWidthBasis = TextWidthBasis.parent,
    this.textHeightBehavior,
    required super.child,
  }) : assert(style != null),
       assert(softWrap != null),
       assert(overflow != null),
       assert(maxLines == null || maxLines > 0),
       assert(child != null),
       assert(textWidthBasis != null);

3、示例

代码示例

import 'package:flutter/material.dart';

void main() {
  runApp(MaterialApp(
    home: Scaffold(
      appBar: AppBar(title: const Text("訾博的学习笔记")),
      body: const MyApp(),
    ),
  ));
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  
  Widget build(BuildContext context) {
    return Center(
      child: Container(
        alignment: Alignment.center,
        height: 200,
        width: 200,
        child: DefaultTextStyle(
          // 1.设置文本默认样式
          style: TextStyle(
            color:Colors.red,
            fontSize: 20.0,
          ),
          textAlign: TextAlign.start,
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.start,
            children: <Widget>[
              Text("刘备"),
              Text("关羽"),
              Text("张飞",
                style: TextStyle(
                    inherit: false,
                    // 2.不继承默认样式
                    color: Colors.blue
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

运行结果

微信图片_20221212163908

五、字体

1、概述

可以在 Flutter 应用程序中使用不同的字体。

在 Flutter 中使用字体分两步完成。首先在pubspec.yaml中声明它们,以确保它们会打包到应用程序中。然后通过TextStyle 属性使用字体。

2、详细使用步骤

第一步:在 asset 中声明

要将字体文件打包到应用中,和使用其他资源一样,要先在pubspec.yaml中声明它。然后将字体文件复制到在pubspec.yaml中指定的位置。

image-20221212164811777

第二步:使用字体

import 'package:flutter/material.dart';

void main() {
  runApp(MaterialApp(
    home: Scaffold(
      appBar: AppBar(title: const Text("訾博的学习笔记")),
      body: const MyApp(),
    ),
  ));
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  
  Widget build(BuildContext context) {
    return Center(
      child: Container(
        alignment: Alignment.center,
        height: 200,
        width: 200,
        child: Text(
          "使用 JetBrainsMono 字体!\nSystem.out.print(Hello World!)",
          style: TextStyle(
            color: Colors.blue,
            fontSize: 20,
            fontFamily: "JetBrainsMono",
            fontWeight: FontWeight.bold,
          ),
        ),
      ),
    );
  }
}

3、Package中的字体

要使用 Package 中定义的字体,必须提供package参数。例如,假设上面的字体声明位于my_package包中。然后创建 TextStyle 的过程如下:

const textStyle = const TextStyle(
  fontFamily: 'Raleway',
  package: 'my_package', //指定包名
);

如果在 package 包内部使用它自己定义的字体,也应该在创建文本样式时指定 package 参数,如上例所示。

一个包也可以只提供字体文件而不需要在 ·pubspec.yaml· 中声明。 这些文件应该存放在包的lib/文件夹中。字体文件不会自动绑定到应用程序中,应用程序可以在声明字体时有选择地使用这些字体。假设一个名为 my_package 的包中有一个字体文件:

lib/fonts/Raleway-Medium.ttf

然后,应用程序可以声明一个字体,如下面的示例所示:

 flutter:
   fonts:
     - family: Raleway
       fonts:
         - asset: assets/fonts/Raleway-Regular.ttf
         - asset: packages/my_package/fonts/Raleway-Medium.ttf
           weight: 500

lib/是隐含的,所以它不应该包含在 asset 路径中。

在这种情况下,由于应用程序本地定义了字体,所以在创建TextStyle时可以不指定package参数:

const textStyle = const TextStyle(
  fontFamily: 'Raleway',
);

N、参考资料

Flutter入门(10):Flutter 组件之 Text 详解

https://www.jianshu.com/p/e2a29c9dfed1

Flutter学习记录——6.基础组件详解

https://blog.51cto.com/u_15781233/5654677#1Text_Widget_3

flutter 实战

https://book.flutterchina.club/chapter3/text.html#_3-1-2-textstyle

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

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

相关文章

数字图像处理(入门篇)十 边缘检测

目录 一 边缘检测算子 1 Roberts算子 2 Sobel算子 3 Prewitt算子 二 实践 &#xff08;1&#xff09;代码 &#xff08;2&#xff09;结果图 边缘检测是计算机视觉中的基本问题&#xff0c;边缘检测的难点就在于如何又快又准确地提取图像的边缘信息。 边缘检测的基本方法…

流媒体分析之webrtc之rtcp

TCP作为RTP控制协议&#xff0c;对于弱网下音视频质量和会话控制具有重要的作用。 1. RTCP Header V&#xff1a;RTCP的版本号&#xff0c;一定等于2&#xff1b; P&#xff1a;如果设置&#xff0c;填充位表示数据包包含末尾的附加填充八位字节&#xff0c;不属于控制信息&am…

基于jsp+mysql+ssm影视爱好者论坛交流系统-计算机毕业设计

项目介绍 设计一个电影学习交流社区&#xff0c;使对电影的学生可以方便的进行交流。同时&#xff0c;通过此课题使学生熟悉网站搭建流程和方法。 意义&#xff1a;此课题实现后&#xff0c;可以为喜欢电影的学生提供一个交流学习的平台&#xff0c;提高学生学习兴趣。同时&am…

想提前躺平的程序员,这10个网站收好了!

我们的口号是&#xff1a;搞钱&#xff01;搞钱&#xff01;再搞钱&#xff01;程序员想兼职但是不知道该上哪找&#xff1f; 为大家整理了7个程序员最常用的接私活平台&#xff0c;希望对你有帮助&#xff01;记得点赞收藏&#xff0c;先码后看&#xff01;1、程序员客栈 程序…

基于jsp+mysql+ssm游戏爱好者论坛交流设计-计算机毕业设计

项目介绍 本论坛是一个面向爱好游戏的玩家提供一个交流分享游戏攻略、视频、图片以及娱乐互动,让游戏玩家展示自己最真实的心声!论坛提供注册、登陆、发帖、回复、搜索等功能。用户可以利用论坛进行网上约伴、分享装备属性及其获得方法&#xff0c;进行账号交易等&#xff0c;…

5 - 线程池 Java内置的线程池 - 异步计算结果(Future)

前面介绍 ExecutorService 线程池接口的时候&#xff0c;其中&#xff0c;提交任务的方法 submit() 的返回值就是Future接口类型的。 我们刚刚在学习java内置线程池使用时&#xff0c;没有考虑线程计算的结果&#xff0c;但开发中&#xff0c;我们有时需要利用线程进行一些计算…

2022年牙科医疗行业研究报告

第一章 行业概况 1.1 牙科医疗概念及现状 牙科医疗行业是指以牙科医疗消费为基础&#xff0c;集合了牙科医疗服务、职业牙医教育培训、牙科医疗器材研究开发生产、市场策划、宣传、投资、经营、管理等于一体的医疗产业链。由于牙科疾病的特点&#xff0c;牙科医疗产业在具有一…

iOS扫码一图多码原生处理AVCaptureSession

文章目录前言正文1.定位二维码的位置2.扫码、解析总结前言 业务中一直有扫码的需求&#xff0c;这次说需要扫多个码&#xff08;详细一点是一图多码&#xff09;&#xff0c;有点东西的。 第一点&#xff1a;怎么做&#xff1a;拿到手第一反应是有没有什么库可以直接调用的&am…

VSCode远程连接免密登录

配置了VSCode远程连接服务器&#xff0c;但每次打开project都需要重新输入密码&#xff0c;比较麻烦&#xff0c;所以下面就介绍一下如何免密码登入 在上一篇blog里面配置好VSCode远程连接服务器之后按照如下操作。 步骤如下&#xff1a; 在windows端&#xff1a; 1、winR打…

softmax原理性质解析并python实现

Softmax原理 Softmax函数用于将分类结果归一化&#xff0c;形成一个概率分布。作用类似于二分类中的Sigmoid函数。 对于一个k维向量z&#xff0c;我们想把这个结果转换为一个k个类别的概率分布p(z)。softmax可以用于实现上述结果&#xff0c;具体计算公式为&#xff1a; 对于k…

【数集项目之 MCDF】(一) 控制寄存器 control_register

写在前面 本项目为MCDF数据整形器设计&#xff0c;所有的参考代码见我的github https://github.com/SuperiorLQF/verilog_ALL/tree/master/MCDF 其中设计的参考文档见github文件中的MCDF修订版.docx文件。选择的工具链是Vscode & iverilog & gtkwave&#xff0c;相关工…

前端框架 Nuxt3 Vue3 SSR 总结

目录 一、Nuxt3安装 二、路由 1、普通路由 2、动态路由 3、获取路由参数 4、路由跳转标签 5、路由跳转api 三、静态资源 四、常用标签 1、title标签、useHead的API 五、公共模板布局 1、默认布局 2、自定义公共模板 3、动态自定义布局 六、插件 七、中间件 …

【QString 函数学习篇】

【QString 函数学习篇】【1】UI设计布局【2】QChar | setAlignment |【3】sprintf | asprintf | setNum | number |【4】toInt | toUpper [十进制->十六进制 | 十进制->二进制]【5】clear | append【6】二进制->十六进制 | 二进制->十进制【7】prepend【8】strimme…

[附源码]Python计算机毕业设计SSM基于的餐厅管理系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

(十二)Vue之列表渲染

文章目录基本列表遍历数组遍历对象遍历字符串遍历指定次数key的原理虚拟DOM中key的作用用index作为key可能会引发的问题如何选择keyVue学习目录 上一篇&#xff1a;&#xff08;十一&#xff09;Vue之条件渲染 基本列表 在vue里基本的列表渲染可以使用v-for指令 v-for指令: …

Reactor手册

Flux Flux 是一个发出0-N个元素组成的异步序列的Publisher,可以被onComplete信号或者onError信号所终止。 Flux.just("Hello", "World").subscribe(System.out::println);// fromArray()&#xff0c;fromIterable()&#xff0c;fromStream()Flux.fromArra…

K8s 核心组件介绍

目录前言一、控制平面组件1.1 kube-apiserver1.2 etcd1.3 kube-scheduler1.4 kube-controller-manager1.5 cloud-controller-manager二、Node 组件2.1 kubelet2.2 kube-proxy2.3 Container Runtime前言 一个完整的 K8s 集群由一组节点&#xff08;node&#xff09;服务器组成&…

组队-蓝桥杯

题目描述 本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将所填结果输出即可。 作为篮球队教练&#xff0c;你需要从以下名单中选出 11 号位至 55 号位各一名球员&#xff0c;组成球队的首发阵容。 每位球员担任 11 号位至 55 号位时的评分如下…

关于人脸检测和人脸关键点检测的详解(涉及Opencv 和Dlibd)

关于人脸识别&#xff0c;大家入门opencv&#xff0c;最常见的是用opencv级联分类器器里面的函数进行人脸的识别&#xff08;当然里面包含很多各种物体的分类器&#xff0c;大家可以一一测试&#xff09;&#xff0c;今天我们来练一下关于人脸识别的级联器。 1&#xff0c;ope…

数据仓库(DW)、数据湖、数据中台的关系

一句话说明&#xff1a;数据中台是一套体系&#xff0c;既不是工具又不是存储&#xff0c;它可以包含数据湖和数据仓库。 数据仓库 数据仓库是一个面向主题的、集成的、随时间变化但信息本身相对稳定的数据集合&#xff0c;用于支持管理决策过程。其本质就是完成从面向业务过程…