Flutter Markdown渲染插件markdown_viewer的使用
Flutter Markdown渲染插件markdown_viewer的使用
Markdown Viewer
一个用于Flutter的Markdown查看器小部件。它可以将Markdown字符串渲染为富文本输出。
查看此截图的源代码 这里
使用方法
以下是一个简单的Markdown Viewer组件的使用示例:
MarkdownViewer(
'Hello **Markdown**!',
enableTaskList: true,
enableSuperscript: false,
enableSubscript: false,
enableFootnote: false,
enableImageSize: false,
enableKbd: false,
syntaxExtensions: const [],
elementBuilders: const [],
);
如何创建语法扩展
下面是一个创建自定义语法扩展的示例:
class ExampleSyntax extends MdInlineSyntax {
ExampleSyntax() : super(RegExp(r'#[^#]+?(?=\s+|$)'));
[@override](/user/override)
MdInlineObject? parse(MdInlineParser parser, Match match) {
final markers = [parser.consume()];
final content = parser.consumeBy(match[0]!.length - 1);
return MdInlineElement(
'example',
markers: markers,
children: content.map((e) => MdText.fromSpan(e)).toList(),
);
}
}
如何创建元素构建器
下面是一个创建自定义元素构建器的示例:
class ExampleBuilder extends MarkdownElementBuilder {
ExampleBuilder()
: super(
textStyle: const TextStyle(
color: Colors.green,
decoration: TextDecoration.underline,
),
);
[@override](/user/override)
bool isBlock(element) => false;
[@override](/user/override)
List<String> matchTypes = ['example'];
}
完整示例代码
以下是一个完整的示例代码,展示了如何在Flutter应用中使用Markdown Viewer组件:
// ignore_for_file: avoid_print
import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
import 'package:flutter_prism/flutter_prism.dart';
import 'package:markdown_viewer/markdown_viewer.dart';
import 'extension.dart';
const markdown = r'''
## Markdown example
Hello **Markdown**!
### Highlights
- [x] ==100%== conform to CommonMark.
- [x] ==100%== conform to GFM.
- [x] Easy to implement syntax **highlighting**, for example `flutter_prism`:
```dart
// Dart language.
void main() {
print('Hello, World!');
}
- [x] Easy to custom, for example: > This is a #custom_extension
Dependencies
Name | Required |
---|---|
dart_markdown |
Yes |
flutter_prism |
No |
‘’’;
void main() { runApp(const MyApp()); }
class MyApp extends StatelessWidget { const MyApp({Key? key}) : super(key: key);
@override Widget build(BuildContext context) { return MaterialApp( theme: ThemeData.light(), darkTheme: ThemeData.dark(), title: ‘MarkdownViewer Demo’, debugShowCheckedModeBanner: false, home: const MyHomePage(), scrollBehavior: CustomScrollBehavior(), ); } }
class MyHomePage extends StatelessWidget { const MyHomePage({Key? key}) : super(key: key);
@override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: const Text(‘MarkdownViewer Demo’)), body: SingleChildScrollView( padding: const EdgeInsets.all(20), child: MarkdownViewer( markdown, enableTaskList: true, enableSuperscript: false, enableSubscript: false, enableFootnote: false, enableImageSize: false, enableKbd: false, syntaxExtensions: [ExampleSyntax()], highlightBuilder: (text, language, infoString) { final prism = Prism( mouseCursor: SystemMouseCursors.text, style: Theme.of(context).brightness == Brightness.dark ? const PrismStyle.dark() : const PrismStyle(), ); return prism.render(text, language ?? ‘plain’); }, onTapLink: (href, title) { print({href, title}); }, elementBuilders: [ ExampleBuilder(), ], styleSheet: const MarkdownStyle( listItemMarkerTrailingSpace: 12, codeSpan: TextStyle( fontFamily: ‘RobotoMono’, ), codeBlock: TextStyle( fontSize: 14, letterSpacing: -0.3, fontFamily: ‘RobotoMono’, ), ), ), ), ); } }
class CustomScrollBehavior extends MaterialScrollBehavior { @override Set<PointerDeviceKind> get dragDevices => { PointerDeviceKind.touch, PointerDeviceKind.mouse, }; }
更多关于Flutter Markdown渲染插件markdown_viewer的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter Markdown渲染插件markdown_viewer的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter中使用markdown_viewer
插件来渲染Markdown内容的示例代码。这个示例将展示如何集成markdown_viewer
插件并渲染一个简单的Markdown字符串。
首先,确保你已经在pubspec.yaml
文件中添加了markdown_viewer
依赖:
dependencies:
flutter:
sdk: flutter
markdown_viewer: ^0.5.0 # 请检查最新版本号
然后,运行flutter pub get
来安装依赖。
接下来,你可以在你的Flutter应用中使用MarkdownViewer
小部件来渲染Markdown内容。以下是一个完整的示例代码:
import 'package:flutter/material.dart';
import 'package:markdown_viewer/markdown_viewer.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Markdown Viewer Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MarkdownViewerScreen(),
);
}
}
class MarkdownViewerScreen extends StatelessWidget {
final String markdownData = """
# 这是一个标题
这是一些普通的文本。
- 列表项1
- 列表项2
- 列表项3
```dart
void main() {
print('Hello, World!');
}
“”";
@override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text(‘Markdown Viewer Demo’), ), body: Padding( padding: const EdgeInsets.all(16.0), child: MarkdownViewer( markdownData: markdownData, styleSheet: MarkdownStyleSheet( h1: TextStyle(fontSize: 24, fontWeight: FontWeight.bold), p: TextStyle(fontSize: 16), codeBlock: TextStyle(fontSize: 14, backgroundColor: Colors.grey[200]), a: TextStyle(color: Colors.blue, decoration: TextDecoration.underline), img: ImageStyle(width: double.infinity), ), ), ), ); } }
在这个示例中,我们做了以下几件事情:
1. 在`pubspec.yaml`文件中添加了`markdown_viewer`依赖。
2. 创建了一个`MyApp`类作为应用的入口。
3. 创建了一个`MarkdownViewerScreen`类,它包含了一些Markdown内容,并使用`MarkdownViewer`小部件来渲染这些内容。
4. 在`MarkdownViewer`小部件中,我们还提供了一个自定义的`MarkdownStyleSheet`来自定义Markdown内容的样式。
运行这个示例代码,你应该能够看到一个包含标题、文本、列表、代码块、链接和图片的Markdown内容被成功渲染在Flutter应用中。