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

1 回复

更多关于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');
    }
  }
}

注意事项

  1. API密钥:确保你已经从Web3.Storage官网获取了一个API密钥,并将其替换到代码中的YOUR_API_KEY位置。
  2. 文件路径:在uploadFile函数中,替换'path/to/your/file.txt'为你实际要上传的文件路径。
  3. 依赖版本:确保你使用的是最新版本的web3_storage包。你可以通过在pubspec.yaml文件中查看可用的版本或在pub.dev网站上搜索web3_storage来获取最新版本。

这个示例展示了如何使用web3_storage包在Flutter应用中上传文件并获取其内容哈希(CID)。你可以根据这个基础示例进一步扩展你的应用,比如添加错误处理、用户界面优化等。

回到顶部