Flutter TolyUI 框架#09 | tolyui_text 轻量高亮文本

作者:张风捷特烈日期:2025/12/1

《Flutter TolyUI 框架》系列前言:

TolyUI张风捷特烈 打造的 Fluter 全平台应用开发 UI 框架。具备 全平台组件化源码开放响应式 四大特点。可以帮助开发者迅速构建具有响应式全平台应用软件:

开源地址: github.com/TolyFx/toly…


1. 文本增强的设计动机

在应用开发中,文本从来不只是信息的载体,更是用户与应用交互的桥梁。在界面展示和交互的过程中,有时文本并不仅是基本的静态展示,还有搜索是关键字高亮、隐私政策点击交互等。

搜索高亮隐私政策等

虽然使用 Flutter 本身的富文本也可以处理,但往往让开发者陷入繁琐的细节之中。实现一个简单的搜索高亮功能,需要手动分割字符串、处理大小写逻辑、管理样式状态。比如下面这样的代码:

1// 传统方式:繁琐的手动处理
2List<TextSpan> buildHighlightSpans(String text, String keyword) {
3  List<TextSpan> spans = [];
4  int start = 0;
5  while (start < text.length) {
6    int index = text.indexOf(keyword, start);
7    if (index == -1) {
8      spans.add(TextSpan(text: text.substring(start)));
9      break;
10    }
11    if (index > start) {
12      spans.add(TextSpan(text: text.substring(start, index)));
13    }
14    spans.add(TextSpan(
15      text: keyword,
16      style: TextStyle(backgroundColor: Colors.yellow),
17    ));
18    start = index + keyword.length;
19  }
20  return spans;
21}
22

TolyUI 的 HighlightText 组件目的在于封装文字高亮方案,提供一套轻量级的解决方案。通过简洁的 API 让开发者用最少的代码实现需求,比如最简单的搜索关键字高亮,使用下面的代码即可:

1HighlightText.withArg(
2  text,
3  arg: keyword,
4  highlightStyle: TextStyle(backgroundColor: Colors.yellow),
5)
6

2. 独立模块: tolyui_text

TolyUI 中对文本表现的增强,封装倒了独立的模块中 tolyui_text。它隶属于 tolyui 的基础组件模块:

使用者可以独立模块包,或者使用 tolyui 全家桶来使用 HighlightText 组件。

1# 仅使用 tolyui_text
2dependencies: 
3   tolyui_text: ^last_version
4
5# 使用 tolyui 全家桶 
6dependencies: 
7    tolyui: ^last_version
8
9

下面来介绍一下 HighlightText 的具体用法。


3. 搜索关键字文本高亮

第一个场景是交互式搜索高亮。这是最常见的文本处理需求,HighlightText 提供了 withArg 构造函数,让开发者可以快速实现,基于搜索字符,实现高亮匹配关键字,效果如下:

  • 支持自定义 高亮匹配样式
  • 支持 是否区分大小写

使用方式非常简单,只需要通过 HighlightText.withArg 即可:

1HighlightText.withArg(
2  "文本内容",
3  caseSensitive: // 是否区分大小写,
4  arg: '关键字',
5  highlightStyle: //高亮样式,
6),
7

4. 自定义匹配规则

withArg 构造函数只适合某一个特定字符串的高亮匹配。对于多个复杂的破规则,支持 rules 的规则映射。Rule 对象可以定义正则表达式,以及 onTap 回调,用于处理点击事件。
比如这里 《[^\u300b]+》 正则匹配书名号和其中的内容,匹配到使用 highlightStyle 样式。点击时触发 onTapMatch 方法,回调的 HighlightMatch 对象中可以得到匹配的信息,包括文本内容和第几个。

1HighlightText(
2  '文本内容',
3  rules: {
4    Rule(RegExp(r'《[^\u300b]+》'), onTap: onTapMatch): highlightStyle //高亮样式,
5  },
6  style: const TextStyle(fontSize: 16),
7),
8
9void onTapMatch(HighlightMatch match) {
10  $message.success(
11    message: '点击的是第:${match.matchIndex} 个:${match.matchedText}',
12  );
13}
14

