Flutter文本高亮插件text_word_highlighter的使用

发布于 1周前 作者 eggper 来自 Flutter

Flutter文本高亮插件text_word_highlighter的使用

text_word_highlighter 提供了一个名为 TextWordHighlighter 的小部件,它可以帮助你在一段文字中高亮(使用文本样式属性)一个或多个单词。

特性

  1. 在句子中高亮多个单词。
  2. 为特定单词提供样式。
  3. 基于索引高亮单词。
  4. 基于单词高亮单词。

使用方法

获取示例文件夹 /example

基于索引高亮

// To highlight by index
// Use WordHighlight.byIndex constructor
TextWordHighlighter(
  text: "Hey Flutter Developers. This is a word highlighter package.",
  textStyle: const TextStyle(color: Colors.teal),
  wordHighlightList: [
    WordHighlight.byIndex(
       wordIndex: 2,
       wordStyle: const TextStyle(
         color: Colors.red)
    ),
    WordHighlight.byIndex(
        wordIndex: 5,
        wordStyle: const TextStyle(
        color: Colors.green,
    )),
    WordHighlight.byIndex(
        wordIndex: 6,
        wordStyle: const TextStyle(
        color: Colors.blue,
    )),
    WordHighlight.byIndex(
        wordIndex: 8,
        wordStyle: const TextStyle(
        color: Colors.orange,
    )),
],
),

基于单词高亮

// Highlight by word
// Use WordHighlight.byWord constructor
TextWordHighlighter(
  text: "Hey Flutter Developers. This is a word highlighter package.",
  textStyle: const TextStyle(color: Colors.teal),
  wordHighlightList: [
    WordHighlight.byWord(
        word: "Flutter",
        wordStyle: const TextStyle(
          color: Colors.red,
        )),
    WordHighlight.byWord(
        word: "THIS",
        ignoreCase: true,
        wordStyle: const TextStyle(
          color: Colors.green,
        )),
    WordHighlight.byWord(
        word: "WORD",
        ignoreCase: false,
        wordStyle: const TextStyle(
          color: Colors.green,
        )),
  ],
),

TextWordHighlighter 属性

属性 描述
TextWordHighlighter 一个小部件,它接受一个句子(字符串形式),并高亮其中的某些部分。
text 简单的句子,以字符串形式表示。
textStyle 文本的样式属性,应用于句子中的所有单词。
wordHighlightList WordHighlight 列表(请参阅 WordHighlight 属性)。

WordHighlight 类

目前有以下两种方式可以高亮单词:

byIndex

通过索引高亮单词时,需要在 WordHighlight.byIndex 构造函数中提供两个参数:

  • wordIndex: 单词的索引。
  • wordStyle: 单词的样式。
WordHighlight.byIndex(
    wordIndex: 8, // 单词的索引
    wordStyle: const TextStyle(
    color: Colors.orange,
)),
byWord

通过单词高亮时,需要在 WordHighlight.byWord 构造函数中提供两个参数:

  • word: 需要高亮的单词。
  • wordStyle: 单词的样式。
  • ignoreCase: [可选] 是否区分大小写,默认为 false
WordHighlight.byWord(
    word: "Flutter",
    wordStyle: const TextStyle(
      color: Colors.red,
    )),

更多功能即将推出

  1. 按字符高亮
  2. 按范围高亮

完整示例代码

以下是完整的示例代码,展示了如何使用 TextWordHighlighter 来高亮单词。

import 'package:flutter/material.dart';
import 'package:text_word_highlighter/text_word_highlighter.dart';
import 'package:text_word_highlighter/utils/word_highlight.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Text Word Highlighter Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(title: 'Text Word Highlighter Demo'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});

  final String title;

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final title = 'Hey Flutter Developers. This is a word highlighter package.';
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.spaceAround,
          children: [
            // When you have the index of the word in the line to be highlighted
            // Use WordHighlight.byIndex constructor
            TextWordHighlighter(
              text: title,
              textStyle: const TextStyle(color: Colors.teal),
              wordHighlightList: [
                WordHighlight.byIndex(
                    wordIndex: 2,
                    wordStyle: const TextStyle(
                      color: Colors.red,
                    )),
                WordHighlight.byIndex(
                    wordIndex: 5,
                    wordStyle: const TextStyle(
                      color: Colors.green,
                    )),
                WordHighlight.byIndex(
                    wordIndex: 6,
                    wordStyle: const TextStyle(
                      color: Colors.blue,
                    )),
                WordHighlight.byIndex(
                    wordIndex: 8,
                    wordStyle: const TextStyle(
                      color: Colors.orange,
                    )),
              ],
            ),

            // Highlight by word
            // Use WordHighlight.byWord constructor
            TextWordHighlighter(
              text: title,
              textStyle: const TextStyle(color: Colors.teal),
              wordHighlightList: [
                WordHighlight.byWord(
                    word: "Flutter",
                    wordStyle: const TextStyle(
                      color: Colors.red,
                    )),
                WordHighlight.byWord(
                    word: "THIS",
                    ignoreCase: true,
                    wordStyle: const TextStyle(
                      color: Colors.green,
                    )),
                WordHighlight.byWord(
                    word: "WORD",
                    ignoreCase: false,
                    wordStyle: const TextStyle(
                      color: Colors.green,
                    )),
              ],
            ),
          ],
        ),
      ),
    );
  }
}

更多关于Flutter文本高亮插件text_word_highlighter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter文本高亮插件text_word_highlighter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter项目中使用text_word_highlighter插件来实现文本高亮的代码示例。这个插件允许你指定一组关键词,并在文本中高亮显示这些关键词。

首先,你需要在你的pubspec.yaml文件中添加text_word_highlighter依赖:

dependencies:
  flutter:
    sdk: flutter
  text_word_highlighter: ^x.y.z  # 请替换为最新版本号

然后运行flutter pub get来安装依赖。

接下来,你可以在你的Flutter应用中使用这个插件。下面是一个完整的示例,展示了如何使用text_word_highlighter

import 'package:flutter/material.dart';
import 'package:text_word_highlighter/text_word_highlighter.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Text Highlighter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: HighlightTextScreen(),
    );
  }
}

class HighlightTextScreen extends StatelessWidget {
  final String text = "Flutter is an open-source UI software development kit created by Google.";
  final List<String> keywords = ["Flutter", "open-source", "Google"];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Text Highlighter Demo'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: HighlightText(
          text: text,
          keywords: keywords,
          textStyle: TextStyle(color: Colors.black),
          keywordStyle: TextStyle(backgroundColor: Colors.yellow, fontWeight: FontWeight.bold),
          keywordBuilder: (String keyword) {
            return TextSpan(
              text: keyword,
              style: TextStyle(backgroundColor: Colors.lightGreen, fontWeight: FontWeight.w600),
            );
          },
        ),
      ),
    ),
  );
  }
}

在这个示例中,我们定义了一个HighlightTextScreen,其中包含一个需要高亮的文本text和一个关键词列表keywordsHighlightText组件负责将文本和关键词传递给text_word_highlighter插件,并应用不同的样式。

HighlightText组件的参数说明:

  • text: 需要高亮的原始文本。
  • keywords: 关键词列表,这些词将在文本中被高亮。
  • textStyle: 非关键词文本的样式。
  • keywordStyle: 关键词的默认样式。
  • keywordBuilder: 一个可选的回调函数,允许你为每个关键词定制样式。在这个示例中,我们为每个关键词应用了一个不同的背景颜色和字体粗细。

运行这个示例应用,你将看到一个包含高亮关键词的文本。你可以根据需要调整样式和关键词列表来适应你的应用需求。

回到顶部