Flutter Hasura集成插件hasura_helper的使用

Flutter Hasura集成插件hasura_helper的使用

Dart Hasura Helper

Pub GitHub Buy Me A Coffee

一个用于轻松构建查询和突变的 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

1 回复

更多关于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密钥为你的实际值。

回到顶部