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 行的同一目录下生成。

名称转换

对于命名方式为 nameTnameTable 的类,生成的类名称为 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_finaluse_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

1 回复

更多关于Flutter数据表转模型插件drift_table_to_model的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


drift_table_to_model 是一个用于 Flutter 的代码生成插件,它可以帮助开发者将数据库表(使用 drift 库定义的)自动生成对应的 Dart 模型类。这样可以减少手动编写模型类的工作量,并提高代码的一致性和可维护性。

1. 安装 driftdrift_table_to_model

首先,你需要在 pubspec.yaml 文件中添加 driftdrift_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());
}
回到顶部