Flutter显示markdown中的代码高亮

众所周知,程序员写博客一般都是使用markdown格式。

今天遇到一个需求,在flutter上显示markdown文件。盲猜flutter肯定有markdown的库

pub上一搜,果然有

安装flutter_markdown

flutter_markdown: ^0.6.14

使用flutter_markdown

const Markdown(data: "# hello")

只需要一句话,就可以让markdown格式化显示在屏幕上了。

如何使用代码高亮呢?

flutter_markdown这个库,默认没有实现代码高亮,就一个很朴素的白底黑字。

这时候就需要使用到另外两个库

  markdown:
  flutter_highlighter: ^0.1.1
  

实现MarkdownElementBuilder



import 'package:flutter/material.dart';
import 'package:flutter_highlighter/flutter_highlighter.dart';
import 'package:flutter_highlighter/themes/github.dart';
import 'package:flutter_markdown/flutter_markdown.dart';
import 'package:markdown/markdown.dart' as md;

class CodeHightLightView extends StatefulWidget {
  final String content;

  final String lang;

  const CodeHightLightView(
      {super.key, required this.content, required this.lang});

  
  State<CodeHightLightView> createState() => _CodeHightLightViewState();
}

class _CodeHightLightViewState extends State<CodeHightLightView> {
  
  Widget build(BuildContext context) {
    return HighlightView(
      // The original code to be highlighted
      widget.content,

      // Specify language
      // It is recommended to give it a value for performance
      language: widget.lang,

      // Specify highlight theme
      // All available themes are listed in `themes` folder
      theme: githubTheme,

      // Specify padding
      padding: const EdgeInsets.all(8),

      // Specify text style
      textStyle: const TextStyle(
        fontSize: 14,
      ),
    );
  }
}

class CodeElementBuilder extends MarkdownElementBuilder {
  
  Widget? visitElementAfter(md.Element element, TextStyle? preferredStyle) {
    var language = '';
    if (element.attributes['class'] != null) {
      String lg = element.attributes['class'] as String;
      language = lg.substring(9);
    }
    return CodeHightLightView(
      content: element.textContent,
      lang: language,
    );
  }
}

注册这个builder到markdown库

builders: {"code": CodeElementBuilder()},

到此,就可以正常高亮显示markdown中的代码了。

image

欢迎和我交流flutter的技术,我的博客园主页 https://www.cnblogs.com/boxrice/

posted on   快乐海盗  阅读(1082)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示