成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

開發(fā) 前端
TextField? 將其樣式傳遞給 TextEditingController? ,默認(rèn)實現(xiàn)只是將其放入 TextSpan 對象中,這就是通常應(yīng)用顏色的方式。

TextField widget 本身并不施加任何樣式。相反,它會要求 TextEditingController 生成一個樣式化的 TextSpan 對象,即一段帶有樣式的文本。

圖片圖片

TextField 將其樣式傳遞給 TextEditingController ,默認(rèn)實現(xiàn)只是將其放入 TextSpan 對象中,這就是通常應(yīng)用顏色的方式。

要重載該方法,請子類化 TextEditingController 并重載該方法:

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);
  }
}

圖片圖片

請參閱此處的完整代碼。

https://gist.github.com/alexeyinkin/ee65ed81913c8962c2d19e28e11cb262

你可以進(jìn)行更復(fù)雜的處理。例如,我們通過解析語法樹并對關(guān)鍵字、字面量、注釋等進(jìn)行不同的著色,來制作代碼高亮:

圖片圖片

我們首先導(dǎo)入為另一個項目制作的 highlighting 和 flutter_highlighting 包:

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

然后我們解析文本并得到語法樹的簡單形式:

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,
      ),
    );
  }
  // ...

接下來是遍歷語法樹并為每個節(jié)點返回 TextSpan :

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,
    );
  }

請參閱此處的完整代碼。

https://gist.github.com/alexeyinkin/bff79a057cbf04ecd5166243d06f1d44

因此,TextEditingController 類是實現(xiàn)各種自定義功能的大門。我們在這條路上走得更遠(yuǎn),并制作了一個可以做到這一點的高級代碼編輯器:

圖片圖片

如果您有興趣,請查看這里。

https://medium.com/akvelon/flutter-code-editor-19e0090a62cc

原文:https://medium.com/akvelon/how-to-make-textfield-in-multiple-colors-in-flutter-c317ae0efafe

責(zé)任編輯:武曉燕 來源: 獨立開發(fā)者張張
相關(guān)推薦

2017-03-09 19:32:22

LinuxWindowsUSB

2022-09-22 06:53:02

FreeDOSLinux

2020-06-08 11:50:38

GIMPGIF應(yīng)用

2022-02-23 16:56:43

Python多渠道歸因模型數(shù)據(jù)驅(qū)動

2022-05-31 08:49:02

Flutter應(yīng)用程序前端

2020-06-30 08:55:29

Vim文本編輯器Linux

2023-06-07 10:41:43

2020-06-15 18:40:15

Ubuntu 20.0文件夾顏色Ubuntu

2009-10-21 17:03:05

VB實例教程

2018-02-24 16:30:49

LinuxUnixBash

2012-09-28 10:31:42

微軟LogoWindows

2017-10-22 16:10:08

windows 10顏色篩選器系統(tǒng)

2011-08-09 15:25:00

Windows7

2024-07-11 11:40:23

Flutter2D視圖

2021-12-06 16:20:38

Flutter開發(fā)Linux

2012-09-28 10:45:33

微軟Logo

2023-06-21 14:47:47

Bash

2011-05-31 15:56:52

游戲啟動菜單Android

2018-10-30 09:00:00

神經(jīng)網(wǎng)絡(luò)AI人工智能

2022-11-22 08:24:28

UbuntuLinux命令
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 九九视频在线观看 | 国产精品视频 | 中文字字幕在线中文乱码范文 | 久久av一区二区三区 | 欧美精品成人影院 | 在线一区视频 | www.啪啪.com| 中文字幕人成人 | 91亚洲免费 | 69av在线视频 | 国产激情在线观看 | 国产高清视频在线观看 | 欧美一级欧美三级在线观看 | 欧美13videosex性极品 | 亚洲激情综合 | 日韩视频在线免费观看 | 欧美久久视频 | 精品国产一区一区二区三亚瑟 | 欧美一区二区在线播放 | 欧美日在线| 亚洲一区二区视频 | 四季久久免费一区二区三区四区 | 精品免费av | 亚洲天堂中文字幕 | 91成人影院 | 午夜影院 | 在线色网址 | 亚洲一区二区 | 国产高清久久久 | 欧美激情一区二区三级高清视频 | 在线日韩不卡 | 99精品国产一区二区三区 | 中文字幕成人 | 日韩三级一区 | 久久伊 | 国产a视频 | 超碰电影| 91精品久久久久久久久中文字幕 | 国产精品一区二区三区在线 | 欧美日韩中文国产一区发布 | 国产亚洲日本精品 |