5.多模式智能识别

rules 中有支持多个匹配规则,比如下面所有数字通过 \d+ 匹配,每个数字都可以有自己的点击事件。Rule 的第一参可以传入字符串,比如这里的 zdl1994328 精确匹配每个字符串。

1HighlightText(
2  "文本",
3  rules: {
4    Rule(
5      RegExp(r'\d+'),
6      onTap: (match) =>
7          $message.success(message: '点击了数字: ${match.matchedText}'),
8    ): numStyle,
9    Rule(
10      RegExp(r'\S+@\S+.\S+'),
11      onTap: (match) => print('点击了邮箱: ${match.matchedText}'),
12    ): emailStyle,
13    Rule(
14      'zdl1994328',
15      onTap: (match) {
16        $message.success(message: '点击了微信号: ${match.matchedText}');
17      },
18    ): weiChatStyle,
19  },
20  style: const TextStyle(fontSize: 16),
21)
22

尾声

随着 tolyui 的逐步迭代,越来越多的新功能将会支持。感谢你关注 tolyui 的成长,如果喜欢,也希望你能在 github 中点赞支持~

github 开源地址: github.com/TolyFx/toly…
TolyUI 官方案例演示网站:toly1994.com/ui


Flutter TolyUI 框架#09 | tolyui_text 轻量高亮文本》 是转载文章,点击查看原文


相关推荐


14.Kotlin 类:类的形态(一):抽象类 (Abstract Class)
Android_小雨2025/11/28

希望帮你在Kotlin进阶路上少走弯路,在技术上稳步提升。当然,由于个人知识储备有限,笔记中难免存在疏漏或表述不当的地方,也非常欢迎大家提出宝贵意见,一起交流进步。 —— Android_小雨 整体目录:Kotlin 进阶不迷路:41 个核心知识点,构建完整知识体系 一、前言 在面向对象编程(OOP)的世界里,我们经常会遇到一种情况:我们能够清晰地描述一类事物的共同特征,但对于某些具体的行为,却无法在父类中给出确切的定义。 1.1 抽象类的核心价值 抽象类(Abstract Class)的核心


Mermaid: AI 时代画图的魔法工具
uzong2025/11/25

1. 掌握 Mermaid:用代码绘制专业图表,让技术表达更高效 随着工作年限增加,画图的需求日渐增多。而一张清晰的图表往往胜过千言万语。大模型(如 GPT、通义千问等)日益普及的今天,通过大模型自动生成 Mermaid 语法代码,再一键渲染成精美图表。 大大节省了日常工作效率,实现10倍效率提升。 2. 什么是 Mermaid? Mermaid 是一个基于 JavaScript 的图表绘制工具,它使用类似于 Markdown 的简单文本语法来创建各种图表。你只需要编写简单的代码,就能自动生成


Python编程实战:Python常用命令速查表(超全整理)
程序员爱钓鱼2025/11/24

在 Python 开发过程中,很多命令与工具操作很容易忘记。无论你是新手还是经验开发者,拥有一份随手可查的“命令速查表”都能显著提升开发效率。 本篇文章总结了 Python、pip、虚拟环境、包管理、文件操作、调试、格式化、性能测试、代码检查 等常用命令,是一份覆盖面非常全面的 Python 开发必备备忘录。 你可以将此文加入收藏夹或做成一页纸随身文档。 1. Python 命令速查 基础命令 用途命令查看 Python 版本pyth


盘点放弃Cursor期间发布的新特性,我再次心动了
小溪彼岸2025/11/22

前言 小伙伴们大家好,我是小溪,见字如面。想想退订Cursor已经三个多月了,退订期间基本上就没有打开过Cursor,一直处于在 Trae、Kiro、CodeBuddy、Qoder 等AI编辑器之间来回切换的状态,对市面上的这些已开启订阅收费的AI编辑器有过期待,更多的是体验过后的心碎,因为到目前为止没有一个AI编辑器赶超我曾经最喜欢的Cursor Tab的。今天无意间打开Cursor,发现Cursor已经更新到 2.0 版本了,想当初我使用的还是 0.49 版本,这个更新速度真是惊人,这次就来


