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

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

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

介绍

flutter_syntax_view 是一个用于Flutter应用程序中的代码高亮显示插件,它可以帮助开发者在应用中展示带有语法高亮效果的代码片段。以下是该插件的详细介绍、用法示例以及支持的语言和主题。

使用方法

引入依赖

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

dependencies:
  flutter_syntax_view: ^最新版本号

然后执行flutter pub get来安装这个包。

示例代码

以下是一个完整的Dart代码示例,展示了如何使用flutter_syntax_view来创建一个包含不同样式主题的代码高亮视图的应用程序。

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

void main() => runApp(const App());

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

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      home: MyApp(),
      debugShowCheckedModeBanner: false,
      title: "Flutter Syntax View Example",
    );
  }
}

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

  @override
  State<StatefulWidget> createState() => MyAppState();
}

class MyAppState extends State<MyApp> {
  static const String code = r"""
import 'dart:math' as math;

// Coffee class is the best!
class Coffee {
  late int _temperature;

  void heat() => _temperature = 100;
  void chill() => _temperature = -5;

  void sip() {
    final bool isTooHot = math.max(37, _temperature) > 37;
    if (isTooHot)
      print("myyy liiips!");
    else
      print("mmmmm refreshing!");
  }

  int? get temperature => temperature;
}
void main() {
  var coffee = Coffee();
  coffee.heat();
  coffee.sip();
  coffee.chill();
  coffee.sip();
}
/* And there
        you have it */""";

  static final syntaxViews = {
    "Standard": SyntaxView(
      code: code,
      syntax: Syntax.DART,
      syntaxTheme: SyntaxTheme.standard(),
      fontSize: 12.0,
      withZoom: true,
      withLinesCount: true,
      expanded: true,
      selectable: true,
    ),
    "Dracula": SyntaxView(
      code: code,
      syntax: Syntax.DART,
      syntaxTheme: SyntaxTheme.dracula(),
      fontSize: 12.0,
      withZoom: true,
      withLinesCount: false,
      expanded: false,
      selectable: true,
    ),
    "AyuLight": SyntaxView(
      code: code,
      syntax: Syntax.DART,
      syntaxTheme: SyntaxTheme.ayuLight(),
      fontSize: 12.0,
      withZoom: false,
      withLinesCount: true,
      expanded: true,
    ),
    "AyuDark": SyntaxView(
      code: code,
      syntax: Syntax.DART,
      syntaxTheme: SyntaxTheme.ayuDark(),
      fontSize: 12.0,
      withZoom: true,
      withLinesCount: false,
      expanded: false,
    ),
    "GravityLight": SyntaxView(
      code: code,
      syntax: Syntax.DART,
      syntaxTheme: SyntaxTheme.gravityLight(),
      fontSize: 12.0,
      withZoom: true,
      withLinesCount: true,
      expanded: true,
    ),
    "GravityDark": SyntaxView(
        code: code,
        syntax: Syntax.DART,
        syntaxTheme: SyntaxTheme.gravityDark(),
        fontSize: 12.0,
        withZoom: false,
        withLinesCount: false,
        expanded: false,
        selectable: true),
    "MonokaiSublime": SyntaxView(
        code: code,
        syntax: Syntax.DART,
        syntaxTheme: SyntaxTheme.monokaiSublime(),
        fontSize: 12.0,
        withZoom: true,
        withLinesCount: true,
        expanded: true,
        selectable: true),
    "Obsidian": SyntaxView(
        code: code,
        syntax: Syntax.DART,
        syntaxTheme: SyntaxTheme.obsidian(),
        fontSize: 12.0,
        withZoom: true,
        withLinesCount: true,
        expanded: false,
        selectable: true),
    "OceanSunset": SyntaxView(
      code: code,
      syntax: Syntax.DART,
      syntaxTheme: SyntaxTheme.oceanSunset(),
      fontSize: 12.0,
      withZoom: false,
      withLinesCount: true,
      expanded: true,
      selectable: true,
    ),
    "vscodeDark": SyntaxView(
        code: code,
        syntax: Syntax.DART,
        syntaxTheme: SyntaxTheme.vscodeDark(),
        fontSize: 12.0,
        withZoom: true,
        withLinesCount: true,
        expanded: false,
        selectable: true),
    "vscodeLight": SyntaxView(
        code: code,
        syntax: Syntax.DART,
        syntaxTheme: SyntaxTheme.vscodeLight(),
        fontSize: 12.0,
        withZoom: true,
        withLinesCount: true,
        expanded: true,
        selectable: true)
  };

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text("Flutter Syntax View Example"),
        backgroundColor: Colors.blueGrey[800],
        elevation: 6,
      ),
      body: ListView.builder(
          padding: const EdgeInsets.all(8),
          itemCount: syntaxViews.length,
          itemBuilder: (BuildContext context, int index) {
            String themeName = syntaxViews.keys.elementAt(index);
            SyntaxView syntaxView = syntaxViews.values.elementAt(index);
            return Card(
              margin: const EdgeInsets.all(10),
              elevation: 6.0,
              child: Column(
                children: [
                  Padding(
                    padding: const EdgeInsets.all(3.0),
                    child: Row(
                      mainAxisAlignment: MainAxisAlignment.center,
                      children: [
                        const Icon(Icons.brush_sharp),
                        Text(
                          themeName,
                          style: const TextStyle(fontWeight: FontWeight.bold),
                        ),
                        const Icon(Icons.brush_sharp),
                      ],
                    ),
                  ),
                  const Divider(),
                  if (syntaxView.expanded)
                    SizedBox(
                        height: MediaQuery.of(context).size.height / 2.5,
                        child: syntaxView)
                  else
                    syntaxView
                ],
              ),
            );
          }),
    );
  }
}

