Flutter GraphQL数据请求插件nhost_graphql_adapter的使用

发布于 1周前 作者 h691938207 来自 Flutter

Flutter GraphQL数据请求插件nhost_graphql_adapter的使用

Nhost GraphQL Adapter for Dart

Nhostgraphql 包集成,允许开发者在Flutter和Dart项目中轻松进行GraphQL数据请求。如果你正在为Flutter开发应用程序,可以考虑使用nhost_flutter_graphql,它提供了与graphql_flutter配合良好的小部件。

Getting Started

最新版本安装

pubspec.yaml文件中添加依赖:

dependencies:
  nhost_graphql_adapter: ^3.0.0

然后执行flutter pub get以安装最新版本。

示例代码

Todo 示例

下面是一个简单的Todo应用示例,它查询了Nhost Quick Start创建的todos表。这个例子展示了如何使用nhost_graphql_adapter来获取、创建、更新和删除Todo条目。

首先,确保你已经在Nhost控制台创建了一个todos表,并且已经设置了正确的权限。

接下来,在你的Flutter项目中,你可以创建一个名为main.dart的文件,内容如下:

import 'package:flutter/material.dart';
import 'package:nhost_graphql_adapter/nhost_graphql_adapter.dart';
import 'package:graphql_flutter/graphql_flutter.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await initHiveForFlutter();

  final HttpLink httpLink = HttpLink('https://your-subdomain.nhost.run/v1/graphql');
  
  final NhostAuthLink authLink = NhostAuthLink(
    subdomain: 'your-subdomain',
    region: 'your-region',
  );

  final Link link = authLink.concat(httpLink);

  ValueNotifier<GraphQLClient> client = ValueNotifier(
    GraphQLClient(
      link: link,
      cache: GraphQLCache(store: HiveStore()),
    ),
  );

  runApp(MyApp(client: client));
}

class MyApp extends StatelessWidget {
  final ValueNotifier<GraphQLClient> client;

  MyApp({required this.client});

  @override
  Widget build(BuildContext context) {
    return GraphQLProvider(
      client: client,
      child: MaterialApp(
        title: 'Nhost GraphQL Adapter Demo',
        theme: ThemeData(
          primarySwatch: Colors.blue,
        ),
        home: TodosScreen(),
      ),
    );
  }
}

class TodosScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Todos'),
      ),
      body: Query(
        options: QueryOptions(
          document: gql(r'''
            query GetTodos {
              todos {
                id
                text
                completed
              }
            }
          '''),
        ),
        builder: (QueryResult result, {VoidCallback? refetch, FetchMore? fetchMore}) {
          if (result.hasException) {
            return Text(result.exception.toString());
          }

          if (result.isLoading) {
            return Center(child: CircularProgressIndicator());
          }

          List todos = result.data?['todos'] ?? [];

          return ListView.builder(
            itemCount: todos.length,
            itemBuilder: (context, index) {
              final todo = todos[index];
              return ListTile(
                title: Text(todo['text']),
                trailing: Checkbox(
                  value: todo['completed'],
                  onChanged: (bool? value) {
                    // Update the todo's completion status here
                  },
                ),
              );
            },
          );
        },
      ),
    );
  }
}

请记得替换your-subdomainyour-region为你自己的Nhost子域名和地区。

Links 示例

此外,还有另一个示例展示了如何通过组合自定义Link与本包提供的Link来创建一个GraphQLClient。这通常用于需要自定义网络请求或添加额外逻辑(如重试机制)的情况。详情可以参考Nhost官方仓库中的Links example

以上就是关于nhost_graphql_adapter的基本介绍及使用方法。希望这些信息对你有所帮助!如果有任何问题或者需要进一步的帮助,请随时提问。


更多关于Flutter GraphQL数据请求插件nhost_graphql_adapter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter GraphQL数据请求插件nhost_graphql_adapter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个使用 nhost_graphql_adapter 插件在 Flutter 中进行 GraphQL 数据请求的示例代码。这个插件通常用于与 NHost 后端服务进行集成。

首先,确保你已经在 pubspec.yaml 文件中添加了 nhost_graphql_adapter 依赖:

dependencies:
  flutter:
    sdk: flutter
  nhost_graphql_adapter: ^最新版本号  # 请替换为实际最新版本号

然后,运行 flutter pub get 来获取依赖。

接下来,创建一个 Flutter 应用并配置 nhost_graphql_adapter。以下是一个完整的示例,包括初始化客户端、执行查询和更新 UI:

import 'package:flutter/material.dart';
import 'package:nhost_graphql_adapter/nhost_graphql_adapter.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter GraphQL Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  NHostGraphQLAdapter? client;
  String? message;

  @override
  void initState() {
    super.initState();

    // 初始化 NHost GraphQL 客户端
    client = NHostGraphQLAdapter(
      endpoint: 'https://你的NHost后端URL/v1/graphql',  // 替换为你的NHost GraphQL端点
      headers: {
        'Authorization': 'Bearer 你的JWT令牌',  // 如果有JWT令牌,请添加
      },
    );

    // 执行查询
    fetchData();
  }

  void fetchData() async {
    try {
      final result = await client!.query(
        query: '''
        query {
          getMessage {
            id
            content
          }
        }
        ''',
      );

      if (result.data != null) {
        final messageData = result.data!['getMessage'];
        if (messageData != null && messageData.length > 0) {
          setState(() {
            message = messageData[0]['content'] as String?;
          });
        }
      }
    } catch (error) {
      print('Error fetching data: $error');
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter GraphQL Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'Message:',
              style: TextStyle(fontSize: 20),
            ),
            SizedBox(height: 10),
            Text(
              message ?? 'Loading...',
              style: TextStyle(fontSize: 24, fontWeight: FontWeight.bold),
            ),
          ],
        ),
      ),
    );
  }
}

代码说明:

  1. 依赖添加:在 pubspec.yaml 中添加 nhost_graphql_adapter 依赖。
  2. 初始化客户端:在 initState 方法中初始化 NHostGraphQLAdapter 客户端,并传入你的 NHost GraphQL 端点和可选的头部信息(如 JWT 令牌)。
  3. 执行查询:定义一个 fetchData 方法,使用 client.query 方法执行 GraphQL 查询,并处理查询结果。
  4. 更新 UI:在查询结果返回后,使用 setState 方法更新 UI,以显示查询到的消息内容。

注意事项:

  • 请确保你的 NHost 后端服务已正确配置,并且 GraphQL 端点可用。
  • 如果有 JWT 令牌,请确保在请求头部中正确添加。
  • 根据实际 GraphQL 查询结果的结构,调整数据解析逻辑。

这个示例展示了如何使用 nhost_graphql_adapter 插件在 Flutter 应用中进行 GraphQL 数据请求,并更新 UI 以显示查询结果。希望这对你有所帮助!

回到顶部