Flutter网站访问与管理插件cork_site的使用

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

Flutter网站访问与管理插件cork_site的使用

Cork

Cork 是一个极简主义的个人静态站点生成器。

pub package

build status

这是一个尝试编写最简单的静态站点生成器的项目,以满足我个人的需求。它并不打算作为一个通用解决方案,因此一些常见的静态站点生成特性在这里可能被省略或完全不同。使用时需自行承担风险

特性

如上所述,Cork 的功能集非常符合我的个人站点需求,所以一些竞争的静态站点生成器的所谓必备功能可能在这里工作方式不同或完全不存在。如果你想要一个更友好、更通用或功能更丰富的静态站点生成器,我建议使用 JekyllHugo,这两个我都曾使用过并发现它们非常出色。

Markdown 和 Mustache

Cork 预期页面将使用 Markdown 编写,并使用 Mustache 进行模板化。它也支持普通的 HTML 页面,但一般的想法是定义 Mustache 模板并在包含 Markdown 文件的内容中引用它们。

YAML 前置事项

说到引用,Cork 允许在每个 Markdown 文件的开头指定 YAML 前置事项。此 YAML 内容允许你设置预定义变量(例如 template 用于在站点生成期间指定要使用的 Mustache 模板),以及创建可以在文章内容中通过标准的“双大括号”语法访问的自定义变量。

最小假设

就站点结构而言,Cork 做出的假设很少。除了将站点放在 web/ 目录外,唯一的其他要求是你需要将模板放在 web/templates/ 文件夹中。

所有其余的站点结构都由你决定。请注意,在 web/ 中选择的文件夹布局将在生成的站点中复制,这意味着将博客文章放在 web/post/post1.html 将导致最终的 URL 为 www.sitename.com/post/post1.html

注意:根据你托管生成的站点的位置,人性化 URL www.sitename.com/post/post1 也可以工作,但如果不行,你可以通过将文章存储在 web/post/post1/index.html 来使其正常工作。

这意味着你可以自由地将其他资源(如 CSS、图像和 JavaScript)放置在 web/ 中的任何位置,并负责确保这些位置与你在模板和 HTML 文件中引用这些资源的位置对齐。

旧式主题

由于假设较少,因此没有内置的主题支持,就像许多其他静态站点生成器一样。相反,你需要添加必要的 CSS、JS 和模板来实现所需的外观。

Dart 脚本

除了常规的 JS 支持外,Cork 还原生支持客户端脚本中的 Dart。你编写的任何 Dart Web 脚本都会自动转换为 JavaScript 并可用于你的站点。示例站点中有演示如何使用 Dart 的示例。

自动生成的元数据

Cork 提供了一些自动生成的元数据,如果需要,可以在文章内容和模板中包含这些元数据,或者忽略它们。这些元数据变量始终以 CORK_ 开头,目前包括:

  • CORK_url:当前页面的相对 URL
  • CORK_reading_time:平均计算的阅读时间(分钟)
  • CORK_*_readability_score:页面内容的各种可读性得分计算

参见示例站点中的长篇文章以了解样本用法。

内嵌

最后,Cork 启用了 Markdown 内容中的文件内嵌,类似于 Mustache 的 Partials。这在你希望在文章正文中包含整个文件(如脚本、代码或数据文件)时非常有用。

使用

安装

由于此工具使用 Dart,你需要首先 安装 Dart SDK

一旦安装了 Dart,为站点创建一个新的文件夹,并添加一个 pubspec.yaml 文件,就像为任何新的 Dart 项目一样:

~> mkdir my_site
~> cd my_site
~> touch pubspec.yaml

在该 pubspec.yaml 文件中,将 Cork 添加为依赖项,并添加必要的 构建运行程序依赖项

name: my_site
dependencies:
  cork_site: ^2.0.0
  build: any
dev_dependencies:
  build_runner: any
  build_web_compilers: any
站点创建

接下来,创建一个 web/ 文件夹来存放站点的内容,并添加一些内容。查看 example/ 文件夹作为示例站点。

mkdir web
vim web/index.md

... 添加模板、CSS、Markdown 文章等
站点生成

最后,为了生成站点,有两种选项。

首先获取任何缺失的依赖项。

dart pub get
开发热重载

然后,在开发站点时,你可以运行一个开发服务器以实时重新加载更改。

dart run build_runner serve
生产发布

当你准备生成站点的最终版本时,运行以下命令:

dart run build_runner build --release --output <输出文件夹位置>

示例

查看 示例 文件夹,其中包含一个使用 Cork 构建的站点示例,以及一个示例布局。

示例代码

Sample Cork Site

This folder contains an example static site created for use with Cork. The goal is for all important features of Cork to be exercised via this example site, and for it to provide a reference and starting point for other sites created for use with Cork.

The example site currently includes:

  • a few simple CSS rules as an example of how to change the look
  • sample mustache templates
  • sample index, 404, etc pages
  • an image to illustrate static asset embedding
  • transclusion example of a code file
  • a collection of sample posts meant to illustrate a simple blog layout
  • syntax highlighting courtesy of prism.js
  • 2 dart scripts as an example of using dart for frontend scripting

更多关于Flutter网站访问与管理插件cork_site的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter网站访问与管理插件cork_site的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何使用Flutter中的cork_site插件进行网站访问与管理的代码示例。请注意,cork_site这个插件名称看起来是一个假设或虚构的插件,因为在实际的Flutter社区和pub.dev上并没有直接名为cork_site的官方插件。不过,我会基于常见的Flutter插件使用模式,给出一个模拟的示例代码,展示如何在Flutter应用中访问和管理一个网站。

假设cork_site插件提供了类似WebView的功能,并且允许我们进行一些网站管理操作(如加载URL、处理JavaScript回调等)。以下是一个可能的代码示例:

import 'package:flutter/material.dart';
import 'package:cork_site/cork_site.dart'; // 假设这是我们的插件

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter CorkSite Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  CorkSiteController? _corkSiteController;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter CorkSite Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            ElevatedButton(
              onPressed: _loadUrl,
              child: Text('Load URL'),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _evaluateJavascript,
              child: Text('Evaluate JavaScript'),
            ),
            Expanded(
              child: CorkSite(
                initialUrl: 'https://www.example.com',
                onWebViewCreated: (CorkSiteController controller) {
                  _corkSiteController = controller;
                },
                javascriptMode: JavascriptMode.unrestricted,
              ),
            ),
          ],
        ),
      ),
    );
  }

  void _loadUrl() {
    if (_corkSiteController != null) {
      _corkSiteController!.loadUrl('https://www.another-example.com');
    }
  }

  void _evaluateJavascript() {
    if (_corkSiteController != null) {
      _corkSiteController!.evaluateJavascript('alert("Hello from Flutter!");');
    }
  }
}

在这个示例中:

  1. CorkSite:假设这是我们的插件提供的Widget,用于显示和管理Web内容。
  2. CorkSiteController:假设这是我们的插件提供的控制器,用于与WebView进行交互,如加载URL和执行JavaScript。
  3. onWebViewCreated:这是一个回调,当WebView创建完成时调用,用于获取CorkSiteController实例。
  4. loadUrlevaluateJavascript:这两个方法分别用于加载新的URL和执行JavaScript代码。

请注意,由于cork_site插件是假设的,实际使用时你需要替换为真实的插件名称和API。如果你正在寻找一个真实的Flutter插件来实现类似功能,你可以考虑使用webview_flutter插件,它提供了强大的WebView功能,并允许你加载URL、执行JavaScript以及处理各种Web事件。

回到顶部