Flutter 鸿蒙化实战:sqflite 适配 OpenHarmony,本地 SQLite 数据库
Flutter 鸿蒙化实战:sqflite 适配 OpenHarmony
前言
随着鸿蒙生态的快速发展,越来越多的 Flutter 应用需要适配 OpenHarmony 平台。但生态早期,大量常用三方库只有 Android / iOS 实现,鸿蒙侧只能自己造轮子。
为了解决这个问题,CPF-Flutter 社区对一批高频使用的 Flutter 三方库做了 OpenHarmony 平台适配,统一托管在 GitCode 的 CPF-Flutter 组织 下,全部通过 TAG 版本隔离、配套门禁编译验证,开箱即用。
本篇是系列文章之一,主角是 sqflite —— Flutter 最主流的本地 SQLite 数据库插件。
sqflite 是什么
sqflite 是 Flutter 生态标准的本地 SQLite 数据库方案,提供:
- 打开/关闭:
openDatabase、close; - 增删改查:
insert、update、delete、query; - 原生 SQL:
rawInsert/rawQuery/rawUpdate/rawDelete; - 建表/事务:
execute建表、transaction事务。
适合本地缓存、离线数据、联系人等结构化数据存储。
适配情况
| Flutter 框架版本 | TAG 名称 | 分支名 |
|---|---|---|
| 3.7 | 2.2.8-ohos-1.0.0 | master |
| 3.22 | 2.2.8-ohos-1.0.0 | master |
| 3.27 | 2.4.2-ohos-1.0.0 | br_v2.4.2_ohos |
| 3.35 | 2.4.2-ohos-1.0.0 | br_v2.4.2_ohos |
已验证环境(3.35 为例):Flutter 3.35.8-ohos-0.0.1;SDK 6.0.1(21);DevEco Studio 6.0.1.260;ROM 6.0.0.120 SP6。
[!NOTE] 3.7/3.22 使用 TAG
2.2.8-ohos-1.0.0(master),3.27/3.35 使用2.4.2-ohos-1.0.0(br_v2.4.2_ohos),请按版本选择对应 ref。
快速接入
在 pubspec.yaml 中添加 git 依赖:
dependencies:
sqflite:
git:
url: https://gitcode.com/CPF-Flutter/flutter_sqflite.git
# 按你的 Flutter 框架版本,从上方映射表选择对应 TAG
ref: 2.4.2-ohos-1.0.0
执行:
flutter pub get
使用示例
建库建表
import 'package:sqflite/sqflite.dart';
import 'package:path/path.dart';
Future<Database> openDb() async {
final dbPath = await getDatabasesPath();
final path = join(dbPath, 'app.db');
return openDatabase(
path,
version: 1,
onCreate: (db, version) async {
await db.execute('''
CREATE TABLE users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
age INTEGER
)
''');
},
);
}
增删改查
final db = await getDb();
// 插入
final id = await db.insert('users', {'name': '张三', 'age': 20});
// 查询
final rows = await db.query('users', where: 'age > ?', whereArgs: [18]);
// 更新
await db.update('users', {'age': 21}, where: 'id = ?', whereArgs: [id]);
// 删除
await db.delete('users', where: 'id = ?', whereArgs: [id]);
// 原生 SQL
final raw = await db.rawQuery('SELECT * FROM users');
完整示例:用户列表
import 'package:flutter/material.dart';
import 'package:sqflite/sqflite.dart';
import 'package:path/path.dart';
class DbPage extends StatefulWidget {
const DbPage({super.key});
State<DbPage> createState() => _DbPageState();
}
class _DbPageState extends State<DbPage> {
Database? _db;
void initState() {
super.initState();
_init();
}
Future<void> _init() async {
final path = join(await getDatabasesPath(), 'demo.db');
_db = await openDatabase(path, version: 1, onCreate: (db, v) async {
await db.execute('CREATE TABLE notes (id INTEGER PRIMARY KEY, text TEXT)');
});
await _db?.insert('notes', {'text': '你好,鸿蒙'});
}
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('数据库示例')),
body: FutureBuilder<List<Map<String, Object?>>>(
future: _db?.query('notes') ?? Future.value([]),
builder: (context, snap) => ListView.builder(
itemCount: snap.data?.length ?? 0,
itemBuilder: (ctx, i) => ListTile(title: Text(snap.data![i]['text'].toString())),
),
),
);
}
}
API 支持一览
| API | 说明 | ohos 支持 |
|---|---|---|
| openDatabase | 打开数据库 | yes |
| insert / update / delete / query | 增删改查 | yes |
| rawQuery / rawInsert | 原生 SQL | yes |
| transaction | 事务 | yes |
| execute | 执行建表等 DDL | yes |
[!TIP] ohos Support 为 yes 表示鸿蒙平台支持该能力,使用方式与 iOS / Android 保持一致。建议配合
path包拼接数据库路径。
仓库地址
- OpenHarmony 适配仓库:https://gitcode.com/CPF-Flutter/flutter_sqflite
- 使用问题反馈:请到 CPF-Flutter 社区 Issues 提交问题(社区统一收集跟进);本仓库 Issues 区亦可。
系列预告
截至目前,CPF-Flutter 社区已完成 250+ 个 Flutter 三方库的 OpenHarmony 平台适配,覆盖权限管理、UI 组件、设备信息、位置服务、媒体处理、网络、支付等多个领域,完整的适配清单(含每个库的版本映射表)见:
- 适配总览文档:https://gitcode.com/CPF-Flutter/docs/blob/main/ThirdpartyLibrarites.md
- 仓库组织:https://gitcode.com/CPF-Flutter
本系列后续会陆续挑选高频库展开讲解,比如权限管理(permission_handler)、日历(device_calendar)、语音合成(flutter_tts)、表情选择(emoji_picker_flutter)等。
如果你的 Flutter 应用正在计划适配鸿蒙,欢迎关注 CPF-Flutter 组织,也欢迎参与共建。
更多推荐


所有评论(0)