Flutter数据安全与存储插件etebase的使用

发布于 1周前 作者 sinazl 来自 Flutter

Flutter数据安全与存储插件etebase的使用

简介

etebase 是一个用于Flutter和Dart的应用程序的数据安全与存储插件。它通过FFI(Foreign Function Interface)绑定与C库 libetebase 交互,提供了与官方Rust API相似的功能。etebase 支持所有由C API支持的功能,并且在Flutter项目中可以通过 etebase_flutter 包来使用。

特性

  • 提供与官方Rust API相似的Dart API。
  • 内部使用Dart FFI调用官方C API。
  • 支持C API的所有功能。

安装

对于Flutter项目,建议使用 etebase_flutter 包。只需在 pubspec.yaml 文件中添加依赖并运行 flutter pub get

dependencies:
  etebase_flutter: ^最新版本

然后运行以下命令来安装依赖:

flutter pub get

使用示例

初始化与终止

由于 etebase 的操作涉及网络和文件I/O,这些操作会在一个自定义的隔离区(isolate)中执行,以避免阻塞主线程。因此,需要初始化该隔离区,并在应用结束时终止它。

以下是一个完整的示例代码,展示了如何初始化 etebase、创建用户、上传集合以及清理资源:

import 'dart:ffi';
import 'dart:convert';
import 'dart:typed_data';

import 'package:etebase/etebase.dart';

// 必须是全局或静态方法
DynamicLibrary _loadLibEtebase() {
  // 根据平台加载对应的动态库
  return DynamicLibrary.open('/usr/lib/libetebase.so'); // Linux示例
}

Future<void> main() async {
  print('Initializing etebase...');
  Etebase.ensureInitialized(_loadLibEtebase);
  print('Etebase was initialized!');

  final client = await EtebaseClient.create(
    'example-client',
    Uri.http('localhost:3735', '/'), // 服务器URL(可选)
  );
  try {
    print('Client is valid: ${await client.checkEtebaseServer()}');

    // 注册新用户
    final account = await EtebaseAccount.signup(
      client,
      const EtebaseUser(
        username: 'test',
        email: 'test@example.org',
      ),
      'hello-test-123', // 密码
    );

    // 获取集合管理器
    final collectionManager = await account.getCollectionManager();

    // 创建一个新的集合
    final collection = await collectionManager.create(
      'example',
      EtebaseItemMetadata(
        name: 'Example collection',
        description: 'An example collection for testing out etebase-dart',
        mtime: DateTime.now(),
      ),
      Uint8List.fromList(utf8.encode('Hello, World!')), // 集合内容
    );

    // 上传集合
    await collectionManager.upload(collection);

    print('Collection uploaded successfully!');
  } finally {
    // 清理资源
    await client.dispose();
    print('Client disposed.');
  }
}

更多关于Flutter数据安全与存储插件etebase的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter数据安全与存储插件etebase的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter项目中,使用etebase插件可以帮助你实现数据的安全存储和管理。etebase是一个开源的、端到端加密的数据库解决方案,非常适合需要高安全性数据存储的应用。以下是一个简单的示例,展示了如何在Flutter项目中使用etebase插件进行基本的存储和检索操作。

首先,你需要在你的Flutter项目中添加etebase依赖。在你的pubspec.yaml文件中添加以下依赖:

dependencies:
  flutter:
    sdk: flutter
  etebase: ^最新版本号  # 请替换为实际的最新版本号

然后,运行flutter pub get来安装依赖。

接下来,在你的Flutter应用中,你可以按照以下步骤使用etebase:

  1. 初始化etebase客户端

    import 'package:etebase/etebase.dart';
    import 'package:flutter/material.dart';
    
    void main() {
      runApp(MyApp());
    }
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          home: Scaffold(
            appBar: AppBar(
              title: Text('Etebase Flutter Example'),
            ),
            body: EtebaseExample(),
          ),
        );
      }
    }
    
    class EtebaseExample extends StatefulWidget {
      @override
      _EtebaseExampleState createState() => _EtebaseExampleState();
    }
    
    class _EtebaseExampleState extends State<EtebaseExample> {
      late EtebaseClient client;
    
      @override
      void initState() {
        super.initState();
        // 初始化etebase客户端
        client = EtebaseClient.createInMemory();  // 或者使用其他存储方式,如EtebaseClient.createFromUri()
    
        // 可以在这里进行客户端的初始化和配置,比如设置密码等
        // 注意:在实际应用中,你应该妥善管理密码和密钥,确保它们的安全
    
        // 示例:设置一个简单的密码(仅用于演示,不要在生产中使用这种方式存储密码)
        // String password = "your_secure_password";
        // await client.setPassword(password);
      }
    
      @override
      Widget build(BuildContext context) {
        return Center(
          child: ElevatedButton(
            onPressed: () async {
              // 在这里进行数据的存储和检索操作
              await performEtebaseOperations();
            },
            child: Text('Perform Etebase Operations'),
          ),
        );
      }
    
      Future<void> performEtebaseOperations() async {
        try {
          // 创建一个新的集合(类似于数据库中的表)
          Collection collection = await client.createCollection("example_collection");
    
          // 创建一个新的文档并存储数据
          Document document = await collection.createDocument();
          await document.setField("key1", "value1");
          await document.setField("key2", 42);  // 支持多种数据类型
          await document.save();
    
          // 检索并显示文档数据
          Document retrievedDocument = await collection.getDocumentById(document.id);
          String value1 = await retrievedDocument.getField<String>("key1");
          int value2 = await retrievedDocument.getField<int>("key2");
    
          print("Retrieved data: key1 = $value1, key2 = $value2");
    
        } catch (e) {
          print("Error: $e");
        }
      }
    }
    

在这个示例中,我们:

  • 初始化了etebase客户端。
  • 创建了一个新的集合(collection)。
  • 在集合中创建了一个新的文档(document),并存储了一些数据。
  • 检索并打印了存储的数据。

请注意,这个示例使用了内存中的etebase客户端(EtebaseClient.createInMemory()),这对于演示和测试很有用,但在生产环境中,你可能希望使用更持久的存储方式,如文件系统或SQLite数据库。你可以通过EtebaseClient.createFromUri()方法指定一个持久化的存储URI。

此外,为了安全起见,你应该妥善管理etebase客户端的密码和密钥,避免在客户端代码中硬编码敏感信息。在实际应用中,你可能需要使用密钥管理服务(KMS)或其他安全存储机制来保护这些敏感数据。

回到顶部