flutter TextPainter 的用法

news2024/11/27 5:27:23

本文章基于 Flutter 3.16.2 Dart SDK 3.2.2。

TextPainter 是 Flutter 中用于在 Canvas 上绘制文本的类。它允许您在自定义的 CustomPainter 中使用 drawText 方法来绘制文本,并可以控制文本的位置、颜色、字体等属性。

import 'package:flutter/material.dart';

class CustomTextPainter extends CustomPainter {
  
  void paint(Canvas canvas, Size size) {
    TextPainter textPainter = TextPainter(
      text: TextSpan(
        text: 'Hello, Flutter!',
        style: TextStyle(color: Colors.black, fontSize: 24),
      ),
      textAlign: TextAlign.center,
      textDirection: TextDirection.ltr,
    )..layout();
    textPainter.paint(canvas, Offset(0, 0));
  }

  
  bool shouldRepaint(CustomPainter oldDelegate) {
    return oldDelegate != this;
  }
}

class CustomTextWidget extends StatelessWidget {
  
  Widget build(BuildContext context) {
    return CustomPaint(
      size: Size(200, 100),
      painter: CustomTextPainter(),
    );
  }
}

void main() {
  runApp(MaterialApp(
    home: Scaffold(
      appBar: AppBar(
        title: Text('Custom Text Painter Example'),
      ),
      body: Center(
        child: CustomTextWidget(),
      ),
    ),
  ));
}

运行效果如下:就是绘制出一条普通的文本

图片

本文案例使用 DartPad 在线测试 https://dartpad.cn/?id

现在,绘制一条文本,并在文本下绘制一条下划线(当然你可以是其他任意的图形),核心代码如下

import 'package:flutter/material.dart';

class UnderlinePainter extends CustomPainter {
  
  void paint(Canvas canvas, Size size) {
    Paint paint = Paint()
      ..color = Colors.black
      ..strokeCap = StrokeCap.round
      ..strokeWidth = 4; // 设置下划线宽度

    // 绘制文本
    TextSpan textSpan = TextSpan(
      text: 'Hello, Flutter!', // 文本内容
      style: TextStyle(color: Colors.black),
    );
    TextPainter textPainter = TextPainter(
        text: textSpan,
        textAlign: TextAlign.center,
        textDirection: TextDirection.ltr)
      ..layout();
    textPainter.paint(canvas, Offset(0, 0));

    // 绘制下划线
    canvas.drawLine(new Offset(0, textPainter.height),
        new Offset(size.width, textPainter.height), paint);
  }

  
  bool shouldRepaint(CustomPainter oldDelegate) {
    return oldDelegate != this;
  }
}

在这里插入图片描述

TextSpan是一个用于表示文本的类,TextSpan包含以下属性:
  • text: 要绘制的文本内容。

  • style: 文本的样式,包括字体、颜色、大小等。

  • alignment: 文本的对齐方式。

  • textDirection: 文本的方向,例如从左到右或从右到左。

TextPainter类用于在Canvas上绘制文本,常用属性包括:
  • text:要绘制的文本内容。

  • style:文本的样式,包括字体、颜色、大小等。

  • alignment:文本的对齐方式。

  • textDirection:文本的方向,例如从左到右或从右到左。

  • color:文本的颜色。

  • fontSize:文本的字体大小。

  • fontFamily:文本的字体类型。

  • textAlign:文本的对齐方式,例如居中、左对齐、右对齐等。

  • maxLines:文本的最大行数,超过这个行数将会出现溢出情况。

  • overflow:文本的溢出方式,例如裁剪、滚动等。

  • textScaleFactor:文本的缩放因子,可以用于实现缩放效果。

  • decorationColor:文本装饰的颜色,例如线条的颜色。

  • decoration:文本装饰的类型,例如删除线、上划线、下划线等。

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

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

相关文章

如何使用 Wordpress?托管, 网站, 插件, 缓存

这是该系列教程的第一个教程,最终将在运行高性能 LEMP 堆栈的阿里云 ECS 实例上运行一个新的 WordPress 站点。 在本教程中,我们将创建一个运行 Ubuntu 16.04 的实例,然后通过创建超级用户并禁用 root 登录来保护服务器,最后配置…

MN316 OpenCPU丨HTTP使用介绍

