Flutter数据存储插件pinata的使用
Flutter数据存储插件pinata的使用
Pinata API Consumer
Welcome to Flutter Pinata by Rey Docs
完美的终点站,用于通过Pinata网关使用IPFS。
什么是Pinata?
Pinata是一个NFT媒体管理服务,允许用户在其选择的区块链上托管、管理和共享任何类型的文件。作为IPFS固定服务提供商,我们专注于为技术型和非技术型创作者提供快速、简单且可靠的方式共享内容,而没有任何限制。
什么是“固定”(Pinning)?
当你在IPFS节点上“固定”数据时,你是在告诉该节点这些数据非常重要,并应将其保存下来。节点是一个连接到IPFS并存储文件的程序。
固定可以防止重要数据从你的节点中被删除。只有你自己可以控制并固定节点上的数据——你无法强制IPFS网络上的其他节点为你保存内容。因此,为了确保内容保持固定状态,你必须运行自己的IPFS节点。
一旦文件被固定到IPFS,你就完全控制如何分享、分发、货币化和共享文件。
进一步阅读:什么是IPFS固定服务
开始使用
添加依赖到pubspec.yaml
文件
方法一:
...
environment:
sdk: ">=2.12.0 <3.0.0"
dependencies:
flutter:
sdk: flutter
pinata:
git: https://github.com/rey-xi/pinata.git
...
方法二:
...
environment:
sdk: ">=2.12.0 <3.0.0"
dependencies:
flutter:
sdk: flutter
pinata: ^0.0.1
...
使用
Pinata
扩展 _PinataAPI
来暴露其接口,从而可以通过Pinata在线网关与IPFS进行通信。IPFS即星际文件系统,是一种去中心化的文件存储网络。
有三种主要构造函数来访问Pinata API接口:
Pinata.login
Pinata.viaPair
Pinata.viaJWT
Pinata.test
- 可以使用Pinata测试IPFS网络接口,由Rey提供。仅限于Rey本地空间的全功能编辑器访问。
PinataAPI
与Pinata IPFS网关API通信的接口。可用于固定和取消固定文件,以及其他Pinata数据、固定和管理服务。
IPFS即星际文件系统,是一种去中心化的文件存储网络。只有具有管理员权限的Pinata密钥才能使用Pinata管理员功能。
更多用法详见Pinata部分。
示例
var pinata = Pinata.viaPair(
name: 'Rey Pinata',
apiKey: 'API KEY',
secret: 'API SECRET',
);
Pinata Key
包含完整详细信息的Pinata API密钥,包括序列号、用户ID和API密钥。此类不能直接与Pinata云网关交互。要访问Pinata API密钥接口(即 _PinataAPI
),请使用 PinataKey.api
。
示例
void main() async {
final key = (await Pinata.test.keys).first;
}
Pin
固定数据。一个包含典型固定详细信息的结构体。固定没有构造函数,因此无法在本地创建。通过更新更改固定元数据,通过取消固定删除它。通过 _PinataAPI.pinFromAddress
创建的固定事件数据在此包中描述为 PinJobs
。PinJob
仅适用于通过 _PinataAPI.pinFromAddress
创建的固定。
示例
void main() async {
final pin = (await Pinata.test.pins).first;
}
Key Access
基于枚举构建的类,作为对Pinata API密钥的权限或访问协商。Key Access
描述了Pinata云API密钥可以访问的功能。
示例
final key = adminKey.createKey(
name: 'My new key',
access: [KeyAccess.admin],
);
工作示例
void main() async {
// 初始化Pinata实例
final pinata = Pinata.test;
// 固定文件
print(await pinata.pinFile(File('FILE PATH')));
// 获取已固定的文件列表
print(pin = await pinata.pins);
// 更新固定名称
print(await pin.update(name: 'New Pin'));
}
感谢
感谢您的支持!
注意:本文档和项目仍在开发中,但已经非常活跃且安全可用。
完整示例代码
以下是一个完整的示例代码,展示如何使用Pinata插件:
import 'package:file/file.dart';
import 'package:pinata/pinata.dart';
void main() async {
// 初始化Pinata实例
final pinata = Pinata.test;
// 固定文件
print(await pinata.pinFile(File('FILE PATH')));
// 获取所有固定的文件
final pins = await pinata.pins;
print(pins);
// 更新某个固定文件的名称
if (pins.isNotEmpty) {
final pin = pins.first;
print(await pin.update(name: 'New Pin'));
}
}
更多关于Flutter数据存储插件pinata的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter数据存储插件pinata的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
Pinata 是一个用于存储和管理 IPFS(InterPlanetary File System)文件的平台。它提供了一个简单的方式来将文件上传到 IPFS 并管理这些文件。在 Flutter 中,你可以使用 Pinata 的 API 来上传和检索文件。
以下是如何在 Flutter 中使用 Pinata 的基本步骤:
1. 安装依赖
首先,你需要在 pubspec.yaml
文件中添加 http
依赖,用于发送 HTTP 请求。
dependencies:
flutter:
sdk: flutter
http: ^0.13.3
然后运行 flutter pub get
来安装依赖。
2. 获取 Pinata API 密钥
在 Pinata 网站上注册并获取你的 API 密钥。你需要 API Key
和 API Secret
来进行身份验证。
3. 创建 Pinata 服务类
创建一个 Dart 类来处理与 Pinata 的交互。
import 'dart:io';
import 'package:http/http.dart' as http;
import 'package:http_parser/http_parser.dart';
import 'dart:convert';
class PinataService {
final String apiKey;
final String apiSecret;
PinataService({required this.apiKey, required this.apiSecret});
Future<String> pinFileToIPFS(File file) async {
final uri = Uri.parse('https://api.pinata.cloud/pinning/pinFileToIPFS');
var request = http.MultipartRequest('POST', uri)
..headers['pinata_api_key'] = apiKey
..headers['pinata_secret_api_key'] = apiSecret
..files.add(await http.MultipartFile.fromPath(
'file',
file.path,
contentType: MediaType('image', 'jpeg'), // 根据文件类型调整
));
var response = await request.send();
if (response.statusCode == 200) {
var responseData = await response.stream.bytesToString();
var jsonResponse = jsonDecode(responseData);
return jsonResponse['IpfsHash'];
} else {
throw Exception('Failed to pin file to IPFS');
}
}
Future<String> pinJsonToIPFS(Map<String, dynamic> json) async {
final uri = Uri.parse('https://api.pinata.cloud/pinning/pinJSONToIPFS');
var response = await http.post(
uri,
headers: {
'Content-Type': 'application/json',
'pinata_api_key': apiKey,
'pinata_secret_api_key': apiSecret,
},
body: jsonEncode(json),
);
if (response.statusCode == 200) {
var jsonResponse = jsonDecode(response.body);
return jsonResponse['IpfsHash'];
} else {
throw Exception('Failed to pin JSON to IPFS');
}
}
}
4. 使用 Pinata 服务
在你的 Flutter 应用中使用 PinataService
类来上传文件或 JSON 数据。
import 'dart:io';
import 'package:flutter/material.dart';
import 'pinata_service.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: PinataExample(),
);
}
}
class PinataExample extends StatefulWidget {
[@override](/user/override)
_PinataExampleState createState() => _PinataExampleState();
}
class _PinataExampleState extends State<PinataExample> {
final PinataService pinataService = PinataService(
apiKey: 'YOUR_API_KEY',
apiSecret: 'YOUR_API_SECRET',
);
String? ipfsHash;
Future<void> uploadFile() async {
final file = File('path_to_your_file');
try {
final hash = await pinataService.pinFileToIPFS(file);
setState(() {
ipfsHash = hash;
});
} catch (e) {
print(e);
}
}
Future<void> uploadJson() async {
final json = {
'name': 'Test',
'description': 'This is a test JSON',
};
try {
final hash = await pinataService.pinJsonToIPFS(json);
setState(() {
ipfsHash = hash;
});
} catch (e) {
print(e);
}
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Pinata Example'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
if (ipfsHash != null) Text('IPFS Hash: $ipfsHash'),
ElevatedButton(
onPressed: uploadFile,
child: Text('Upload File to IPFS'),
),
ElevatedButton(
onPressed: uploadJson,
child: Text('Upload JSON to IPFS'),
),
],
),
),
);
}
}