flutter text组件使用示例详解
作者:前端那些年 发布时间:2022-07-11 11:08:42
flutter组件的实现参考了react的设计理念,界面上所有的内容都是由组件构成,同时也有状态组件和无状态组件之分,这里简单介绍最基本的组件。
在组件代码的书写方式上,web端开发的样式主要有由css进行控制,而客户端开发根据使用的技术栈不同,写法也稍微有些不同:ReactNative的写法和web比较类似,但是ReactNative是使用StyleSheet.create()
方法创建样式对象,以内联的方式进行书写。
import React from 'react';
import { StyleSheet, Text, View } from 'react-native';
const LotsOfStyles = () => {
return (
<View style={styles.container}>
<Text style={styles.red}>just red</Text>
<Text style={styles.bigBlue}>just bigBlue</Text>
<Text style={[styles.bigBlue, styles.red]}>bigBlue, then red</Text>
<Text style={[styles.red, styles.bigBlue]}>red, then bigBlue</Text>
</View>
);
};
const styles = StyleSheet.create({
container: {
marginTop: 50,
},
bigBlue: {
color: 'blue',
fontWeight: 'bold',
fontSize: 30,
},
red: {
color: 'red',
},
});
export default LotsOfStyles;
而flutter则将组件封装成一个个的对象,样式及事件以属性的方式在实例化时进行赋值。
Text( 'Hello, $_name! How are you?',
textAlign: TextAlign.center,
overflow: TextOverflow.ellipsis,
style: const TextStyle(fontWeight: FontWeight.bold),
)
Text组件
用我们的小拇指头就可以想到,Text组件主要是用来展示一个文本字符串。这字符串根据布局容器的约束空间有可能占展示一行文本,也有可能展示多行文本。
Text
组件的构造器有一个可选的style
属性,如果我们省略掉这个属性,那么文本就会使用默认的样式。
如果我们指定了我们定制的style
样式,这个样式的类对象是TextStyle
。我们定制的style
样式会被merge
到最近的默认样式DefaultTextStyle上去。
默认样式类DefaultTextStyle
有这么几个属性:
maxLine: 最大行数,这个属性是可选的。
overflow: 文本超出后的样式。 overflow 的可选值有这么几个:clip(剪切)、fade(隐藏)、ellipsis(省略)、visible(直接展示)。如果我们点开文档看一下,会发现它其实是个枚举类型Enum
。
const TextOverflow = {
clip,
fade,
ellipsis,
visible
}
Text组件构造器上的主要属性
style: 文本样式。
textAlign: 文本对齐方式。
textDirection: 文本方向。
textHeightBehavior: 定义如何展示style中的height
selectionColor: 文本选中时的颜色。
overflow: 文本超出后的样式。
maxLine: 最大行数,这个属性是可选的。
再用小拇指想一想,对齐方式和文本方向不用说也是个枚举类型。而style则是一个TextStyle
的类型,TextStyle
可以定义字体的:
粗细
fontWeight
const Text( 'No, we need bold strokes. ',
style: TextStyle(fontWeight: FontWeight.bold),
)
斜体
FontStyle.italic
const Text( "Welcome to the present",
style: TextStyle(fontStyle: FontStyle.italic),
)
透明度和颜色
TextSpan(
text: "You don't have the votes.\n",
style: TextStyle(
color: Colors.black.withOpacity(0.6)),
),
字体大小
Text(
"These are wise words, ",
style:DefaultTextStyle.of(context).style.apply(fontSizeFactor: 2.0),
)
行高
const Text(
'Ladies and gentlemen, ',
style: TextStyle(height: 5, fontSize: 10),
)
需要注意的是:行高会按照 fontSize * n
的比例进行扩展。
然后我们还可以定义字体的下划线、描边、填充颜色、甚至渐变色。
下划线
RichText(
text: const TextSpan(
text: "Don't tax the South ",
children: <TextSpan>[
TextSpan(
text: 'cuz',
style: TextStyle(
color: Colors.black,
decoration: TextDecoration.underline,
decorationColor: Colors.red, decorationStyle:TextDecorationStyle.wavy,
),
),
TextSpan(
text: ' we got it made in the shade', ),
],
),
)
描边和填充颜色
Stack(
children: <Widget>[
Text( 'Greetings, planet!',
style: TextStyle(
fontSize: 40,
foreground: Paint()
..style = PaintingStyle.stroke
..strokeWidth = 6
..color = Colors.blue[700]!,
),
),
Text( 'Greetings, planet!',
style: TextStyle(
fontSize: 40,
color: Colors.grey[300],
),
),
],
)
颜色渐变
Text(
'Greetings, planet!',
style: TextStyle(
fontSize: 40,
foreground: Paint()
..shader = ui.Gradient.linear(
const Offset(0, 20),
const Offset(150, 20),
<Color>[
Colors.red,
Colors.yellow,
],
)
),
)
整体上想要掌握Text组件的属性,需要仔细思考一下它大概需要哪些样式:选用哪种字体,设置什么颜色,需要多少行高,选用哪种对齐方式,是否需要描边和渐变,是否需要一种装饰样式(下划线,删除线)就可以掌握了。
而想要文本有可交互的效果,则需要用GestureDetector
这个组件将它包裹起来,在GestureDetector
组件上触发ontap
s事件。
掌握了这些内容,就算是掌握了flutter的text组件。
来源:https://juejin.cn/post/7171850429838884894


