Flutter静态资源管理插件angel3_static的使用
Flutter静态资源管理插件angel3_static的使用
angel3_static
是一个用于Angel3框架的静态文件处理库,支持HTML、CSS和JS等静态资源的提供,并且能够处理Range
请求,适合媒体流(如音乐、视频)的应用场景。
安装
在你的pubspec.yaml
文件中添加依赖:
dependencies:
angel3_static: ^8.0.0
确保你已经配置了正确的版本号。运行flutter pub get
来安装这个包。
使用
为了从目录中提供文件服务,你需要创建一个VirtualDirectory
实例。需要注意的是,angel3_static
使用的是package:file
而不是dart:io
。
下面是一个基本的例子展示如何设置静态资源服务器:
import 'package:angel3_framework/angel3_framework.dart';
import 'package:angel3_framework/http.dart';
import 'package:angel3_static/angel3_static.dart';
import 'package:file/local.dart';
void main() async {
var app = Angel();
var fs = const LocalFileSystem();
// 创建一个正常的静态服务器
var vDir = VirtualDirectory(app, fs, source: Directory('./public'));
// 如果你也想发送Cache-Control, ETag等头部信息,则可以使用CachingVirtualDirectory
var cachingVDir = CachingVirtualDirectory(app, fs, source: Directory('./public'));
// 挂载VirtualDirectory的请求处理器
app.fallback(cachingVDir.handleRequest);
// 启动服务器
await AngelHttp(app).startServer('127.0.0.1', 3000);
}
Push State
VirtualDirectory
还提供了一个pushState
方法,返回一个请求处理器,在404错误发生时作为回退选项,除非用户正在请求那个特定的文件。这对于单页面应用(SPA)非常有用。
// 创建VirtualDirectory实例
var vDir = CachingVirtualDirectory(...);
// 挂载它
app.fallback(vDir.handleRequest);
// 当遇到404错误时,回退到index.html
app.fallback(vDir.pushState('index.html'));
选项
VirtualDirectory
API接受几个命名参数:
source
: 包含要提供的文件的Directory
。如果留空,则Angel3将根据环境变量ANGEL_ENV
选择从web
或build/web
目录提供服务。indexFileNames
: 应作为索引页提供的文件名列表,默认是['index.html']
。publicPath
: 为了提供索引文件,你需要指定虚拟路径下angel3_static提供文件的位置。如果不是在网站根目录提供静态文件,请包含此参数。callback
: 在向客户端发送文件之前运行。可用于设置头部信息等。如果返回值不是null
或true
,则返回的结果将会代替文件内容发送给用户。
这里有一个更详细的示例代码,包括日志记录和MIME类型解析:
import 'package:angel3_framework/angel3_framework.dart';
import 'package:angel3_framework/http.dart';
import 'package:angel3_static/angel3_static.dart';
import 'package:file/local.dart';
import 'package:logging/logging.dart';
void main(List<String> args) async {
var app = Angel();
var http = AngelHttp(app);
var fs = const LocalFileSystem();
var vDir = CachingVirtualDirectory(
app,
fs,
allowDirectoryListing: true,
source: args.isEmpty ? fs.currentDirectory : fs.directory(args[0]),
maxAge: const Duration(days: 24).inSeconds,
);
app.mimeTypeResolver
..addExtension('', 'text/plain')
..addExtension('dart', 'text/dart')
..addExtension('lock', 'text/plain')
..addExtension('markdown', 'text/plain')
..addExtension('md', 'text/plain')
..addExtension('yaml', 'text/plain');
app.logger = Logger('example')
..onRecord.listen((rec) {
print(rec);
if (rec.error != null) print(rec.error);
if (rec.stackTrace != null) print(rec.stackTrace);
});
app.fallback(vDir.handleRequest);
app.fallback((req, res) => throw AngelHttpException.notFound());
var server = await http.startServer('127.0.0.1', 3000);
print('Serving from ${vDir.source.path}');
print('Listening at http://${server.address.address}:${server.port}');
}
这段代码展示了如何配置一个简单的静态资源服务器,同时处理了MIME类型解析和日志记录。
更多关于Flutter静态资源管理插件angel3_static的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter静态资源管理插件angel3_static的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是关于如何在Flutter项目中使用angel3_static
插件来管理静态资源的示例代码。angel3_static
是一个用于Dart服务器的静态文件服务插件,虽然它并不是专门为Flutter客户端设计的,但可以在Flutter项目的后端服务部分使用,以提供静态资源(如图片、CSS、JavaScript文件等)。
首先,确保你的Flutter项目已经包含了后端服务部分,或者你可以创建一个简单的Dart服务器来演示。
1. 添加依赖
在你的pubspec.yaml
文件中添加angel3_static
依赖:
dependencies:
angel3_framework: ^4.0.0
angel3_static: ^4.0.0
然后运行flutter pub get
来安装依赖。
2. 创建Dart服务器
在你的项目根目录下创建一个新的Dart文件,例如server.dart
,并添加以下代码来设置服务器和静态文件服务:
import 'package:angel3_framework/angel3_framework.dart';
import 'package:angel3_static/angel3_static.dart';
void main() async {
// 创建一个Angel应用实例
var app = Angel();
// 配置静态文件服务
var static = configureStatic(app.directory!.parent!.parent! / 'web'); // 假设静态文件存放在'web'文件夹中
// 使用静态文件中间件
app.use('/static', static);
// 启动服务器
var server = await app.listen(3000);
print('Server is running on http://localhost:3000');
}
在上面的代码中,我们做了以下几件事:
- 创建了一个Angel应用实例。
- 使用
configureStatic
函数配置了静态文件服务,指定了静态文件存放的目录(在这个例子中,我们假设静态文件存放在项目的web
文件夹中)。 - 使用
app.use
方法将静态文件中间件挂载到/static
路径上。 - 启动服务器并监听3000端口。
3. 准备静态文件
在你的项目根目录下创建一个web
文件夹,并在其中添加一些静态文件,例如index.html
、style.css
和script.js
。
例如,web/index.html
的内容可以是:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Static Files Example</title>
<link rel="stylesheet" href="/static/style.css">
</head>
<body>
<h1>Hello, Angel3 Static!</h1>
<script src="/static/script.js"></script>
</body>
</html>
4. 运行服务器
在终端中运行dart run server.dart
来启动服务器。
5. 访问静态资源
打开浏览器并访问http://localhost:3000/static/index.html
,你应该能够看到由服务器提供的静态页面。
这个示例展示了如何使用angel3_static
插件在Flutter项目的后端服务部分管理静态资源。虽然Flutter主要用于构建客户端应用,但这样的后端服务可以与Flutter客户端进行通信,提供所需的静态资源或其他API服务。