当前位置:首页 > 科技  > 软件

花里胡哨,如何在 Flutter 中制作多种颜色的 TextField

来源: 责编: 时间:2024-04-19 17:28:41 315观看
导读TextField widget 本身并不施加任何样式。相反,它会要求 TextEditingController 生成一个样式化的 TextSpan 对象,即一段带有样式的文本。TextField 将其样式传递给 TextEditingController ,默认实现只是将其放入 TextSp

TextField widget 本身并不施加任何样式。相反,它会要求 TextEditingController 生成一个样式化的 TextSpan 对象,即一段带有样式的文本。5fD28资讯网——每日最新资讯28at.com

图片5fD28资讯网——每日最新资讯28at.com

TextField 将其样式传递给 TextEditingController ,默认实现只是将其放入 TextSpan 对象中,这就是通常应用颜色的方式。5fD28资讯网——每日最新资讯28at.com

要重载该方法,请子类化 TextEditingController 并重载该方法:5fD28资讯网——每日最新资讯28at.com

class GradientTextEditingController extends TextEditingController {  @override  TextSpan buildTextSpan({    required BuildContext context,    TextStyle? style,    bool? withComposing,  }) {    style ??= const TextStyle();    final leftStyle = style.copyWith(color: Colors.red);    final rightStyle = style.copyWith(color: Colors.indigo);    final children = <TextSpan>[];    for (final char in text.characters) {      children.add(        TextSpan(          text: char,          style: TextStyle.lerp(            leftStyle,            rightStyle,            children.length / text.length,          ),        ),      );    }    return TextSpan(style: style, children: children);  }}

图片图片5fD28资讯网——每日最新资讯28at.com

请参阅此处的完整代码。5fD28资讯网——每日最新资讯28at.com

https://gist.github.com/alexeyinkin/ee65ed81913c8962c2d19e28e11cb2625fD28资讯网——每日最新资讯28at.com

你可以进行更复杂的处理。例如,我们通过解析语法树并对关键字、字面量、注释等进行不同的着色,来制作代码高亮:5fD28资讯网——每日最新资讯28at.com

图片图片5fD28资讯网——每日最新资讯28at.com

我们首先导入为另一个项目制作的 highlighting 和 flutter_highlighting 包:5fD28资讯网——每日最新资讯28at.com

import 'package:flutter_highlighting/themes/vs.dart';import 'package:highlighting/highlighting.dart';import 'package:highlighting/languages/java.dart';

然后我们解析文本并得到语法树的简单形式:5fD28资讯网——每日最新资讯28at.com

class SyntaxTextEditingController extends TextEditingController {  @override  TextSpan buildTextSpan({    required BuildContext context,    TextStyle? style,    bool? withComposing,  }) {    final highlighted = highlight.parse(text, languageId: java.id);    return TextSpan(      style: style,      children: _buildList(        nodes: highlighted.nodes,        styles: vsTheme, // Built-in theme from flutter_highlighting        ancestorStyle: style,      ),    );  }  // ...

接下来是遍历语法树并为每个节点返回 TextSpan :5fD28资讯网——每日最新资讯28at.com

List<TextSpan>? _buildList({    required List<Node>? nodes,    required Map<String, TextStyle> styles,    TextStyle? ancestorStyle,  }) {    return nodes        ?.map(          (node) => _buildNode(            node: node,            styles: styles,            ancestorStyle: ancestorStyle,          ),        )        .toList(growable: false);  }  TextSpan _buildNode({    required Node node,    required Map<String, TextStyle> styles,    TextStyle? ancestorStyle,  }) {    final style = styles[node.className] ?? ancestorStyle;    return TextSpan(      text: node.value,      children: _buildList(        nodes: node.children,        styles: styles,        ancestorStyle: style,      ),      style: style,    );  }

请参阅此处的完整代码。5fD28资讯网——每日最新资讯28at.com

https://gist.github.com/alexeyinkin/bff79a057cbf04ecd5166243d06f1d445fD28资讯网——每日最新资讯28at.com

因此,TextEditingController 类是实现各种自定义功能的大门。我们在这条路上走得更远,并制作了一个可以做到这一点的高级代码编辑器:5fD28资讯网——每日最新资讯28at.com

图片图片5fD28资讯网——每日最新资讯28at.com

如果您有兴趣,请查看这里。5fD28资讯网——每日最新资讯28at.com

https://medium.com/akvelon/flutter-code-editor-19e0090a62cc5fD28资讯网——每日最新资讯28at.com

原文:https://medium.com/akvelon/how-to-make-textfield-in-multiple-colors-in-flutter-c317ae0efafe5fD28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-84196-0.html花里胡哨,如何在 Flutter 中制作多种颜色的 TextField

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 20款 Visual Studio 实用插件推荐

下一篇: Python编程必备:return和print的实际用途

标签:
  • 热门焦点
  • K60 Pro官方停产 第三方瞬间涨价

    虽然没有官方宣布,但Redmi的一些高管也已经透露了,Redmi K60 Pro已经停产且不会补货,这一切都是为了即将到来的K60 Ultra铺路,属于厂家的正常操作。但有意思的是该机在停产之后
  • Redmi Pad评测:红米充满野心的一次尝试

    从Note系列到K系列,从蓝牙耳机到笔记本电脑,红米不知不觉之间也已经形成了自己颇有竞争力的产品体系,在中端和次旗舰市场上甚至要比小米新机的表现来得更好,正所谓“大丈夫生居
  • 服务存储设计模式:Cache-Aside模式

    Cache-Aside模式一种常用的缓存方式,通常是把数据从主存储加载到KV缓存中,加速后续的访问。在存在重复度的场景,Cache-Aside可以提升服务性能,降低底层存储的压力,缺点是缓存和底
  • 如何使用JavaScript创建一只图像放大镜?

    译者 | 布加迪审校 | 重楼如果您曾经浏览过购物网站,可能遇到过图像放大功能。它可以让您放大图像的特定区域,以便浏览。结合这个小小的重要功能可以大大改善您网站的用户体验
  • JavaScript学习 -AES加密算法

    引言在当今数字化时代,前端应用程序扮演着重要角色,用户的敏感数据经常在前端进行加密和解密操作。然而,这样的操作在网络传输和存储中可能会受到恶意攻击的威胁。为了确保数据
  • 使用AIGC工具提升安全工作效率

    在日常工作中,安全人员可能会涉及各种各样的安全任务,包括但不限于:开发某些安全工具的插件,满足自己特定的安全需求;自定义github搜索工具,快速查找所需的安全资料、漏洞poc、exp
  • 共享单车的故事讲到哪了?

    来源丨海克财经与共享充电宝相差不多,共享单车已很久没有被国内热点新闻关照到了。除了一再涨价和用户直呼用不起了。近日多家媒体再发报道称,成都、天津、郑州等地多个共享单
  • 拼多多APP上线本地生活入口,群雄逐鹿万亿市场

    Tech星球(微信ID:tech618)文 | 陈桥辉 Tech星球独家获悉,拼多多在其APP内上线了&ldquo;本地生活&rdquo;入口,位置较深,位于首页的&ldquo;充值中心&rdquo;内,目前主要售卖美食相关的
  • DRAM存储器10月价格下跌,NAND闪存本月价格与上月持平

    10月30日,据韩国媒体消息,自今年年初以来一直在上涨的 DRAM 存储器的交易价格仅在本月就下跌了近 10%,此次是全年首次降价,而NAND 闪存本月价格与上月持平。市
Top