Flutter 全平台 sqlite/sqlcipher orm 框架 drift(原moor)的使用

文章介绍了Flutter中DriftORM框架的使用,它基于dart代码生成器,适用于全平台,包括通过ffi调用sqlite库和Web平台使用WebAssembly。Drift还支持加密数据库,例如通过sqlcipher。文章提供了详细的依赖引入、数据库创建和操作的示例,以及针对Web平台的特殊处理方法。

前言

Flutter 目前比较好用的 sqlite 数据库 orm 框架就是drift (以前叫作moor),由于dart语言不支持反射,这个框架使用了dart代码生成器,自动生成代码。这个数据库框架的优点是支持全平台使用,此框架通过使用datr语言的 ffi 功能(相当于JAVA的jni)来调用 sqlite 动态库 实现数据库操作,
Web平台是通过 wasm(浏览器可以运行的二进制文件,可由C、C++、rust、go 等语言编译而来)来调用sqlite, Web平台的sqlite数据库文件则通过 indexed db 虚拟文件系统保存。下面来介绍一下使用方法。

官方文档

https://drift.simonbinder.eu/docs/platforms/

先导入依赖

dependencies:
  drift: ^2.4.2
  sqlite3_flutter_libs: ^0.5.0
  #sqlcipher_flutter_libs: ^0.5.1
  path_provider: ^2.0.0
  path: ^1.8.3

dev_dependencies:
  drift_dev: ^2.4.1
  build_runner: ^2.3.3

这里是对每个包的作用的快速概述:

  • drift: 这是定义大多数 api 的核心包
  • sqlite3_flutter_libs: 提供 sqlite 动态库,如果要加密数据库,请使用 sqlcipher_flutter_libs
  • sqlcipher_flutter_libs: 提供 sqlcipher (加密版sqlite) 动态库,如果要加密数据库请添加此依赖,并移除sqlite3_flutter_libs依赖(共存会冲突)
  • path_provider 和 path:用于寻找合适的位置来存放数据库。 由 Flutter 和 Dart 团队维护
  • drift_dev:drift自动生成代码工具、 不会包含在最终应用程序中。
  • build_runner: 代码生成的通用工具,由 Dart 团队维护

下面仅示例使用加密版sqlite:
创建一个文件 databases.dart

import 'dart:io';

import 'package:drift/drift.dart';
import 'package:drift/native.dart';
import 'package:logger/logger.dart';
import 'package:path/path.dart' as p;
import 'package:path_provider/path_provider.dart';

//引入自动生成的代码,刚开始会报错,运行 flutter pub run build_runner build 即可
part 'database.g.dart';

//数据库密码
const _encryptionPassword = 'password';

//定义一个表
class Notes extends Table {
   
   
  IntColumn get id => integer().autoIncrement()();

  TextColumn get content => text()();
}

//这个注解告诉 Drift 创建一个包含 我们上面定义的 Notes 表的数据库类(数据库操作类)
(tables: [Notes])
class MyEncryptedDatabase ext
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值