Flutter Markdown解析插件angel3_markdown的使用

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

Flutter Markdown解析插件angel3_markdown的使用

angel3_markdown 是一个用于生成Markdown视图的插件,适用于Angel3框架。通过该插件,你可以轻松地提供静态站点,而无需编写繁琐的HTML。因此,它是一个友好的选择,适合编写API文档或其他需要编写HTML的任务。

安装

在你的 pubspec.yaml 文件中添加以下依赖:

dependencies:
  angel3_framework: ^8.0.0
  angel3_markdown: ^8.0.0

使用

配置一个Angel服务器以使用Markdown非常简单。请记住使用 package:file 而不是 dart:io

import 'package:angel3_framework/angel3_framework.dart';
import 'package:angel3_markdown/angel3_markdown.dart';
import 'package:file/local.dart';

void configureServer(Angel app) async {
  var fs = LocalFileSystem();
  await app.configure(markdown(
    // 指定你的视图文件所在的目录。
    fs.directory('views'),
  ));
}

然后,你可以在请求处理器中动态生成HTML。假设你的视图目录包含一个名为 hello.md 的文件,下面的代码将渲染它作为HTML响应:

app.get('/hello', (res) => res.render('hello'));

默认情况下,angel3_markdown 会搜索 .md 扩展名的文件;但是,你可以轻松地覆盖这一行为。

插值

angel3_markdown 可以在构建Markdown之前对来自 locals 的数据进行插值。例如,给定以下模板 species.md

Species: {{species.name}}

The species {{species.genus.name}} {{species.name}} is fascinating…


你可以这样渲染:

```dart
app.get('/species', (req, res) {
  return res.render('species', {
    'species': new Species('sapiens', genius: 'homo')
  });
});

要禁用单个括号内的插值,可以在其前缀添加一个 @,例如: @{{raw | not_interpolated | angular}}

模板

Markdown通常用于构建站点的 内容,而不是模板。你可能希望在页面内容周围应用自定义模板以添加漂亮的CSS和JS等:

configureServer(Angel app) async {
  await app.configure(
    markdown(
      // 视图文件所在目录。
      fs.directory('views'),
      template: (content, Map locals) {
        return '''
<!DOCTYPE html>
<html>
  <head>
    <title>${locals['title']} - My Site</title>
  </head>
  <body>
    $content
  </body>
</html>
''';
      },
    ),
  );
}

template 函数将可以访问传递给渲染器的所有值,或者一个空的 Map

增强Markdown

你可以传递一个 extensionSet 来向Markdown渲染器添加额外的功能。默认情况下,该插件配置为启用GitHub风格的Markdown。

示例代码

以下是一个完整的示例,展示了如何设置和使用 angel3_markdown 插件:

import 'dart:async';
import 'dart:io';
import 'package:angel3_framework/angel3_framework.dart';
import 'package:angel3_framework/http.dart';
import 'package:angel3_markdown/angel3_markdown.dart';
import 'package:file/local.dart';

void main() async {
  var app = await createServer();
  var http = AngelHttp(app);
  var server = await http.startServer(InternetAddress.loopbackIPv4, 3000);
  print('Listening at http://${server.address.address}:${server.port}');
}

Future<Angel> createServer() async {
  // 创建一个新的服务器,并安装Markdown渲染器。
  var app = Angel();
  var fs = LocalFileSystem();
  await app.configure(markdown(
    fs.directory('views'),
    template: (content, locals) {
      return '''
<!DOCTYPE html>
<html>
  <head>
    <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <title>${locals['title'] ?? 'Example Site'} - Example Site</title>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/semantic-ui/2.2.13/semantic.min.css">
  </head>
  <body>
    <div class="ui top fixed menu">
      <a class="header item" href="/">
        <i class="home icon"></i>
        Home
      </a>
    </div>
    <div class="ui container" style="margin-top: 5em;">
      $content
    </div>
  </body>
</html>
''';
    },
  ));

  // 编译一个首页
  app.get('/', (req, res) => res.render('hello', {'title': 'Welcome'}));

  return app;
}

更多关于Flutter Markdown解析插件angel3_markdown的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter Markdown解析插件angel3_markdown的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter应用中使用angel3_markdown插件来解析Markdown内容的示例代码。这个插件允许你将Markdown文本转换为Flutter中的可显示Widget。

首先,确保你已经在你的pubspec.yaml文件中添加了angel3_markdown依赖:

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

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

接下来,在你的Flutter应用中,你可以按照以下步骤使用angel3_markdown来解析Markdown文本:

  1. 导入必要的包
import 'package:flutter/material.dart';
import 'package:angel3_markdown/angel3_markdown.dart' as md;
  1. 定义一个函数来解析Markdown文本
Widget buildMarkdown(String markdownText) {
  // 使用angel3_markdown的parse方法将Markdown文本转换为Widget
  var markdownWidget = md.parse(markdownText);
  return markdownWidget;
}
  1. 在你的UI中使用这个函数
void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Markdown Demo'),
        ),
        body: Center(
          child: Padding(
            padding: const EdgeInsets.all(16.0),
            child: buildMarkdown('''
# Hello, Markdown!

This is a **bold** text and this is an *italic* text.

- List item 1
- List item 2
- List item 3

```dart
void main() {
  print("Hello, World!");
}
        '''),
      ),
    ),
  ),
);

} }


在这个示例中,`buildMarkdown`函数接收一个Markdown格式的字符串,并使用`angel3_markdown`的`parse`方法将其转换为一个Widget。然后,这个Widget被放置在Flutter应用的中心位置。

请注意,`angel3_markdown`插件实际上依赖于其他库(如`flutter_markdown`)来实际渲染Markdown内容。因此,如果你的项目需要,可能还需要直接依赖`flutter_markdown`或其他相关库。不过,直接使用`angel3_markdown`提供的API通常足以满足大多数需求。

确保在实际项目中查看`angel3_markdown`的文档和更新日志,以获取最新的使用指南和API变更信息。
回到顶部