CVPR 2024 目标检测!开放词汇
大模型实验室Lab4AI2025/11/20

CVPR 2024 目标检测!开放词汇 01 论文概述 论文名称:YOLO-World: Real-Time Open-Vocabulary Object Detection 会议名称:CVPR (2024) 👉一键直达论文 👉Lab4AI大模型实验室论文 🌟简介 在相当长的一段时间里,目标检测领域存在一个核心的权衡:要么选择像 YOLO 系列那样拥有极致速度但只能识别固定类别的“闭集”检测器,要么选择像 Grounding DINO 那样能够识别任意文本描述但速度较


软件苹果商城上架的流程与团队协作模式 一个项目从开发到发布的完整经历
aiopencode2025/11/19

在很多技术团队里,“软件苹果商城上架” 常常被安排在项目周期的末尾,甚至被视为上线前的最后一道关卡。 但经历过多次 iOS 上架之后,你会发现——这不是简单的“把 IPA 传上去”,而是一段涉及角色分工、工具链协同、发布审核管理的完整流程。 在这篇文章中,我将以一个真实团队的视角,讲述我们如何把一款跨平台 App 成功上架到苹果商城(App Store),重点分享工程侧如何配合产品、设计、测试等角色,在没有单一 Mac 依赖的情况下完成上架流程。 一、项目收尾阶段:上架并不是“最后一个动作”


Python 的内置函数 type
IMPYLH2025/11/17

Python 内建函数列表 > Python 的内置函数 type Python 的内置函数 type() 是一个非常重要的函数,它主要用于获取对象的类型信息。这个函数有两种主要用法: 单参数调用: 当传入一个参数时,type() 会返回该对象的类型(类)。返回的结果是一个类型对象,通常显示为 <class '类型名称'> 的格式。 示例: print(type(42)) # <class 'int'> print(type("hello")) # <class 's


Python 的内置函数 repr
IMPYLH2025/11/16

Python 内建函数列表 > Python 的内置函数 repr Python 的内置函数 repr() 是一个非常重要的对象字符串表示函数,其主要功能是返回一个对象的"官方"字符串表示形式(通常称为"representation")。这个字符串通常能够被 Python 解释器读取,并尽可能准确地重建该对象。 详细特性: 可重建性原则:repr() 返回的字符串理论上应该能够通过 eval() 函数重新构造出原对象与 str() 的区别:相比 str() 函数返回的可读性字符串,repr


Python 的内置函数 memoryview
IMPYLH2025/11/15

Python 内建函数列表 > Python 的内置函数 memoryview Python 的内置函数 memoryview 是一个用于访问其他二进制序列的内存视图对象,它允许在不复制底层数据的情况下直接操作原始数据。这在处理大型二进制数据(如音频、视频或图像文件)时特别有用,可以显著提升性能并减少内存消耗。 memoryview 的主要特点包括: 零拷贝访问:通过 memoryview 可以直接引用原始数据缓冲区,而不需要创建额外的数据副本。 支持缓冲区协议:可以操作任何支持 Py


Claude Code 深度解析:架构、工作原理与常见误解
袁洛施2025/11/14

Claude Code 深度解析:架构、工作原理与常见误解 本文档基于真实技术对话整理,深入剖析 Claude Code 的真实架构和工作原理 目录 核心问题关键发现架构解析常见误解技术细节 核心问题 Q1: Claude Code 是什么? 问题原文: “究竟什么是 Claude Code?Claude Code CLI 是个命令行终端,最终调用的还是 Anthropic Claude 大语言模型,比如 claude-sonnet-4-5-20250929

首页编辑器站点地图

本站内容在 CC BY-SA 4.0 协议下发布

Copyright © 2025 聚合阅读