Flutter数据库同步加密插件powersync_sqlcipher的使用
Flutter数据库同步加密插件powersync_sqlcipher的使用
PowerSync与SQLCipher SDK在Flutter中的使用#
PowerSync是一款用于构建具有即时响应UI/UX和简化状态转移的本地优先应用的同步引擎。它可以在客户端SQLite和服务器端Postgres、MongoDB或MySQL之间进行同步。
本包(powersync_sqlcipher
) 是为Flutter构建的PowerSync客户端SDK,并启用了SQLCipher加密。目前它处于测试版。这意味着只要经过充分的测试,它就可以在生产环境中安全使用。
如果你的Flutter应用不需要加密功能,我们建议使用powersync
SDK。
在你的项目中安装启用SQLCipher加密的PowerSync#
安装最新版本的包,例如:
flutter pub add powersync_sqlcipher
版本历史可以在这里查看:
dart run powersync_sqlcipher:setup_web
用法#
为了加密本地数据库,该SDK需要一些不同于powersync
包的设置:
import 'package:powersync_sqlcipher/powersync.dart';
/// 全局引用数据库
late final PowerSyncDatabase db;
final cipherFactory = PowerSyncSQLCipherOpenFactory(
path: path, key: "sqlcipher-encryption-key"); // https://www.zetetic.net/sqlcipher/sqlcipher-api/#key
db = PowerSyncDatabase.withFactory(cipherFactory, schema: schema);
开始使用#
我们的完整的SDK参考文档包含了你需要了解的所有信息,以便在你的项目中实现PowerSync。
变更日志#
该SDK的变更日志可以在这里查看:
https://pub.dev/packages/powersync_sqlcipher/changelog
API参考#
该SDK的完整API参考文档可以在这里查看:
https://pub.dev/documentation/powersync_sqlcipher/latest/powersync_sqlcipher/powersync_sqlcipher-library.html
示例#
有关使用PowerSync和Flutter构建的示例项目,请参阅我们的演示应用/示例项目画廊。大多数这些项目也可以在demos/
目录中找到。
发现错误或需要帮助?#
-
加入我们的Discord服务器,在那里你可以浏览社区话题,提出问题,分享反馈,或者只是打个招呼 :)
-
当你遇到错误时,请打开一个GitHub问题。
-
如果你有反馈或想法,请通过我们的公共路线图提交一个想法,或者与我们产品团队的一名成员安排一次聊天。
完整示例代码
import 'package:flutter/foundation.dart';
import 'package:powersync_sqlcipher/powersync.dart';
import 'package:path_provider/path_provider.dart';
import 'package:path/path.dart';
const schema = Schema([
Table('customers', [Column.text('name'), Column.text('email')])
]);
late PowerSyncDatabase db;
// 设置连接到后端的连接器,如果你想同步数据。
class BackendConnector extends PowerSyncBackendConnector {
PowerSyncDatabase db;
BackendConnector(this.db);
[@override](/user/override)
// 忽略: 可能会正常返回空值
Future<PowerSyncCredentials?> fetchCredentials() async {
// 实现fetchCredentials
}
[@override](/user/override)
Future<void> uploadData(PowerSyncDatabase database) async {
// 实现uploadData
}
}
openDatabase() async {
var path = 'powersync-demo.db';
// getApplicationSupportDirectory在Web上不受支持
if (!kIsWeb) {
final dir = await getApplicationSupportDirectory();
path = join(dir.path, 'powersync-dart.db');
}
// 设置数据库
final cipherFactory = PowerSyncSQLCipherOpenFactory(
path: path, key: "sqlcipher-encryption-key");
db = PowerSyncDatabase.withFactory(cipherFactory, schema: schema);
await db.initialize();
// 运行本地语句
await db.execute(
'INSERT INTO customers(id, name, email) VALUES(uuid(), ?, ?)',
['Fred', 'fred@example.org']);
// 连接到后端
db.connect(connector: BackendConnector(db));
}
更多关于Flutter数据库同步加密插件powersync_sqlcipher的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter数据库同步加密插件powersync_sqlcipher的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter项目中,使用powersync_sqlcipher
插件可以实现数据库的同步和加密功能。以下是一个示例代码,展示了如何设置和使用powersync_sqlcipher
插件。
1. 添加依赖
首先,在pubspec.yaml
文件中添加powersync_sqlcipher
依赖:
dependencies:
flutter:
sdk: flutter
powersync_sqlcipher: ^最新版本号
然后运行flutter pub get
来获取依赖。
2. 配置数据库加密
接下来,配置数据库加密密钥。通常在应用启动时设置。
import 'package:flutter/material.dart';
import 'package:powersync_sqlcipher/powersync_sqlcipher.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 设置数据库加密密钥
await PowersyncSqlcipher.configure(
key: 'your-encryption-key', // 替换为你的加密密钥
);
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Powersync Sqlcipher Example'),
),
body: Center(
child: Text('Database is configured with encryption'),
),
),
);
}
}
3. 打开或创建数据库
使用PowersyncSqlcipher
打开或创建一个加密数据库。
import 'package:powersync_sqlcipher/powersync_sqlcipher.dart';
Future<Database> openDatabase() async {
return await PowersyncSqlcipher.openDatabase(
path: 'your_database.db', // 数据库文件路径
version: 1, // 数据库版本
onConfigure: (db) async {
// 在这里可以配置数据库,例如创建表等
await db.execute('CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT)');
},
onOpen: (db) async {
// 数据库打开时的回调
print('Database opened');
},
onUpgrade: (db, oldVersion, newVersion) async {
// 数据库升级时的回调
print('Upgrading database from $oldVersion to $newVersion');
},
onDowngrade: (db, oldVersion, newVersion) async {
// 数据库降级时的回调
print('Downgrading database from $oldVersion to $newVersion');
},
);
}
4. 执行数据库操作
一旦数据库打开,你可以执行CRUD操作。
Future<void> insertUser(Database db, String name) async {
await db.insert('users', {'name': name});
}
Future<List<Map<String, dynamic>>> queryUsers(Database db) async {
return await db.query('users');
}
Future<void> mainDatabaseOperations() async {
Database db = await openDatabase();
// 插入用户
await insertUser(db, 'Alice');
await insertUser(db, 'Bob');
// 查询用户
List<Map<String, dynamic>> users = await queryUsers(db);
print('Users: $users');
// 关闭数据库
await db.close();
}
5. 运行应用
将上述代码整合到你的Flutter应用中,并运行应用。确保在适当的位置调用mainDatabaseOperations
函数以执行数据库操作。
注意事项
- 确保在调用任何数据库操作之前已经正确配置了加密密钥。
- 根据实际需求处理数据库版本升级和降级。
- 加密密钥应妥善保管,避免硬编码在代码中。
通过上述步骤,你可以在Flutter项目中使用powersync_sqlcipher
插件实现加密数据库的同步操作。