Flutter Hasura集成插件hasura_helper的使用
Flutter Hasura集成插件hasura_helper的使用
Dart Hasura Helper
一个用于轻松构建查询和突变的 Hasura GraphQL 辅助工具。
使用方法
查看 示例。
贡献
此库目前不完整,并且不包含所有 GraphQL 操作(例如订阅)。欢迎通过 其 GitHub 仓库 进行贡献。
示例代码
import 'package:hasura_helper/hasura_helper.dart';
void main() {
Hasura? request;
/// 基本用法
request = Hasura.insert(
table: 'users',
object: {
'username': 'rasitayaz',
'profession': 'developer',
},
returning: {'id'}, // 返回字段
);
print(request.body); // 输出请求体
/// 多个查询(或突变)
request = Hasura.query(
actions: [
HasuraQuery.list(
table: 'users',
where: { // 查询条件
'profession': {'_eq': 'developer'},
},
returning: {'id', 'username'}, // 返回字段
),
HasuraQuery.byId(
table: 'users',
id: 1,
returning: {'id', 'profession'}, // 返回字段
),
],
);
print(request.body); // 输出请求体
/// 使用 JSONB 变量
request = Hasura.updateById(
table: 'users',
id: 1,
variables: {
'education': {
'school': 'marmara university',
'department': 'computer engineering',
},
},
args: {
'_set': {'education': '\$education'}, // 设置教育信息
},
returning: {'id'}, // 返回字段
);
print(request.body); // 输出请求体
/// 使用实体进行关系查询
request = Hasura.queryById(
table: 'users',
id: 1,
returning: {
'id',
HasuraEntity(
'messages',
args: {
'limit': 20,
'order_by': {'date': 'desc'}, // 按日期降序排序
},
fields: {'id', 'text'}, // 返回字段
),
},
);
print(request.body); // 输出请求体
}
更多关于Flutter Hasura集成插件hasura_helper的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter Hasura集成插件hasura_helper的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何在Flutter项目中集成并使用hasura_helper
插件的示例代码案例。hasura_helper
是一个用于与Hasura GraphQL引擎交互的Flutter插件。它简化了与Hasura后端服务的通信,包括查询和变更操作。
1. 添加依赖
首先,你需要在pubspec.yaml
文件中添加hasura_helper
依赖:
dependencies:
flutter:
sdk: flutter
hasura_helper: ^最新版本号 # 请替换为实际的最新版本号
然后运行flutter pub get
来安装依赖。
2. 配置Hasura客户端
在你的Flutter应用中,配置Hasura客户端以连接到你的Hasura GraphQL端点。以下是一个示例:
import 'package:flutter/material.dart';
import 'package:hasura_helper/hasura_helper.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Hasura Integration',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: HasuraScreen(),
);
}
}
class HasuraScreen extends StatefulWidget {
@override
_HasuraScreenState createState() => _HasuraScreenState();
}
class _HasuraScreenState extends State<HasuraScreen> {
HasuraClient? _hasuraClient;
@override
void initState() {
super.initState();
// 配置Hasura客户端
_hasuraClient = HasuraClient(
endpoint: 'https://你的Hasura端点.com/v1/graphql', // 替换为你的Hasura GraphQL端点
adminSecret: '你的admin密钥', // 如果需要管理权限,请提供admin密钥
headers: {
'x-hasura-admin-secret': '你的admin密钥', // 或者使用其他需要的头信息
},
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter Hasura Integration'),
),
body: Center(
child: ElevatedButton(
onPressed: () async {
// 示例:执行一个查询
final queryResult = await _executeQuery();
print(queryResult);
},
child: Text('Execute Query'),
),
),
);
}
Future<dynamic> _executeQuery() async {
final query = '''
query {
users {
id
name
}
}
''';
try {
final result = await _hasuraClient!.query(query: query);
return result['data'];
} catch (e) {
print('Error executing query: $e');
return null;
}
}
}
3. 执行变更操作
除了查询,你还可以使用hasura_helper
执行变更操作(如插入、更新、删除)。以下是一个示例:
Future<dynamic> _executeMutation() async {
final mutation = '''
mutation {
insert_users_one(object: {name: "John Doe", email: "john.doe@example.com"}) {
id
name
email
}
}
''';
try {
final result = await _hasuraClient!.mutation(query: mutation);
return result['data'];
} catch (e) {
print('Error executing mutation: $e');
return null;
}
}
你可以将上面的_executeMutation
方法添加到你的_HasuraScreenState
类中,并在UI中添加一个按钮来触发这个变更操作。
4. 完整示例
完整的示例代码如下:
import 'package:flutter/material.dart';
import 'package:hasura_helper/hasura_helper.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Hasura Integration',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: HasuraScreen(),
);
}
}
class HasuraScreen extends StatefulWidget {
@override
_HasuraScreenState createState() => _HasuraScreenState();
}
class _HasuraScreenState extends State<HasuraScreen> {
HasuraClient? _hasuraClient;
@override
void initState() {
super.initState();
_hasuraClient = HasuraClient(
endpoint: 'https://你的Hasura端点.com/v1/graphql', // 替换为你的Hasura GraphQL端点
adminSecret: '你的admin密钥', // 如果需要管理权限,请提供admin密钥
headers: {
'x-hasura-admin-secret': '你的admin密钥', // 或者使用其他需要的头信息
},
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter Hasura Integration'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ElevatedButton(
onPressed: () async {
final queryResult = await _executeQuery();
print(queryResult);
},
child: Text('Execute Query'),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: () async {
final mutationResult = await _executeMutation();
print(mutationResult);
},
child: Text('Execute Mutation'),
),
],
),
),
);
}
Future<dynamic> _executeQuery() async {
final query = '''
query {
users {
id
name
}
}
''';
try {
final result = await _hasuraClient!.query(query: query);
return result['data'];
} catch (e) {
print('Error executing query: $e');
return null;
}
}
Future<dynamic> _executeMutation() async {
final mutation = '''
mutation {
insert_users_one(object: {name: "John Doe", email: "john.doe@example.com"}) {
id
name
email
}
}
''';
try {
final result = await _hasuraClient!.mutation(query: mutation);
return result['data'];
} catch (e) {
print('Error executing mutation: $e');
return null;
}
}
}
这个示例展示了如何在Flutter应用中集成并使用hasura_helper
插件来执行GraphQL查询和变更操作。请确保替换示例代码中的Hasura端点和admin密钥为你的实际值。