Flutter SQLite代码生成插件brick_sqlite_generators的使用

Flutter SQLite代码生成插件brick_sqlite_generators的使用

Brick Sqlite Build

brick_sqlite_generators 是一个用于为使用 SqliteProvider 的 Brick 适配器提供(反)序列化函数的代码生成器。该包本身不生成代码,而是可以导入到其他 Brick 构建域中。

该包不应直接导入到最终的应用程序中,因为它不会生成代码。

使用方法

要使用 SqliteSerdes,你需要在自己的 AnnotationSuperGenerator 中应用它:

import 'package:brick_rest_generators/rest_serdes.dart';

class MyDomainGenerator extends AnnotationSuperGenerator<ConnectOfflineFirst> {
  final String superAdapterName;
  final String repositoryName;

  const OfflineFirstGenerator({
    this.superAdapterName = 'OfflineFirst',
    this.repositoryName = 'OfflineFirst',
  });

  /// 给定一个[element]和[annotation],构建生成器列表
  List<SerdesGenerator> buildGenerators(Element element, ConstantReader annotation) {
    // 创建 SqliteSerdes 实例
    final sqlite = SqliteSerdes(element, annotation, repositoryName: repositoryName);
    
    // 创建 OtherProviderSerdes 实例
    final otherProvider = OtherProviderSerdes(element, annotation, repositoryName: repositoryName);

    // 初始化生成器列表
    final generators = <SerdesGenerator>[];
    
    // 将 SqliteSerdes 生成器添加到列表中
    generators.addAll(sqlite.generators);
    
    // 将 OtherProviderSerdes 生成器添加到列表中
    generators.addAll(otherProvider.generators);
    
    // 返回生成器列表
    return generators;
  }
}

完整示例Demo

以下是一个完整的示例,展示了如何设置和使用 brick_sqlite_generators 插件来生成序列化和反序列化代码。

1. 添加依赖

首先,在 pubspec.yaml 文件中添加必要的依赖项:

dependencies:
  brick_sqlite_generators: ^x.x.x
  brick_offline_first: ^x.x.x
  # 其他依赖

2. 创建自定义生成器

创建一个自定义的生成器类,例如 MyDomainGenerator,并继承 AnnotationSuperGenerator

import 'package:brick_rest_generators/rest_serdes.dart';

class MyDomainGenerator extends AnnotationSuperGenerator<ConnectOfflineFirst> {
  final String superAdapterName;
  final String repositoryName;

  const MyDomainGenerator({
    this.superAdapterName = 'OfflineFirst',
    this.repositoryName = 'OfflineFirst',
  });

  /// 给定一个[element]和[annotation],构建生成器列表
  @override
  List<SerdesGenerator> buildGenerators(Element element, ConstantReader annotation) {
    // 创建 SqliteSerdes 实例
    final sqlite = SqliteSerdes(element, annotation, repositoryName: repositoryName);
    
    // 创建 OtherProviderSerdes 实例
    final otherProvider = OtherProviderSerdes(element, annotation, repositoryName: repositoryName);

    // 初始化生成器列表
    final generators = <SerdesGenerator>[];
    
    // 将 SqliteSerdes 生成器添加到列表中
    generators.addAll(sqlite.generators);
    
    // 将 OtherProviderSerdes 生成器添加到列表中
    generators.addAll(otherProvider.generators);
    
    // 返回生成器列表
    return generators;
  }
}

3. 配置构建脚本

确保在你的 build.yaml 文件中配置了正确的构建脚本,以便在构建时运行生成器:

targets:
  $default:
    builders:
      brick_sqlite_generators|sqlite_serdes:
        enabled: true
        generate_for:
          include:
            - lib/**/*.dart

4. 使用生成的代码

在你的应用程序中,你可以使用生成的序列化和反序列化函数来处理数据。例如:

import 'package:path/path.dart' as p;
import 'package:sqflite/sqflite.dart';
import 'package:brick_sqlite_generators/sqlite_serdes.dart';

class MyModel {
  int id;
  String name;

  MyModel({required this.id, required this.name});
}

void main() async {
  // 初始化数据库
  final databasePath = await getDatabasesPath();
  final db = await openDatabase(p.join(databasePath, 'my_database.db'));

  // 创建 SqliteSerdes 实例
  final sqlite = SqliteSerdes(MyModel, null, repositoryName: 'MyRepository');

  // 序列化对象
  final serialized = sqlite.serialize(MyModel(id: 1, name: 'John Doe'));
  
  print('Serialized: $serialized');
  
  // 反序列化对象
  final deserialized = sqlite.deserialize(serialized);
  
  print('Deserialized: ${deserialized.name}');
}

更多关于Flutter SQLite代码生成插件brick_sqlite_generators的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter SQLite代码生成插件brick_sqlite_generators的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


brick_sqlite_generators 是一个用于 Flutter 的代码生成插件,它可以帮助开发者自动生成 SQLite 数据库相关的代码。通过使用这个插件,你可以减少手动编写重复代码的工作量,并确保代码的一致性和正确性。

安装步骤

  1. 添加依赖:首先,你需要在 pubspec.yaml 文件中添加 brick_sqlite_generatorsbrick_sqlite 依赖。

    dependencies:
      brick_sqlite: ^0.1.0
    
    dev_dependencies:
      brick_sqlite_generators: ^0.1.0
      build_runner: ^2.1.0
    
  2. 运行 flutter pub get:安装依赖。

    flutter pub get
    

使用步骤

  1. 定义模型类:在你的项目中定义一个模型类,并使用 @SqliteSerializable 注解来标记它。

    import 'package:brick_sqlite/brick_sqlite.dart';
    
    @SqliteSerializable()
    class User {
      final int id;
      final String name;
      final int age;
    
      User({required this.id, required this.name, required this.age});
    }
    
  2. 生成代码:使用 build_runner 生成代码。

    flutter pub run build_runner build
    

    这将会生成一个 user.g.dart 文件,其中包含与 SQLite 相关的代码,如 UserAdapterUserFields

  3. 使用生成的代码:在你的项目中使用生成的代码来操作 SQLite 数据库。

    import 'package:brick_sqlite/brick_sqlite.dart';
    import 'user.dart'; // 你的模型类
    import 'user.g.dart'; // 生成的代码
    
    void main() async {
      final db = SqliteDb();
      await db.initialize();
    
      final user = User(id: 1, name: 'John Doe', age: 30);
    
      // 插入数据
      await db.insert<User>(user);
    
      // 查询数据
      final users = await db.get<User>();
      print(users); // 输出: [User(id: 1, name: John Doe, age: 30)]
    
      // 更新数据
      final updatedUser = User(id: 1, name: 'Jane Doe', age: 31);
      await db.update<User>(updatedUser);
    
      // 删除数据
      await db.delete<User>(1);
    }
回到顶部