Flutter数据库查询生成插件query_gen的使用
Flutter数据库查询生成插件query_gen的使用
query_gen
受 rtk-query-codegen 启发
这是一个基于OpenApi规范(json)生成Dart模型和HTTP客户端的命令行工具。
该工具目前不支持所有OpenApi功能(主要是没有枚举支持)。
如何使用
首先全局激活插件:
dart pub global activate query_gen
然后运行它:
query_gen --partOf api.dart --fromUrl http://localhost:5000/swagger/v1/swagger.json > ./api.g.dart
你需要创建一个文件来暴露生成的代码。例如:
// api.dart
library my_api;
import 'dart:convert';
import 'package:http/http.dart';
part 'api.g.dart';
class ApiClient extends BaseClient with QueryClient {
final client = Client();
@override
Future<StreamedResponse> send(BaseRequest request) {
return client.send(request);
}
}
你可以自定义 send
方法以添加缓存、重试或认证等功能。
参数
--partOf <dart文件>
: 要包含在其中的Dart文件Uri。--fromUrl <url>
: 从该URL下载OpenApi规范。--fromFile <路径>
: 从此路径读取OpenApi规范。
完整示例Demo
以下是一个完整的示例代码,展示了如何使用 query_gen
插件生成API客户端代码。
import 'dart:convert';
import 'package:http/http.dart';
import 'package:query_gen/query_gen.dart';
void main() async {
// 从指定URL获取OpenApi规范
var response = await get(Uri.parse('http://localhost:5000/swagger/v1/swagger.json'));
// 解析获取到的数据
var source = jsonDecode(response.body);
// 创建QueryGenerator实例并生成代码
var query = QueryGenerator(source);
print(query.generate('api.g.dart'));
}
更多关于Flutter数据库查询生成插件query_gen的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter数据库查询生成插件query_gen的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
query_gen
是一个用于生成 Flutter 项目中的查询语句的代码生成插件。它可以帮助开发者自动生成与数据库交互的代码,减少手动编写重复的查询代码的工作量。query_gen
通常与 moor
或 drift
等数据库库一起使用,这些库是 Flutter 中常用的关系型数据库管理工具。
使用步骤
-
添加依赖: 首先,你需要在
pubspec.yaml
文件中添加query_gen
和moor
(或drift
)的依赖。dependencies: flutter: sdk: flutter moor: ^4.4.0 # 或者 drift: ^1.0.0 query_gen: ^1.0.0 dev_dependencies: build_runner: ^2.0.0 moor_generator: ^4.4.0 # 或者 drift_dev: ^1.0.0
-
定义数据库表: 使用
moor
或drift
定义数据库表和实体类。import 'package:moor/moor.dart'; import 'package:query_gen/query_gen.dart'; class Users extends Table { IntColumn get id => integer().autoIncrement()(); TextColumn get name => text()(); IntColumn get age => integer()(); }
-
生成查询代码: 使用
query_gen
生成查询代码。你可以在实体类上添加注解来指定生成的查询方法。@UseQueryGen() class UserQuery extends TableQuery<Users> { UserQuery(QueryExecutor executor) : super(executor); }
-
运行代码生成: 使用
build_runner
生成代码。在终端中运行以下命令:flutter pub run build_runner build
这将会生成一个名为
user_query.g.dart
的文件,其中包含了自动生成的查询方法。 -
使用生成的代码: 在你的 Flutter 项目中使用生成的查询方法。
void main() async { final query = UserQuery(executor); final allUsers = await query.getAll(); print(allUsers); }
生成的查询方法
query_gen
会自动生成一些常见的查询方法,例如:
getAll
: 获取所有记录getById
: 根据 ID 获取记录insert
: 插入新记录update
: 更新记录delete
: 删除记录
你还可以通过添加自定义注解来生成特定的查询方法。
自定义查询
如果你需要更复杂的查询,可以在生成的查询类中添加自定义方法。
extension CustomUserQuery on UserQuery {
Future<List<User>> getAdults() {
return (select(users)..where((u) => u.age.gt(18))).get();
}
}