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

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

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

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

图片31p28资讯网——每日最新资讯28at.com

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

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

图片图片31p28资讯网——每日最新资讯28at.com

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

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

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

图片图片31p28资讯网——每日最新资讯28at.com

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

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

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

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

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

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

图片图片31p28资讯网——每日最新资讯28at.com

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

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

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

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

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

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

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

标签:
  • 热门焦点
  • 《英雄联盟》夏季赛总决赛今日开打!JDG对阵LNG首发名单来了 Knight:准备三连冠

    8月5日消息,今日17:00,《英雄联盟》2023LPL夏季赛总决赛将正式开打,由JDG对阵LNG。对两支队伍来说,这场比赛不仅要争夺夏季赛冠军,更要决定谁才是LPL赛区一
  • 只需五步,使用start.spring.io快速入门Spring编程

    步骤1打开https://start.spring.io/,按照屏幕截图中的内容创建项目,添加 Spring Web 依赖项,并单击“生成”按钮下载 .zip 文件,为下一步做准备。请在进入步骤2之前进行解压。图
  • 三分钟白话RocketMQ系列—— 如何发送消息

    我们知道RocketMQ主要分为消息 生产、存储(消息堆积)、消费 三大块领域。那接下来,我们白话一下,RocketMQ是如何发送消息的,揭秘消息生产全过程。注意,如果白话中不小心提到相关代
  • 微软邀请 Microsoft 365 商业用户,测试视频编辑器 Clipchamp

    8 月 1 日消息,微软近日宣布即将面向 Microsoft 365 商业用户,开放 Clipchamp 应用,邀请用户通过该应用来编辑视频。微软于 2021 年收购 Clipchamp,随后开始逐步整合到 Microsof
  • 破圈是B站头上的紧箍咒

    来源 | 光子星球撰文 | 吴坤谚编辑 | 吴先之每年的暑期档都少不了瞄准追剧女孩们的古偶剧集,2021年有优酷的《山河令》,2022年有爱奇艺的《苍兰诀》,今年却轮到小破站抓住了追
  • “又被陈思诚骗了”

    作者|张思齐 出品|众面(ID:ZhongMian_ZM)如今的国产悬疑电影,成了陈思诚的天下。最近大爆电影《消失的她》票房突破30亿断层夺魁暑期档,陈思诚再度风头无两。你可以说陈思诚的
  • 消费结构调整丨巨头低价博弈,拼多多还卷得动吗?

    来源:征探财经作者:陈香羽随着流量红利的退潮,电商的存量博弈越来越明显。曾经主攻中高端与品质的淘宝天猫、京东重拾&ldquo;低价&rdquo;口号。而过去与他们错位竞争的拼多多,靠
  • 年轻人的“职场羞耻感”,无处不在

    作者:冯晓亭 陶 淘 李 欣 张 琳 马舒叶来源:燃次元&ldquo;人在职场,应该选择什么样的着装?&rdquo;近日,在网络上,一个与着装相关的帖子引发关注,在该帖子里,一位在高级写字楼亚洲金
  • 英特尔Xe HPG游戏显卡:拥有512EU,单风扇版本

    据10 月 30 日外媒 TheVerge 消息报道,英特尔 Xe HPG Arc Alchemist 的正面实被曝光,不仅拥有 512 EU 版显卡,还拥有 128EU 的单风扇版本。另外,这款显卡 PCB
Top