Flutter去中心化存储插件web3_storage的使用
Flutter去中心化存储插件web3_storage的使用
web3.storage
web3.storage SDK 的 Dart 移植版本。
演示地址: https://bafybeigtf5gnvr5fiohg7enum736ia6tteziirouf4reeqx2zgazb24bki.ipfs.dweb.link
如何使用
在使用该包之前,请确保你在 Web3.Storage 上有一个账户,并且拥有一个 API Token。将文件上传到 Web3.Storage 只需简单的几步:
// 你可以在这里获取 API Token: https://web3.storage/tokens/
final String apiToken = '<web3.storage_api_token>';
final web3Storage = withApiToken(apiToken);
// 创建将要上传到 Web3.storage 的文件引用模型
final file = RawFile(
name: 'hello',
extension: 'txt',
data: Uint8List.fromList(
utf8.encode('Hello world'),
),
);
// 上传它
final result = await web3Storage.upload(file: file);
// 大功告成!它应该打印你的 Web3 文件 IPFS CID
print(result);
功能
目前该包能够实现以下功能:
- 上传文件
- 获取文件信息
- 下载文件
- 使用过滤器列出文件
Web3.Storage API 错误也在包中进行了类型定义,这为你提供了识别请求失败时问题的简单方法。
缺失的功能
目前尚未实现 CAR 端点,这意味着你不能上传或检索 CAR
文件。上传状态端点也尚未实现。
副作用
此包基于 Dart 的 null 安全 + dartz
单子(monads),因此没有空值问题和副作用。这可以防止抛出任何未知且未捕获的异常,并确保按合同一致的信息。
示例代码
以下是一个完整的示例,展示了如何使用 web3.storage 插件来上传文件:
import 'dart:convert';
import 'dart:io';
import 'dart:typed_data';
import 'package:web3_storage/web3_storage.dart';
void main() async {
// 你可以在这里获取 API Token: https://web3.storage/tokens/
final String apiToken = '<web3.storage_api_token>';
final web3Storage = withApiToken(apiToken);
// 创建将要上传到 Web3.storage 的文件引用模型
final file = RawFile(
name: 'hello',
extension: 'txt',
data: Uint8List.fromList(
utf8.encode('Hello world'),
),
);
// 上传它
final result = await web3Storage.upload(file: file);
// 大功告成!它应该打印你的 Web3 文件 IPFS CID
print(result);
// 退出程序
exit(0);
}
更多关于Flutter去中心化存储插件web3_storage的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter去中心化存储插件web3_storage的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何在Flutter应用中使用web3.storage
插件进行去中心化存储的示例代码。这个示例将展示如何上传文件到Web3.Storage并获取其内容哈希(CID)。
首先,确保你已经在你的pubspec.yaml
文件中添加了web3_storage
依赖:
dependencies:
flutter:
sdk: flutter
web3_storage: ^x.y.z # 请替换为最新版本号
然后运行flutter pub get
来安装依赖。
接下来,在你的Flutter项目中,你可以使用以下代码来上传文件:
import 'package:flutter/material.dart';
import 'package:web3_storage/web3_storage.dart';
import 'dart:io';
import 'dart:convert';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
String? cid;
final String apiKey = 'YOUR_API_KEY'; // 替换为你的Web3.Storage API密钥
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Web3.Storage Flutter Example'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ElevatedButton(
onPressed: () async {
File file = File('path/to/your/file.txt'); // 替换为你要上传的文件路径
await uploadFile(file);
},
child: Text('Upload File'),
),
if (cid != null)
Text('Content ID (CID): $cid'),
],
),
),
),
);
}
Future<void> uploadFile(File file) async {
try {
// 创建Web3Storage客户端
final client = Web3Storage(apiKey: apiKey);
// 读取文件内容
final fileContent = await file.readAsBytes();
// 上传文件
final response = await client.put(fileContent, fileName: file.path.split('/').last);
// 获取CID
setState(() {
cid = response.cid.toString();
});
print('File uploaded successfully! CID: $cid');
} catch (e) {
print('Error uploading file: $e');
}
}
}
注意事项
- API密钥:确保你已经从Web3.Storage官网获取了一个API密钥,并将其替换到代码中的
YOUR_API_KEY
位置。 - 文件路径:在
uploadFile
函数中,替换'path/to/your/file.txt'
为你实际要上传的文件路径。 - 依赖版本:确保你使用的是最新版本的
web3_storage
包。你可以通过在pubspec.yaml
文件中查看可用的版本或在pub.dev
网站上搜索web3_storage
来获取最新版本。
这个示例展示了如何使用web3_storage
包在Flutter应用中上传文件并获取其内容哈希(CID)。你可以根据这个基础示例进一步扩展你的应用,比如添加错误处理、用户界面优化等。