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
更多关于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();