Flutter数据库加密插件flutter_sqlcipher的使用
flutter_sqlcipher介绍
flutter_sqlcipher
是一个用于在 Flutter 中使用 SQLCipher 的插件。SQLCipher 是一个开源的 SQLite 扩展库,提供了透明的 256 位 AES 数据库加密功能。
特性:
- 支持 SQLCipher 的所有功能。
- 简单易用,适合需要对 SQLite 数据库进行加密的场景。
文档
更多详细信息可以查看官方文档:https://github.com/drydart/flutter_sqlcipher
Bug报告
如遇到问题,可以通过以下链接提交问题:https://github.com/drydart/flutter_sqlcipher/issues
flutter_sqlcipher使用示例
以下是一个完整的示例,展示如何在 Flutter 应用中使用 flutter_sqlcipher
插件。
示例代码
/* This is free and unencumbered software released into the public domain. */
import 'package:flutter/material.dart';
import 'package:flutter_sqlcipher/flutter_sqlcipher.dart'; // 引入 flutter_sqlcipher 插件
// 主屏幕
class MainScreen extends StatelessWidget {
final db = SQLCipher.openDatabase( // 打开或创建加密数据库
"example.db", // 数据库文件名
password: "my_secure_password", // 设置数据库密码
version: 1, // 数据库版本号
onCreate: (db) async {
await db.execute("CREATE TABLE IF NOT EXISTS test (id INTEGER PRIMARY KEY, name TEXT)"); // 创建表
},
);
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Flutter SQLCipher 示例"),
),
body: FutureBuilder( // 使用 FutureBuilder 来处理异步操作
future: db.then((db) => db.query("test")), // 查询数据
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
if (snapshot.hasError) {
return Center(child: Text("Error: ${snapshot.error}"));
}
return ListView.builder(
itemCount: snapshot.data.length, // 数据长度
itemBuilder: (context, index) {
final row = snapshot.data[index];
return ListTile(
title: Text(row["name"]), // 显示数据
);
},
);
}
return Center(child: CircularProgressIndicator()); // 加载指示器
},
),
floatingActionButton: FloatingActionButton(
onPressed: () async { // 添加数据按钮
final db = await SQLCipher.openDatabase(
"example.db",
password: "my_secure_password",
);
await db.insert("test", {"name": "Flutter"}); // 插入数据
Navigator.of(context).pop(); // 返回刷新页面
},
child: Icon(Icons.add),
),
);
}
}
// 主应用
void main() => runApp(App());
class App extends StatefulWidget {
[@override](/user/override)
State<App> createState() => _AppState();
}
class _AppState extends State<App> {
[@override](/user/override)
void initState() {
super.initState();
}
[@override](/user/override)
void dispose() {
super.dispose();
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
color: Colors.grey,
theme: ThemeData(
primaryColor: Colors.black,
brightness: Brightness.dark,
),
home: MainScreen(), // 启动主屏幕
routes: <String, WidgetBuilder>{},
);
}
}
1 回复