Flutter Apollo GraphQL 客户端插件apollo的使用

apollo

Apollo 是一个用于 Flutter 的 GraphQL 客户端插件。

开始使用

本项目是一个起点,展示了如何在 Flutter 中使用 Apollo 插件。你可以通过以下步骤开始使用。

示例代码

以下是使用 Apollo 插件的基本示例代码。

example/lib/main.dart

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

import 'package:flutter/services.dart';
import 'package:apollo/apollo.dart';

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

class MyApp extends StatefulWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _platformVersion = '未知';

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

  // 平台消息是异步的,所以我们初始化在一个异步方法中。
  Future<void> initPlatformState() async {
    String platformVersion;
    // 平台消息可能会失败,所以我们使用一个包含 PlatformException 的 try/catch 块。
    // 我们还处理了消息可能返回 null 的情况。
    try {
      platformVersion = await Apollo.platformVersion ?? '未知平台版本';
    } on PlatformException {
      platformVersion = '获取平台版本失败。';
    }

    // 如果在异步平台消息飞行时小部件从树中移除,我们希望丢弃回复而不是调用
    // setState 来更新我们的不存在的外观。
    if (!mounted) return;

    setState(() {
      _platformVersion = platformVersion;
    });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('插件示例应用'),
        ),
        body: Center(
          child: Text('运行于: $_platformVersion\n'),
        ),
      ),
    );
  }
}

说明

  • 导入必要的包import 'package:flutter/material.dart';import 'package:apollo/apollo.dart'; 是必须的。
  • 初始化状态:在 initState 方法中调用 initPlatformState 方法来获取平台版本信息。
  • 异步操作:由于平台消息是异步的,我们在 initPlatformState 方法中使用 asyncawait 关键字来处理异步操作。
  • 错误处理:使用 try/catch 块来捕获可能发生的异常,并设置默认值。
  • 状态管理:使用 setState 方法来更新 UI。

以上就是如何在 Flutter 中使用 Apollo 插件的基本示例。希望对你有所帮助!


更多关于Flutter Apollo GraphQL 客户端插件apollo的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter Apollo GraphQL 客户端插件apollo的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在 Flutter 中使用 Apollo GraphQL 客户端插件可以帮助你轻松地与 GraphQL API 进行交互。apollo_client 是一个流行的 Dart 包,它提供了与 Apollo GraphQL 客户端类似的功能。以下是如何在 Flutter 项目中使用 apollo_client 的基本步骤。

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 apollo_clientgraphql_flutter 依赖。

dependencies:
  flutter:
    sdk: flutter
  apollo_client: ^3.0.0
  graphql_flutter: ^5.0.0

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

2. 创建 Apollo 客户端

接下来,你需要创建一个 Apollo 客户端实例,并配置它与你的 GraphQL API 进行通信。

import 'package:apollo_client/apollo_client.dart';
import 'package:graphql_flutter/graphql_flutter.dart';

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

  final HttpLink httpLink = HttpLink(
    'https://your-graphql-api.com/graphql',
  );

  final AuthLink authLink = AuthLink(
    getToken: () async => 'Bearer <your_token>',
  );

  final Link link = authLink.concat(httpLink);

  final ApolloClient apolloClient = ApolloClient(
    cache: GraphQLCache(),
    link: link,
  );

  runApp(MyApp(apolloClient: apolloClient));
}

3. 使用 Apollo 客户端进行查询

你可以使用 Query 组件来执行 GraphQL 查询。

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

class MyApp extends StatelessWidget {
  final ApolloClient apolloClient;

  MyApp({required this.apolloClient});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return GraphQLProvider(
      client: apolloClient,
      child: MaterialApp(
        home: HomeScreen(),
      ),
    );
  }
}

class HomeScreen extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Apollo GraphQL Example'),
      ),
      body: Query(
        options: QueryOptions(
          document: gql('''
            query GetPosts {
              posts {
                id
                title
                body
              }
            }
          '''),
        ),
        builder: (QueryResult result, {fetchMore, refetch}) {
          if (result.hasException) {
            return Text(result.exception.toString());
          }

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

          final posts = result.data?['posts'];

          return ListView.builder(
            itemCount: posts.length,
            itemBuilder: (context, index) {
              final post = posts[index];
              return ListTile(
                title: Text(post['title']),
                subtitle: Text(post['body']),
              );
            },
          );
        },
      ),
    );
  }
}

4. 使用 Apollo 客户端进行突变

你可以使用 Mutation 组件来执行 GraphQL 突变。

class AddPostScreen extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Add Post'),
      ),
      body: Mutation(
        options: MutationOptions(
          document: gql('''
            mutation AddPost($title: String!, $body: String!) {
              addPost(title: $title, body: $body) {
                id
                title
                body
              }
            }
          '''),
        ),
        builder: (
          RunMutation runMutation,
          QueryResult? result,
        ) {
          return Column(
            children: [
              TextField(
                decoration: InputDecoration(labelText: 'Title'),
                onChanged: (value) {
                  // Handle title input
                },
              ),
              TextField(
                decoration: InputDecoration(labelText: 'Body'),
                onChanged: (value) {
                  // Handle body input
                },
              ),
              ElevatedButton(
                onPressed: () {
                  runMutation({
                    'title': 'New Post Title',
                    'body': 'New Post Body',
                  });
                },
                child: Text('Add Post'),
              ),
              if (result != null)
                Text(result.hasException
                    ? result.exception.toString()
                    : 'Post Added!'),
            ],
          );
        },
      ),
    );
  }
}

5. 处理订阅

如果你需要使用 GraphQL 订阅,你可以使用 Subscription 组件。

class PostSubscriptionScreen extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Post Subscription'),
      ),
      body: Subscription(
        options: SubscriptionOptions(
          document: gql('''
            subscription OnPostAdded {
              postAdded {
                id
                title
                body
              }
            }
          '''),
        ),
        builder: (QueryResult result) {
          if (result.hasException) {
            return Text(result.exception.toString());
          }

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

          final post = result.data?['postAdded'];

          return ListTile(
            title: Text(post['title']),
            subtitle: Text(post['body']),
          );
        },
      ),
    );
  }
}
回到顶部