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
是否在字段上使用final
use_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());
}