Flutter数据库生成与操作插件sup_gen_sqler的使用

简介

sup_gen_sqler是一个用于从 Supabase PostgreSQL 数据库生成 Dart 类和枚举的插件。它简化了将数据库模式集成到 Dart/Flutter 项目中的过程。

特性

  • 自动生成 Dart 类:从 PostgreSQL 表自动创建 Dart 类。
  • 复制枚举类型和视图:可以从 public 模式或指定模式复制枚举类型和视图。
  • 易于配置和无缝集成

sup_gen_sqler的安装

1. 添加插件到项目

在项目的 pubspec.yaml 文件中添加以下依赖项:

dependencies:
  sup_gen_sqler: ^<latest_version>
dev_dependencies:
  build_runner: ^2.3.3

<latest_version> 替换为最新版本号。

运行以下命令以获取插件:

flutter pub get
# 或
dart pub get
2. 配置项目
添加配置到 pubspec.yaml
sup_gen_sqler:
  output: lib/supabase_models # 输出文件夹路径
  enable: true # 启用或禁用插件
  schema: 'public' # 使用的模式
  useSsl: false # 控制是否需要 SSL 连接
添加 .env 文件

在项目根目录下创建一个 .env 文件,并包含 Supabase 数据库凭证:

# .env 文件
SUPABASE_DB_USER=postgres
SUPABASE_DB_HOST=DB_HOST
SUPABASE_DB_PORT=DB_PORT
SUPABASE_DB_PASSWORD=YOUR_DB_PASSWORD
SUPABASE_DB_SCHEMA=public

注意:请确保 .env 文件的安全性,不要将其提交到版本控制中。

3. 生成类

运行以下命令以生成类:

dart run build_runner build

完成后,你会在指定的输出文件夹中看到以下文件:

  • supabase_enums.gen.dart:用于枚举
  • supabase_tables.gen.dart:用于表

示例代码

假设你已经完成了上述配置,并成功生成了类文件。以下是一个简单的示例,展示如何使用生成的类进行数据库操作。

1. 导入生成的类
import 'lib/supabase_models/supabase_tables.gen.dart';
import 'lib/supabase_models/supabase_enums.gen.dart';
2. 插入数据
void insertData() async {
  // 创建 Supabase 客户端实例
  final client = SupabaseClient(
    supabaseUrl: 'https://your-supabase-url.supabase.co',
    supabaseKey: 'your-supabase-key',
  );

  // 创建一个新的记录
  final newRecord = MyTable(
    id: 1,
    name: 'John Doe',
    age: 30,
  );

  // 插入数据
  final response = await client.from('my_table').insert(newRecord).execute();

  print(response);
}
3. 查询数据
void fetchData() async {
  final client = SupabaseClient(
    supabaseUrl: 'https://your-supabase-url.supabase.co',
    supabaseKey: 'your-supabase-key',
  );

  // 查询所有记录
  final response = await client.from('my_table').select().execute();

  print(response.data);
}
4. 更新数据
void updateData() async {
  final client = SupabaseClient(
    supabaseUrl: 'https://your-supabase-url.supabase.co',
    supabaseKey: 'your-supabase-key',
  );

  // 更新特定记录
  final response = await client.from('my_table')
    .update({'name': 'Jane Doe'})
    .eq('id', 1)
    .execute();

  print(response);
}
5. 删除数据
void deleteData() async {
  final client = SupabaseClient(
    supabaseUrl: 'https://your-supabase-url.supabase.co',
    supabaseKey: 'your-supabase-key',
  );

  // 删除特定记录
  final response = await client.from('my_table').delete().eq('id', 1).execute();

  print(response);
}

更多关于Flutter数据库生成与操作插件sup_gen_sqler的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter数据库生成与操作插件sup_gen_sqler的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


sup_gen_sqler 是一个用于 Flutter 的代码生成插件,旨在简化 SQLite 数据库的操作。它通过生成与数据库表对应的模型类和 CRUD(创建、读取、更新、删除)操作代码,减少手动编写重复代码的工作量。以下是如何使用 sup_gen_sqler 的基本步骤:

1. 添加依赖

首先,在你的 pubspec.yaml 文件中添加 sup_gen_sqler 依赖:

dependencies:
  flutter:
    sdk: flutter
  sqflite: ^2.0.0+4
  path: ^1.8.0

dev_dependencies:
  build_runner: ^2.1.7
  sup_gen_sqler: ^0.1.0

2. 创建数据库模型

在你的项目中创建一个 Dart 文件,例如 models/user.dart,并定义一个模型类。使用 @Table 注解来标记这个类为数据库表:

import 'package:sup_gen_sqler/sup_gen_sqler.dart';

part 'user.g.dart';

@Table(name: 'users')
class User {
  @PrimaryKey(autoIncrement: true)
  int? id;

  @Column()
  String name;

  @Column()
  int age;

  User({this.id, required this.name, required this.age});
}

3. 生成代码

运行以下命令来生成数据库操作代码:

flutter pub run build_runner build

这将会生成 user.g.dart 文件,其中包含了与 User 表对应的 CRUD 操作代码。

4. 使用生成的代码

在你的应用程序中,你可以使用生成的代码来操作数据库。例如:

import 'package:sqflite/sqflite.dart';
import 'package:path/path.dart';
import 'models/user.dart';

void main() async {
  // 打开数据库
  final database = openDatabase(
    join(await getDatabasesPath(), 'my_database.db'),
    onCreate: (db, version) {
      return db.execute(
        'CREATE TABLE users(id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER)',
      );
    },
    version: 1,
  );

  // 插入数据
  final user = User(name: 'John Doe', age: 30);
  await database.insert('users', user.toMap());

  // 查询数据
  final List<Map<String, dynamic>> maps = await database.query('users');
  final users = List.generate(maps.length, (i) {
    return User(
      id: maps[i]['id'],
      name: maps[i]['name'],
      age: maps[i]['age'],
    );
  });

  // 打印查询结果
  users.forEach((user) {
    print('User: ${user.name}, Age: ${user.age}');
  });
}

5. 更新和删除数据

你可以使用生成的代码来更新和删除数据:

// 更新数据
final updatedUser = User(id: 1, name: 'Jane Doe', age: 25);
await database.update('users', updatedUser.toMap(), where: 'id = ?', whereArgs: [1]);

// 删除数据
await database.delete('users', where: 'id = ?', whereArgs: [1]);

6. 关闭数据库

在应用程序结束时,记得关闭数据库:

await database.close();
回到顶部