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

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

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

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

图片0hP28资讯网——每日最新资讯28at.com

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

要重载该方法,请子类化 TextEditingController 并重载该方法:0hP28资讯网——每日最新资讯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);  }}

图片图片0hP28资讯网——每日最新资讯28at.com

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

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

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

图片图片0hP28资讯网——每日最新资讯28at.com

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

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

然后我们解析文本并得到语法树的简单形式:0hP28资讯网——每日最新资讯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 :0hP28资讯网——每日最新资讯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,    );  }

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

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

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

图片图片0hP28资讯网——每日最新资讯28at.com

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

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

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

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

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

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

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

标签:
  • 热门焦点
  • 直屏旗舰来了 iQOO 12和K70 Pro同台竞技

    旗舰机基本上使用的都是双曲面屏幕,这就让很多喜欢直屏的爱好者在苦等一款直屏旗舰,这次,你们等到了。据博主数码闲聊站带来的最新爆料称,Redmi下代旗舰K70 Pro和iQOO 12两款手
  • 7月安卓手机性价比榜:努比亚+红魔两款新机入榜

    7月登场的新机有努比亚Z50S Pro和红魔8S Pro,除了三星之外目前唯二的两款搭载超频版骁龙8Gen2处理器的产品,而且努比亚和红魔也一贯有着不错的性价比,所以在本次的性价比榜单
  • K8S | Service服务发现

    一、背景在微服务架构中,这里以开发环境「Dev」为基础来描述,在K8S集群中通常会开放:路由网关、注册中心、配置中心等相关服务,可以被集群外部访问;图片对于测试「Tes」环境或者
  • 分布式系统中的CAP理论,面试必问,你理解了嘛?

    对于刚刚接触分布式系统的小伙伴们来说,一提起分布式系统,就感觉高大上,深不可测。而且看了很多书和视频还是一脸懵逼。这篇文章主要使用大白话的方式,带你理解一下分布式系统
  • .NET 程序的 GDI 句柄泄露的再反思

    一、背景1. 讲故事上个月我写过一篇 如何洞察 C# 程序的 GDI 句柄泄露 文章,当时用的是 GDIView + WinDbg 把问题搞定,前者用来定位泄露资源,后者用来定位泄露代码,后面有朋友反
  • 微软邀请 Microsoft 365 商业用户,测试视频编辑器 Clipchamp

    8 月 1 日消息,微软近日宣布即将面向 Microsoft 365 商业用户,开放 Clipchamp 应用,邀请用户通过该应用来编辑视频。微软于 2021 年收购 Clipchamp,随后开始逐步整合到 Microsof
  • 当家的盒马,加速谋生

    来源 | 价值星球Planet作者 | 归去来自己&ldquo;当家&rdquo;的盒马,开始加速谋生了。据盒马官微消息,盒马计划今年开放生鲜供应链,将其生鲜商品送往食堂。目前,盒马在上海已经与
  • 余承东:AI大模型技术的发展将会带来下一代智能终端操作系统的智慧体验

    8月4日消息,2023年华为开发者大会(HDC.Together)今天正式开幕,华为发布HarmonyOS 4、全新升级的鸿蒙开发套件、HarmonyOS Next开发者预览版本等一系列
  • 荣耀Magic4 至臻版 首创智慧隐私通话 强劲影音系统

    2022年第一季度临近尾声,在该季度内,许多品牌陆续发布自己的最新产品,让大家从全新的角度来了解当今的手机技术。手机是电子设备中,更新迭代十分迅速的一款产品,基
Top