日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁 > 科技  > 軟件

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

來源: 責(zé)編: 時(shí)間:2024-04-19 17:28:41 206觀看
導(dǎo)讀TextField widget 本身并不施加任何樣式。相反,它會(huì)要求 TextEditingController 生成一個(gè)樣式化的 TextSpan 對(duì)象,即一段帶有樣式的文本。TextField 將其樣式傳遞給 TextEditingController ,默認(rèn)實(shí)現(xiàn)只是將其放入 TextSp

TextField widget 本身并不施加任何樣式。相反,它會(huì)要求 TextEditingController 生成一個(gè)樣式化的 TextSpan 對(duì)象,即一段帶有樣式的文本。fTX28資訊網(wǎng)——每日最新資訊28at.com

圖片fTX28資訊網(wǎng)——每日最新資訊28at.com

TextField 將其樣式傳遞給 TextEditingController ,默認(rèn)實(shí)現(xiàn)只是將其放入 TextSpan 對(duì)象中,這就是通常應(yīng)用顏色的方式。fTX28資訊網(wǎng)——每日最新資訊28at.com

要重載該方法,請(qǐng)子類化 TextEditingController 并重載該方法:fTX28資訊網(wǎng)——每日最新資訊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);  }}

圖片圖片fTX28資訊網(wǎng)——每日最新資訊28at.com

請(qǐng)參閱此處的完整代碼。fTX28資訊網(wǎng)——每日最新資訊28at.com

https://gist.github.com/alexeyinkin/ee65ed81913c8962c2d19e28e11cb262fTX28資訊網(wǎng)——每日最新資訊28at.com

你可以進(jìn)行更復(fù)雜的處理。例如,我們通過解析語法樹并對(duì)關(guān)鍵字、字面量、注釋等進(jìn)行不同的著色,來制作代碼高亮:fTX28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片fTX28資訊網(wǎng)——每日最新資訊28at.com

我們首先導(dǎo)入為另一個(gè)項(xiàng)目制作的 highlighting 和 flutter_highlighting 包:fTX28資訊網(wǎng)——每日最新資訊28at.com

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

然后我們解析文本并得到語法樹的簡單形式:fTX28資訊網(wǎng)——每日最新資訊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,      ),    );  }  // ...

接下來是遍歷語法樹并為每個(gè)節(jié)點(diǎn)返回 TextSpan :fTX28資訊網(wǎng)——每日最新資訊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,    );  }

請(qǐng)參閱此處的完整代碼。fTX28資訊網(wǎng)——每日最新資訊28at.com

https://gist.github.com/alexeyinkin/bff79a057cbf04ecd5166243d06f1d44fTX28資訊網(wǎng)——每日最新資訊28at.com

因此,TextEditingController 類是實(shí)現(xiàn)各種自定義功能的大門。我們?cè)谶@條路上走得更遠(yuǎn),并制作了一個(gè)可以做到這一點(diǎn)的高級(jí)代碼編輯器:fTX28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片fTX28資訊網(wǎng)——每日最新資訊28at.com

如果您有興趣,請(qǐng)查看這里。fTX28資訊網(wǎng)——每日最新資訊28at.com

https://medium.com/akvelon/flutter-code-editor-19e0090a62ccfTX28資訊網(wǎng)——每日最新資訊28at.com

原文:https://medium.com/akvelon/how-to-make-textfield-in-multiple-colors-in-flutter-c317ae0efafefTX28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-84196-0.html花里胡哨,如何在 Flutter 中制作多種顏色的 TextField

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: 20款 Visual Studio 實(shí)用插件推薦

下一篇: Python編程必備:return和print的實(shí)際用途

標(biāo)簽:
  • 熱門焦點(diǎn)
Top 主站蜘蛛池模板: 柘荣县| 乐山市| 朔州市| 勐海县| 永兴县| 资阳市| 崇左市| 揭东县| 绥化市| 家居| 溧水县| 如皋市| 习水县| 保定市| 蚌埠市| 驻马店市| 循化| 雅安市| 年辖:市辖区| 夏津县| 松阳县| 郯城县| 湘阴县| 四子王旗| 怀安县| 句容市| 朝阳县| 阿拉尔市| 丰台区| 宜君县| 青川县| 宁都县| 新河县| 永春县| 古浪县| 洪泽县| 开原市| 文登市| 襄汾县| 北海市| 察隅县|