Flutter文本高亮插件highlighting的使用

Flutter文本高亮插件highlighting的使用

highlighting 是一个用于超过190种语言的代码语法高亮库。

如果你正在寻找适用于Flutter的Widget,可以查看:

此包是将 HighlightJS 项目移植到Dart中。它会定期通过自动脚本从原始JavaScript版本进行更新。

使用方法

import 'package:highlighting/highlighting.dart';
import 'package:highlighting/languages/dart.dart';

void main() {
  final source = '''main() {
  print('Highlighting by Akvelon.');
}
''';

  highlight.registerLanguage(dart);

  final highlighted = highlight.parse(source, languageId: dart.id);
  final html = highlighted.toHtml();
  print(html); // HTML string
}

上述代码展示了如何使用 highlighting 包来解析并高亮一段Dart代码。首先导入必要的库,然后注册所需的编程语言(在这个例子中为Dart),接着解析源代码,并最终将其转换为HTML字符串。

版本和迁移

该包使用了与HighlightJS独立的版本号。例如,版本 0.9.0+11.8.0 表示:

  • Dart包自身的版本为 0.9.0,并且它相对于版本 0.8.x 有重大更改。
  • 从HighlightJS版本 11.8.0 移植而来。

这允许 pub 工具自动防止你遇到破坏性的更改。

迁移指南:

维护者指南

参考资料

完整示例Demo

以下是完整的示例代码,你可以直接在你的Flutter项目中运行它。

// 导入必要的库
import 'package:flutter/material.dart';
import 'package:highlighting/highlighting.dart';
import 'package:highlighting/languages/dart.dart';

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text("Highlighting Demo"),
        ),
        body: Center(
          child: HighlightingText(),
        ),
      ),
    );
  }
}

class HighlightingText extends StatefulWidget {
  [@override](/user/override)
  _HighlightingTextState createState() => _HighlightingTextState();
}

class _HighlightingTextState extends State<HighlightingText> {
  String source = '''
main() {
  print('Highlighting by Akvelon.');
}
''';

  [@override](/user/override)
  void initState() {
    super.initState();
    // 注册Dart语言
    highlight.registerLanguage(dart);
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Container(
      padding: EdgeInsets.all(16.0),
      child: HtmlRenderer(
        html: highlight.parse(source, languageId: dart.id).toHtml(),
      ),
    );
  }
}

// 自定义HtmlRenderer组件用于渲染HTML字符串
class HtmlRenderer extends StatelessWidget {
  final String html;

  HtmlRenderer({required this.html});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Html(data: html);
  }
}

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

1 回复

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


在 Flutter 中,highlighting 是一个用于文本高亮的插件,通常用于代码高亮或其他需要高亮显示特定文本的场景。下面是如何使用 highlighting 插件的基本步骤。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  highlighting: ^1.0.0  # 请检查最新版本

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

2. 导入包

在你的 Dart 文件中导入 highlighting 包:

import 'package:highlighting/highlighting.dart';
import 'package:highlighting/languages/dart.dart';  // 导入你需要的语言

3. 使用 highlight 方法

highlighting 插件的核心方法是 highlight,它可以将输入的文本按照指定的语言进行高亮处理。

void main() {
  // 要高亮的文本
  final code = '''
void main() {
  print("Hello, World!");
}
''';

  // 使用 highlight 方法进行高亮处理
  final highlighted = highlight.parse(code, language: 'dart');

  // 输出高亮后的 HTML 结果
  print(highlighted.toHtml());
}

4. 在 Flutter 中显示高亮文本

如果你想在 Flutter 应用中显示高亮后的文本,可以使用 RichTextTextSpan 来渲染高亮结果。

import 'package:flutter/material.dart';
import 'package:highlighting/highlighting.dart';
import 'package:highlighting/languages/dart.dart';

class HighlightedCode extends StatelessWidget {
  final String code;

  HighlightedCode({required this.code});

  @override
  Widget build(BuildContext context) {
    final highlighted = highlight.parse(code, language: 'dart');

    return RichText(
      text: TextSpan(
        style: DefaultTextStyle.of(context).style,
        children: highlighted.nodes!.map((node) {
          return TextSpan(
            text: node.value,
            style: TextStyle(
              color: node.kind?.color,  // 根据 node.kind 设置颜色
            ),
          );
        }).toList(),
      ),
    );
  }
}

void main() {
  runApp(MaterialApp(
    home: Scaffold(
      appBar: AppBar(title: Text('Highlighted Code')),
      body: HighlightedCode(
        code: '''
void main() {
  print("Hello, World!");
}
''',
      ),
    ),
  ));
}

5. 自定义主题

你可以通过自定义 TextSpan 的样式来调整高亮文本的颜色和样式。node.kind 包含了每个节点的类型(如关键字、字符串、注释等),你可以根据这些类型来设置不同的样式。

6. 支持的语言

highlighting 支持多种编程语言,你可以根据需要导入不同的语言文件。例如:

import 'package:highlighting/languages/python.dart';
import 'package:highlighting/languages/javascript.dart';
回到顶部