Flutter数据表转模型插件drift_table_to_model的使用
Flutter数据表转模型插件drift_table_to_model的使用
drift_table_to_model
Dart builder来生成模型类,从drift表类中。
所有pull请求都欢迎添加更多支持或bug修复
快速开始
打开终端并执行 dart pub add drift_table_to_model
在 .dart 文件中加入 part 'models.g.dart'; 行(我的建议是在一个文件中创建 models.dart 文件以便于导入)
再次打开终端并执行 dart run build_runner build
一个包含生成模型类的 models.g.dart 文件将会在你放置 part 行的同一目录下生成。
名称转换
对于命名方式为 nameT 或 nameTable 的类,生成的类名称为 name。
对于命名方式为 name 的类,生成的类名称为 nameModel。
构建器选项
use_final
是否在字段上使用finaluse_const
是否在构造函数上使用const
如果你的项目根目录中还没有 build.yaml 文件,则需要创建一个。
配置 build.yaml 文件如下:
targets:
$default:
builders:
drift_table_to_model|drift_model_builder:
options:
use_final: true
use_const: true
并修改 use_final 和 use_const。
API 覆盖范围
| 支持 | Dart类型 | 列 | 对应的SQLite类型 |
|---|---|---|---|
| ✔️ | int |
integer() |
INTEGER |
| ✔️ | BigInt |
int64() |
INTEGER (适合网页上的大数值) |
| ✔️ | double |
real() |
REAL |
| ✔️ | bool |
boolean() |
INTEGER, 带有 CHECK 只允许 0 或 1 |
| ✔️ | String |
text() |
TEXT |
| ✔️ | DateTime |
dateTime() |
INTEGER (默认) 或 TEXT, 取决于选项 |
| ✔️ | Uint8List |
blob() |
BLOB |
| ❌ | Enum |
intEnum() |
INTEGER (更多信息参见这里) |
| ❌ | Enum |
textEnum() |
TEXT (更多信息参见这里) |
示例
模型类定义
import 'package:drift/drift.dart';
// 定义枚举
enum Status {
none,
running,
stopped,
paused
}
// 定义表类
class TestT extends Table {
// 定义列
IntColumn get id => integer().autoIncrement()();
TextColumn get name => text()();
RealColumn get real => real()();
Int64Column get big => int64()();
BoolColumn get b => boolean()();
DateTimeColumn get dt => dateTime()();
BlobColumn get bl => blob()();
IntColumn get statusI => intEnum<Status>()();
TextColumn get statusT => textEnum<Status>()();
}
生成的模型类
// 生成的模型类
class Test {
final int id;
final String name;
final double real;
final BigInt big;
final bool b;
final DateTime dt;
final Uint8List bl;
final int statusI;
final String statusT;
// 构造函数
const Test({
required this.id,
required this.name,
required this.real,
required this.big,
required this.b,
required this.dt,
required this.bl,
required this.statusI,
required this.statusT,
});
}
更多关于Flutter数据表转模型插件drift_table_to_model的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter数据表转模型插件drift_table_to_model的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
drift_table_to_model 是一个用于 Flutter 的代码生成插件,它可以帮助开发者将数据库表(使用 drift 库定义的)自动生成对应的 Dart 模型类。这样可以减少手动编写模型类的工作量,并提高代码的一致性和可维护性。
1. 安装 drift 和 drift_table_to_model
首先,你需要在 pubspec.yaml 文件中添加 drift 和 drift_table_to_model 的依赖:
dependencies:
drift: ^2.0.0
drift_table_to_model: ^1.0.0
dev_dependencies:
build_runner: ^2.0.0
drift_dev: ^2.0.0
然后运行 flutter pub get 来安装依赖。
2. 定义数据库表
使用 drift 定义数据库表。例如,定义一个 User 表:
import 'package:drift/drift.dart';
class Users extends Table {
IntColumn get id => integer().autoIncrement()();
TextColumn get name => text().withLength(min: 1, max: 50)();
IntColumn get age => integer().nullable()();
}
3. 使用 drift_table_to_model 生成模型类
在 pubspec.yaml 文件中,配置 drift_table_to_model 插件:
flutter:
assets:
- lib/database/database.dart
builders:
drift_table_to_model:
enabled: true
target: lib/database/database.dart
然后,运行以下命令来生成模型类:
flutter pub run build_runner build
4. 查看生成的模型类
生成的模型类将会位于 lib/models 目录下。例如,User 表将会生成 UserModel 类:
class UserModel {
final int id;
final String name;
final int? age;
UserModel({
required this.id,
required this.name,
this.age,
});
factory UserModel.fromJson(Map<String, dynamic> json) {
return UserModel(
id: json['id'],
name: json['name'],
age: json['age'],
);
}
Map<String, dynamic> toJson() {
return {
'id': id,
'name': name,
'age': age,
};
}
}
5. 使用生成的模型类
你可以在项目中使用生成的模型类来处理数据。例如:
void main() {
final user = UserModel(
id: 1,
name: 'John Doe',
age: 30,
);
print(user.toJson());
}

