Flutter代码高亮显示插件flutter_highlight_extended的使用

Flutter代码高亮显示插件flutter_highlight_extended的使用

介绍

flutter_highlight_extended 是一个用于在 Flutter 应用程序中进行代码高亮显示的插件。该插件允许你轻松地将代码片段以高亮的形式展示出来。

使用方法

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

dependencies:
  flutter:
    sdk: flutter
  flutter_highlight_extended: ^x.x.x

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

以下是一个简单的示例代码,展示了如何使用 flutter_highlight_extended 插件来高亮显示代码:

import 'package:flutter/material.dart';
import 'package:flutter_highlight_extended/flutter_highlight_extended.dart';
import 'package:flutter_highlight_extended/themes/github.dart'; // 导入主题

class MyWidget extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    var code = '''main() {
  print("Hello, World!");
}
'''; // 需要高亮显示的代码

    return HighlightView(
      // 原始代码
      code,

      // 指定语言
      // 性能考虑,建议给它一个值
      language: 'dart',

      // 指定高亮主题
      // 所有可用的主题都列在 `themes` 文件夹中
      theme: githubTheme,

      // 指定填充
      padding: EdgeInsets.all(12),

      // 指定文本样式
      textStyle: TextStyle(
        fontFamily: 'My awesome monospace font',
        fontSize: 16,
      ),
    );
  }
}

完整示例

以下是一个完整的示例代码,展示了一个带有下拉菜单选择语言和主题的页面:

import 'package:flutter/material.dart';
import 'package:flutter_highlight_extended/flutter_highlight_extended.dart';
import 'package:flutter_highlight_extended/themes/a11y_dark.dart'; // 导入主题
import 'package:flutter_highlight_extended/themes/github.dart';

void main() => runApp(MyApp());

final title = 'Flutter Highlight Gallery';

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      title: title,
      home: MyHomePage(),
    );
  }
}

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

class _MyHomePageState extends State<MyHomePage> {
  String language = 'dart';
  String theme = 'a11y-dark';

  Widget _buildMenuContent(String text) {
    return Container(
      padding: EdgeInsets.symmetric(horizontal: 12),
      child: Row(children: [
        Text(text, style: TextStyle(fontSize: 16)),
        Icon(Icons.arrow_drop_down)
      ]),
    );
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(title),
        actions: [
          PopupMenuButton(
            child: _buildMenuContent(language),
            itemBuilder: (context) {
              return ['dart', 'java', 'python'].map((key) {
                return CheckedPopupMenuItem(
                  value: key,
                  child: Text(key),
                  checked: language == key,
                );
              }).toList();
            },
            onSelected: (selected) {
              if (selected != null) {
                setState(() {
                  language = selected;
                });
              }
            },
          ),
          PopupMenuButton<String>(
            child: _buildMenuContent(theme),
            itemBuilder: (context) {
              return ['a11y-dark', 'github', 'material'].map((key) {
                return CheckedPopupMenuItem(
                  value: key,
                  child: Text(key),
                  checked: theme == key,
                );
              }).toList();
            },
            onSelected: (selected) {
              if (selected != null) {
                setState(() {
                  theme = selected;
                });
              }
            },
          ),
          IconButton(
            icon: const Icon(Icons.code),
            tooltip: 'Source Code',
            onPressed: () {
              // 打开源代码链接
              // launch('https://github.com/pd4d10/highlight');
            },
          )
        ],
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            HighlightView(
              // 示例代码
              '''main() {
  print("Hello, World!");
}
''',
              language: language,
              theme: themeMap[theme],
              padding: EdgeInsets.all(12),
              textStyle: TextStyle(
                  fontFamily:
                      'SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace'),
            )
          ],
        ),
      ),
    );
  }
}

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

1 回复

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


flutter_highlight_extended 是一个用于在 Flutter 应用中实现代码高亮显示的插件。它基于 highlight 包,并提供了更多的自定义选项和扩展功能。以下是如何使用 flutter_highlight_extended 插件的步骤:

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 flutter_highlight_extended 的依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_highlight_extended: ^1.0.0  # 请使用最新版本

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

2. 导入包

在 Dart 文件中导入 flutter_highlight_extended 包:

import 'package:flutter_highlight_extended/flutter_highlight_extended.dart';

3. 使用 HighlightView 组件

flutter_highlight_extended 提供了一个 HighlightView 组件,用于显示高亮代码。你可以指定代码的语言、主题、样式等。

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Highlight Extended Example'),
        ),
        body: Center(
          child: HighlightView(
            // 要显示的代码
            'void main() {\n  print("Hello, World!");\n}',
            // 代码的语言
            language: 'dart',
            // 主题
            theme: ThemeMode.light,
            // 代码的样式
            padding: EdgeInsets.all(10),
            textStyle: TextStyle(fontFamily: 'monospace', fontSize: 16),
          ),
        ),
      ),
    );
  }
}

4. 自定义主题和样式

flutter_highlight_extended 允许你自定义代码高亮的主题和样式。你可以通过 theme 参数指定主题,或者通过 textStyle 参数自定义文本样式。

HighlightView(
  'void main() {\n  print("Hello, World!");\n}',
  language: 'dart',
  theme: ThemeMode.dark,  // 使用暗色主题
  padding: EdgeInsets.all(10),
  textStyle: TextStyle(fontFamily: 'monospace', fontSize: 16, color: Colors.white),
),

5. 支持的编程语言

flutter_highlight_extended 支持多种编程语言的高亮显示,包括但不限于:

  • dart
  • java
  • python
  • javascript
  • cpp
  • html
  • css
  • json
  • xml
  • yaml
  • bash
  • markdown

你可以在 language 参数中指定这些语言。

6. 自定义语言支持

如果你需要支持更多的语言,可以通过 flutter_highlight_extended 的扩展功能来实现。你可以自定义语言的语法高亮规则,并将其传递给 HighlightView

7. 更多高级功能

flutter_highlight_extended 还提供了一些高级功能,例如:

  • 自动检测语言:根据代码内容自动检测语言。
  • 自定义高亮规则:定义自己的高亮规则。
  • 动态主题切换:根据应用的主题动态切换代码高亮的主题。

8. 示例代码

以下是一个完整的示例代码,展示了如何使用 flutter_highlight_extended 插件:

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Highlight Extended Example'),
        ),
        body: Center(
          child: HighlightView(
            'void main() {\n  print("Hello, World!");\n}',
            language: 'dart',
            theme: ThemeMode.light,
            padding: EdgeInsets.all(10),
            textStyle: TextStyle(fontFamily: 'monospace', fontSize: 16),
          ),
        ),
      ),
    );
  }
}
回到顶部