Flutter网站访问与管理插件cork_site的使用
Flutter网站访问与管理插件cork_site的使用
Cork
Cork 是一个极简主义的个人静态站点生成器。
这是一个尝试编写最简单的静态站点生成器的项目,以满足我个人的需求。它并不打算作为一个通用解决方案,因此一些常见的静态站点生成特性在这里可能被省略或完全不同。使用时需自行承担风险。
特性
如上所述,Cork 的功能集非常符合我的个人站点需求,所以一些竞争的静态站点生成器的所谓必备功能可能在这里工作方式不同或完全不存在。如果你想要一个更友好、更通用或功能更丰富的静态站点生成器,我建议使用 Jekyll 或 Hugo,这两个我都曾使用过并发现它们非常出色。
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
:当前页面的相对 URLCORK_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
更多关于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!");');
}
}
}
在这个示例中:
- CorkSite:假设这是我们的插件提供的Widget,用于显示和管理Web内容。
- CorkSiteController:假设这是我们的插件提供的控制器,用于与WebView进行交互,如加载URL和执行JavaScript。
- onWebViewCreated:这是一个回调,当WebView创建完成时调用,用于获取
CorkSiteController
实例。 - loadUrl 和 evaluateJavascript:这两个方法分别用于加载新的URL和执行JavaScript代码。
请注意,由于cork_site
插件是假设的,实际使用时你需要替换为真实的插件名称和API。如果你正在寻找一个真实的Flutter插件来实现类似功能,你可以考虑使用webview_flutter
插件,它提供了强大的WebView功能,并允许你加载URL、执行JavaScript以及处理各种Web事件。