猜你喜欢
- Step 1.依赖bannerGradledependencies{ compile 'com.youth.banner
- 前言我们了解数组这个概念之前,我们先思考下面几个问题。如果我们需要两个数据,那么直接创建两个变量即可int a;int b;如果需要五个数据
- 写在前面本文讲解的是如何使用Spring动态配置文件,实现不同环境不同配置,灵活切换配置文件;以及讲述了如何使用 Maven 打包,然后上传
- SpringBoot-JPA删除不成功,只执行了查询语句今天使用JPA自定义了一个删除方法deleteByUserIdAndCommentI
- 这篇文章主要介绍了Java日期与时间类原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参
- 一、引入pom<?xml version="1.0" encoding="UTF-8"?>
- 本文实例讲述了C#判断多个文本框是否为空的方法。分享给大家供大家参考。具体实现方法如下:/// <summary>/// 自定义
- 引言平时使用ProtoStuff作为序列化工具,对于一些POJO对象序列化,但是在实际使用中,发现针对BigDecimal对象进行序列化时却
- 一、常见游戏规则从扑克中每次取出4张牌。使用加减乘除,第一个能得出24者为赢。(其中,J代表11,Q代表12,K代表13,A代表1),按照要
- ModbusModbus是一种串行通信协议。Modbus 一个工业上常用的通讯协议、一种通讯约定。Modbus协议包括RTU、ASCII、T
- 为了实现自定义的Menu和ContextMenu效果,下面演示代码通过派生ProfessionalColorTable类,在自定义的类中重写
- 什么是字符串字符串或串(String)是由数字、字母、下划线组成的一串字符。一般记为 s=“a1a2···an”(n>=0)。它是编程
- 一、前言本篇文章聚焦在“如何使用FragmentStatePagerAdapter来保存Fragment的数据、在内存中
- android第一次新建项目是,相关依赖包需要下载很久,至少半小时,因为网速问题,还会多次下载失败。解决办法如下:1、通过镜像将gradle
- 导语:有些时候我们所需要查询的数据量比较大,但是jvm内存又是有限制的,数据量过大会导致内存溢出。这个时候就可以使用流式查询,数据一条条的返
- MyBatis简介MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参
- Spring main方法调用Dao层和Service层的方法在web环境中,一般serviceImpl中的dao之类的数据库连接都由容器启
- 将某个项目从Spring Boot1升级Spring Boot2之后出现如下报错,查了很多不同的解决方法都没有解决:Spring boot2
- 一、堆排序1、什么是堆排序(1)堆排序:堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构
- 堆溢出:/*** @author LXA* 堆溢出*/public class Heap{ public