Flutter 常用Widget-Text

本文深入讲解Flutter中的Text组件,涵盖基本用法、属性设置、富文本展示及交互处理。通过实例演示字体大小、颜色调整,单行多行控制,富文本创建及点击交互实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Text 部件是我们日常开发中最常用的部件,我们先来看看文档上对它的描述。

Text 部件用于显示单个样式的文本字符。字符串可能会多行显示,也可能在同一行显示,具体取决于布局对它的约束。

Text 部件的样式参数是可选的。等省略这个参数时,文本将使用最接近的封闭的DefaultTextStyle的样式(原文为the closest enclosing DefaultTextStyle)。如果给定样式的TextStyle.inherit属性为true(默认值),则该给定样式将与最接近的DefaultTextStyle合并。

使用Text.rich构造函数,“文本”窗口小部件可以显示具有不同样式的TextSpans的段落。 下面的示例显示每个单词具有不同样式的“ Hello beautiful world”。

交互
要使Text对触摸事件做出反应,请将其包装在GestureDetector小部件中,使用GestureDetector.onTap处理程序。在material design应用程序中,请考虑改用FlatButton,如果不合适,请考虑使用InkWell而不是GestureDetector。要使文本的各个部分具有交互性,请使用RichText并指定TapGestureRecognizer作为文本相关部分的TextSpan.recognizer的引用。

最为最基本的UI元素,我们最常用的用法有一下几种。

  • 字体大小、颜色。
  • 常用的样式,粗体、倾斜、下划线等。
  • 单行多行控制。
  • 超出边界显示。
  • 富文本。
  • 文字阴影。
  • 点击交互。

接下来,看一看如何使用。

import 'package:flutter/material.dart';

class TextPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
//    return Center(child: Text('我是一个text'));
    return Scaffold(
      body: Center(child: Text('我是一个text')),
    );
  }
}

切换上面两段代码,我们对于text的设置是一样的,那么为什么会有两个不同的结果呢?还记得上面对于DefaultTextStyle的描述吗,我们在没有设置TextStyle的时候,会去寻早周围最近的一个textStyle设置。所以当我们使用Scaffold来最为树的根节点的时候,text就可以好到附近的TextStyle了。 

 

import 'package:flutter/material.dart';

class TextPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Text(
          '我是一个text 是一个text 是一个text 是一个text 是一个text 是一个text 是一个text 是一个text 是一个text',
          maxLines: 2, // 最大行数
          softWrap: true, // 是否自动换行
          overflow: TextOverflow.ellipsis, //字体截断方式
          style: TextStyle(
            shadows: <Shadow>[
              //阴影
              Shadow(
                color: Colors.green, //颜色
                offset: Offset(5, 10), // 影子的偏移
              )
            ],
            fontSize: 20, //字体大小
            color: Colors.blue, //字体颜色
            fontWeight: FontWeight.w900,
            fontStyle: FontStyle.italic, //倾斜、加粗
            decoration: TextDecoration.underline, //下划线
            decorationColor: Colors.red, //颜色
            decorationStyle: TextDecorationStyle.solid, // 装饰的类型
          ),
        ),
      ),
    );
  }
}

富文本 可以使用Text.rich 或者 RichText + TextSpan来显示富文本:

import 'package:flutter/material.dart';

class TextPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Text.rich(
          TextSpan(
            text: "hello ",
            children: <TextSpan>[
              TextSpan(
                text: "beautiful ",
                style: TextStyle(color: Colors.red),
              ),
              TextSpan(
                text: "wor",
                style: TextStyle(fontSize: 20),
              ),
              TextSpan(
                text: "ld",
                style: TextStyle(decoration: TextDecoration.lineThrough),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

交互

text 交互

import 'package:flutter/material.dart';

class TextPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: InkWell(
          child: Text(
            '我是一个text',
          ),
          onTap: () {
            debugPrint("click");
          },
        ),
      ),
    );
  }
}

富文本交互 

import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';

class TextPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Text.rich(
          TextSpan(
            recognizer: TapGestureRecognizer()..onTap = () {},
            text: "hello ",
            children: <TextSpan>[
              TextSpan(
                recognizer: TapGestureRecognizer()..onTap = () {},
                text: "beautiful ",
                style: TextStyle(color: Colors.red),
              ),
              TextSpan(
                text: "wor",
                style: TextStyle(fontSize: 20),
              ),
              TextSpan(
                text: "ld",
                style: TextStyle(decoration: TextDecoration.lineThrough),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

总结:text的基本用法和属性就先写到这,Flutter中大部分的属性用法都写在文档和Flutter源码注释中,而且解释的也比较详细。接下来的文章会继续将常用Widget的使用方法逐一介绍,在最后的系列中,会公开一个商业级的项目,感兴趣的小伙伴关注。如果您在阅读过程中发现错误,请及时留言给我,我会第一时间改正,争取不误导他人。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值