在这个例子中,我们定义了一个名为MyApp的应用程序,它通过ListView.builder构建了一个列表项,每个列表项都是一个使用不同主题样式的SyntaxView组件。你可以根据需要调整这些配置参数以适应你的应用场景。

支持的语法

  • ✅ Dart
  • ✅ C
  • ✅ C++
  • ✅ Java
  • ✅ Kotlin
  • ✅ Swift
  • ✅ JavaScript
  • ✅ YAML

主题预览

Ayu Dark Ayu Light Dracula
Ayu Dark Ayu Light Dracula

(更多主题请参见官方文档)

安装与贡献

你可以从Dart Package页面获取更多信息。如果你有兴趣为项目做出贡献,欢迎提交Pull Request或报告问题。

希望这篇文章能够帮助你了解并使用flutter_syntax_view插件。如果有任何疑问或者遇到问题,请随时查阅官方GitHub仓库上的Issue Tracker,也可以直接在这里留言询问。


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

1 回复

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


当然,以下是如何在Flutter项目中集成并使用flutter_syntax_view插件来实现代码高亮显示的示例代码。flutter_syntax_view是一个用于在Flutter应用中显示和高亮代码段的插件。

1. 添加依赖

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

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

然后运行flutter pub get来获取依赖。

2. 导入包

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

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

3. 使用SyntaxView组件

接下来,你可以在你的Flutter应用中使用SyntaxView组件来显示高亮代码。以下是一个完整的示例:

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Syntax Highlight Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Syntax Highlight Demo'),
        ),
        body: Center(
          child: Padding(
            padding: const EdgeInsets.all(16.0),
            child: SyntaxView(
              code: '''
void main() {
  print('Hello, World!');
}
              ''',
              language: 'dart', // 指定代码语言,例如 'dart', 'java', 'python' 等
              theme: SyntaxThemeData(
                // 自定义主题颜色,例如关键字、字符串、注释等的颜色
                keywordColor: Colors.blue,
                stringColor: Colors.green,
                commentColor: Colors.grey,
                // 更多自定义选项...
              ),
            ),
          ),
        ),
      ),
    );
  }
}

4. 运行应用

确保你的开发环境已经设置好,然后运行你的Flutter应用。你应该会看到一个显示高亮Dart代码的屏幕。

注意事项

  • 确保language参数正确指定了代码的语言,以便插件能够正确解析和高亮显示代码。
  • SyntaxThemeData类提供了多种自定义选项,你可以根据需要调整高亮颜色。
  • flutter_syntax_view插件支持的语言可能有限,具体支持的语言请参考插件的官方文档或源代码。

通过上述步骤,你就可以在Flutter应用中集成并使用flutter_syntax_view插件来实现代码高亮显示了。

回到顶部