HTTP(Hyper Text Transfer Protocol)即超文本传输协议,是一个简单的请求-响应协议,通常运行在TCP之上,它指定了客户端可能发送给服务器消息类型以及得到什么类型响应。HTTPS(Hyper Text Transfer Protoc…

Fiddler抓包模拟器(雷电模拟器)

Fiddler设置 List item 打开fiddler,的options 点击OK,重启fiddler 模拟器 更改网络设置 IP可以在电脑上终端上查看 然后在模拟器浏览器中输入IP:端口 安装证书

JVM常见垃圾回收器

串行垃圾回收器 Serial和Serial Old串行垃圾回收器,是指使用单线程进行垃圾回收,堆内存较小,适合个人电脑 Serial作用于新生代,采用复制算法 Serial Old作用于老年代,采用标记-整理算法 垃圾回收时,只有…

django与数据库交互关于当前时间的坑

背景 在线上服务中使用时间进行数据库操作时发现异常,而在本地环境无法成功复现此问题,导致难以进行故障排查。 核心问题 view.py class XxxViewSet(viewsets.ModelViewSet):queryset Xxx.objects.with_status().order_by("status", &quo…

【UE 材质】任务目标点效果

效果 步骤 1. 新建一个工程,创建一个Basic关卡 2. 新建一个材质,这里命名为“M_GoalPoint” 打开“M_GoalPoint”,设置混合模式为“半透明”,勾选“双面” 在材质图表中添加如下节点 此时预览效果如下 继续添加如下节点 此时效果…

dell服务器重启后显示器黑屏

1.硬件层面:观察主机的指示灯 (1)指示灯偏黄,硬件存在问题(内存条有静电,拔出后用橡皮擦擦拭;或GPU松动) a.电源指示灯黄,闪烁三下再闪烁一下,扣下主板上的纽…

解决firefox(火狐)浏览器使用transform: scale导致的border不显示或显示不全的问题;

最近火狐遇到了此问题,查了许久没有解决办法也有说是因为火狐不支持小于1px单位的,也有说火狐浏览器本身的问题,然后也没有解决方案,最后没办法只能用最笨的方法解决。。。。 只针对Firefox使用CSS,使用’-moz-documen…

深度学习疲劳检测 驾驶行为检测 - python opencv cnn 计算机竞赛

文章目录 0 前言1 课题背景2 相关技术2.1 Dlib人脸识别库2.2 疲劳检测算法2.3 YOLOV5算法 3 效果展示3.1 眨眼3.2 打哈欠3.3 使用手机检测3.4 抽烟检测3.5 喝水检测 4 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 **基于深度学习加…

红海云eHR 任意文件上传漏洞复现

0x01 产品简介 红海eHR是大中型企业广泛采用人力资源管理系统。红海云是国内顶尖的HR软件供应商,是新一代eHR系统的领导者。 0x02 漏洞概述 红海云EHR系统PtFjk.mob接口处存在未授权文件上传漏洞,攻击者可上传webshell来命令执行,获取服务器权限。 0x03 复现环境 FOFA:…

hbuilder + uniapp +vue3 开发微信云小程序

1、创建项目: 2、创建项目完成的默认目录结构: 3、在根目录新建一个文件夹cloudFns(文件名字随便),存放云函数源码: 4、修改manifest.json文件:添加 小程序 appid和cloudfunctionRoot&#xff0…

1、关于前端js-ajax绕过

1、Ajax知识 、js--Ajax 传统请求跟js--Ajax请求的差别 在实例中用的上js-ajax的有 表单验证: 在用户填写表单时,可以使用 Ajax 在不刷新页面的情况下验证表单字段,并提供即时反馈。 实时搜索: 在搜索框中输入内容时&#xff0…

【开源】基于Vue+SpringBoot的陕西非物质文化遗产网站

文末获取源码,项目编号: S 065 。 \color{red}{文末获取源码,项目编号:S065。} 文末获取源码,项目编号:S065。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 设计目标2.2 研究内容2.3 研究方法与…

Flink 使用场景

Apache Flink 功能强大,支持开发和运行多种不同种类的应用程序。它的主要特性包括:批流一体化、精密的状态管理、事件时间支持以及精确一次的状态一致性保障等。Flink 不仅可以运行在包括 YARN、 Mesos、K8s 在内的多种资源管理框架上,还支持…

ModuleNotFoundError: No module named ‘dlib‘

解决:ModuleNotFoundError: No module named ‘dlib’ 文章目录 解决:ModuleNotFoundError: No module named dlib背景报错问题报错翻译报错位置代码报错原因解决方法方法一,直接安装方法二,手动下载安装方法三,编译安…

MYSQL练题笔记-高级查询和连接-这系列最后一题以及下个系列(子查询)的第一题

今天做了下面两题,到第三题的时候想了下但是没有太多的思路,然后看题解的时候实在是觉得自己不会,打算明天看吧。 1.按分类统计薪水相关的表和题目如下 我是想着简化问题,先找出薪水低于30000的员工,然后找这些员工的上…

Navicat 技术指引 | 适用于 GaussDB 分布式的服务器对象的创建/设计

Navicat Premium(16.3.3 Windows版或以上)正式支持 GaussDB 分布式数据库。GaussDB分布式模式更适合对系统可用性和数据处理能力要求较高的场景。Navicat 工具不仅提供可视化数据查看和编辑功能,还提供强大的高阶功能(如模型、结构…

3D渲染和动画制作软件KeyShot Pro mac附加功能

KeyShot 11 mac是一款专业化实时3D渲染工具,使用它可以简化3d渲染和动画制作流程,并且提供最准确的材质及光线,渲染效果更加真实,KeyShot为您提供了使用 CPU 或 NVIDIA GPU 进行渲染的能力和选择,并能够线性扩展以获得…

Python VSCode 配置固定的脚本入口

Python VSCode 配置固定的脚本入口 打开或者新建一个启动配置 选择 .vscode目录下 launch.json文件 将 “program”: “${file}” 替换成 “program”: “mian.py”, //完成你自己的入口.py文件名即可 json启动配置文件 {// Use IntelliSense to learn about possible attrib…

大数据技术3:数据仓库的ETL和分层模型

前言:我们先了解一下数据仓库架构的演变过程。 1 、数据仓库定义 数据仓库是一个面向主题的(Subject Oriented)、集成的(Integrate)、相对稳定的(Non-Volatile)、反映历史变化(Time…