Flutter分布式数据存储插件at_client的使用
Flutter分布式数据存储插件at_client的使用
简介
at_client
是一个用于构建基于 atProtocol 的应用程序的非平台特定客户端 SDK。它提供了基本的方法来实现去中心化、边缘计算模型,具有以下特性:
- 通过个人数据存储进行加密控制数据访问
- 不需要应用后端
- 端到端加密,只有数据所有者拥有密钥
- 私有且无监视的连接
我们称之为“翻转互联网”,即给人们控制其数据访问的权利。
开始使用
在第一次使用此包之前,您应该遵循 getting started guide。您可能还需要阅读 atPlatform 概述。
该包可在 pub.dev 上找到:https://pub.dev/packages/at_client
使用示例
设置 AtClientPreferences
首先,设置您的偏好设置:
import 'package:path_provider/path_provider.dart';
import 'package:at_client/at_client.dart';
Future<void> setupPreferences() async {
Directory appSupportDir = await getApplicationSupportDirectory();
AtClientPreference preferences = AtClientPreference()
..rootDomain = 'root.atsign.org'
..namespace = '.my_namespace'
..hiveStoragePath = appSupportDir.path
..commitLogPath = appSupportDir.path
..isLocalStoreRequired = true;
// 初始化当前用户
AtClientManager atClientManagerInstance = await AtClientManager.getInstance().setCurrentAtSign('@yourAtsign', 'appNamespace', preferences);
}
更新用户数据
使用 put()
方法更新数据:
Future<void> updateData(AtClient atClientInstance) async {
AtKey atKey = AtKey()
..key = 'phone'
..namespace = '.myApp';
await atClientInstance.put(atKey, '+00 123-456-7890');
}
获取数据
使用 get()
方法获取数据:
Future<void> getData(AtClient atClientInstance) async {
AtKey atKey = AtKey()
..key = 'phone'
..namespace = '.myApp';
AtValue value = await atClientInstance.get(atKey);
print(value.value); // 输出: +00 123-456-7890
}
删除数据
使用 delete()
方法删除数据:
Future<void> deleteData(AtClient atClientInstance) async {
AtKey atKey = AtKey()
..key = 'phone'
..namespace = '.myApp';
bool isDeleted = await atClientInstance.delete(atKey);
print(isDeleted); // 如果删除成功,输出: true
}
同步数据
如果需要,可以使用 sync()
方法同步数据:
SyncService _syncService;
void syncData(AtClientManager atClientManagerInstance) {
_syncService = atClientManagerInstance.syncService;
_syncService.sync();
}
发送通知
使用 notify()
方法发送通知:
Future<void> notifyUpdate(AtClient atClientInstance) async {
MetaData metaData = MetaData()
..ttl = '60000'
..ttb = '30000';
AtKey key = AtKey()
..key = 'phone'
..sharedWith = '@bob'
..metadata = metaData
..namespace = '.myApp';
String value = (await atClientInstance.get(key)).value;
OperationEnum operation = OperationEnum.update;
bool isNotified = await atClientInstance.notify(key, value, operation);
print(isNotified); // 如果通知成功,输出: true
}
监听连接状态
使用 ConnectivityListener
监听连接状态:
void checkConnection() {
ConnectivityListener().subscribe().listen((isConnected) {
if (isConnected) {
print('connection available');
} else {
print('connection lost');
}
});
}
完整示例
以下是一个完整的示例,展示如何使用 at_client
插件:
import 'package:at_client/at_client.dart';
import 'package:at_client/src/util/encryption_util.dart';
import 'package:path_provider/path_provider.dart';
import 'package:flutter/material.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
Directory appSupportDir = await getApplicationSupportDirectory();
AtClientPreference preferences = AtClientPreference()
..rootDomain = 'root.atsign.org'
..namespace = '.myApp'
..hiveStoragePath = appSupportDir.path
..commitLogPath = appSupportDir.path
..isLocalStoreRequired = true;
AtClientManager atClientManagerInstance = await AtClientManager.getInstance().setCurrentAtSign('@yourAtsign', 'myApp', preferences);
runApp(MyApp(atClientManagerInstance));
}
class MyApp extends StatelessWidget {
final AtClientManager atClientManagerInstance;
MyApp(this.atClientManagerInstance);
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('at_client Example')),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ElevatedButton(
onPressed: () async {
AtKey atKey = AtKey()
..key = 'phone'
..namespace = '.myApp';
await atClientManagerInstance.atClient.put(atKey, '+00 123-456-7890');
print('Data updated');
},
child: Text('Update Data'),
),
ElevatedButton(
onPressed: () async {
AtKey atKey = AtKey()
..key = 'phone'
..namespace = '.myApp';
AtValue value = await atClientManagerInstance.atClient.get(atKey);
print('Phone number: ${value.value}');
},
child: Text('Get Data'),
),
],
),
),
),
);
}
}
请参考 at_sign docs 获取更多详细信息。
更多关于Flutter分布式数据存储插件at_client的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter分布式数据存储插件at_client的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter项目中,使用at_client
插件来实现分布式数据存储是一项高级功能。at_client
是AtSign生态的一部分,专为去中心化应用设计。以下是一个简单的代码示例,展示如何在Flutter应用中集成和使用at_client
进行分布式数据存储。
首先,确保你已经在pubspec.yaml
文件中添加了at_client_sdk
依赖:
dependencies:
flutter:
sdk: flutter
at_client_sdk: ^x.y.z # 请替换为最新版本号
然后,运行flutter pub get
来安装依赖。
接下来,我们需要在Flutter应用中初始化AtClient
并进行一些基本的存储和检索操作。以下是一个示例代码:
import 'package:flutter/material.dart';
import 'package:at_client_sdk/at_client_sdk.dart';
import 'package:at_commons/at_commons.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
AtClient? _atClient;
@override
void initState() {
super.initState();
initializeAtClient();
}
Future<void> initializeAtClient() async {
// 配置AtClientManager
var atClientManager = AtClientManager(
rootDomain: 'root.atsign.dev', // 替换为你的根域名
namespace: 'my_app', // 命名空间
commitLogPath: './commit_log', // 本地日志存储路径
preferOnline: true, // 是否优先在线
);
// 初始化AtClient
_atClient = await atClientManager.getAtClient();
// 等待初始化完成后,可以执行存储操作
if (_atClient != null) {
setState(() {}); // 更新UI,如果需要的话
storeData();
}
}
Future<void> storeData() async {
if (_atClient != null) {
var key = 'name';
var value = 'Flutter Developer';
var metadata = Metadata()..ttl = 3600; // 设置TTL为3600秒
try {
await _atClient!.put(key, value, metadata: metadata);
print('Data stored successfully');
} catch (e) {
print('Error storing data: $e');
}
}
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('AtClient Example'),
),
body: Center(
child: Text(
'Data storage initialized. Check console for details.',
style: TextStyle(fontSize: 20),
),
),
),
);
}
}
在这个示例中,我们做了以下几件事:
- 配置和初始化
AtClientManager
:设置根域名、命名空间、本地日志存储路径以及是否优先在线等参数。 - 获取
AtClient
实例:通过AtClientManager
获取AtClient
实例。 - 存储数据:使用
AtClient
的put
方法存储键值对数据,并设置元数据(如TTL)。
请注意,此示例仅展示了基本的初始化和数据存储操作。在实际应用中,你可能需要处理更多的错误情况、配置网络请求、管理用户认证等。
此外,确保你的应用已经正确配置了必要的网络权限,并且你的AtSign已经正确注册和配置在AtSign生态中。对于更详细的使用指南和高级功能,请参考at_client_sdk
的官方文档。