Flutter AWS AppSync订阅功能插件aws_appsync_subscription的使用

Flutter AWS AppSync订阅功能插件aws_appsync_subscription的使用

该插件用于处理与AWS AppSync订阅的连接。

开始使用

在你的项目 pubspec.yaml 文件中添加以下依赖:

dependencies:
  appsync_subscription: ^1.0.1

然后运行 flutter pub get 来安装依赖。

使用示例

首先,在 Dart 文件中导入插件包:

import 'package:appsync_subscription/appsync_subscription.dart';

接下来,创建一个简单的 Flutter 应用并实现订阅功能。以下是一个完整的示例代码:

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

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  [@override](/user/override)
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final endPoint = "https://yourappsync.appsync-api.region.amazonaws.com/graphql";
  final apiKey = "your-api-key";
  final port = 443;
  final _appsyncSubscription = Subscription(endPoint, apiKey, port);

  [@override](/user/override)
  void initState() {
    super.initState();
    final query = {
      'query': '''subscription {
          onPublishResult(id: "12345") {
            id
          }
        }
        '''
    };
    _appsyncSubscription.subscribeToSubscription(query, _callBackFunc);
  }

  void _callBackFunc(data) {
    print('Data received from subscription $data');
    // 更新界面数据
    setState(() {});
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("AppSync 订阅示例"),
      ),
      body: Center(
        child: Text("等待接收数据..."),
      ),
    );
  }
}

代码解释

  1. 导入库

    import 'package:appsync_subscription/appsync_subscription.dart';
    
  2. 初始化参数

    final endPoint = "https://yourappsync.appsync-api.region.amazonaws.com/graphql";
    final apiKey = "your-api-key";
    final port = 443;
    final _appsyncSubscription = Subscription(endPoint, apiKey, port);
    
  3. 订阅逻辑

    [@override](/user/override)
    void initState() {
      super.initState();
      final query = {
        'query': '''subscription {
            onPublishResult(id: "12345") {
              id
            }
          }
          '''
      };
      _appsyncSubscription.subscribeToSubscription(query, _callBackFunc);
    }
    
  4. 回调函数

    void _callBackFunc(data) {
      print('Data received from subscription $data');
      // 更新界面数据
      setState(() {});
    }
    

更多关于Flutter AWS AppSync订阅功能插件aws_appsync_subscription的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter AWS AppSync订阅功能插件aws_appsync_subscription的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在使用 Flutter 进行开发时,如果你需要与 AWS AppSync 进行交互,特别是使用订阅功能来实时接收数据更新,可以使用 aws_appsync 插件。虽然 aws_appsync_subscription 并不是一个独立的插件,但 aws_appsync 插件已经包含了订阅功能。

以下是如何在 Flutter 项目中使用 AWS AppSync 订阅功能的步骤:

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 aws_appsync 插件的依赖:

dependencies:
  aws_appsync: ^3.0.0

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

2. 初始化 AWS AppSync 客户端

在你的 Flutter 项目中,初始化 AWS AppSync 客户端。你需要提供 AppSync 的 endpoint、API 密钥、region 等信息。

import 'package:aws_appsync/aws_appsync.dart';

final appSyncClient = AWSAppSyncClient(
  config: AWSAppSyncConfig(
    endpoint: 'https://your-appsync-endpoint/graphql',
    region: AWSRegion.usEast1,
    authMode: AuthMode.apiKey,
    apiKey: 'your-api-key',
  ),
);

3. 创建 GraphQL 订阅

使用 appSyncClient.subscribe 方法来创建一个订阅。你需要提供一个 GraphQL 订阅查询。

import 'package:graphql/client.dart';

final subscriptionQuery = r'''
  subscription OnNewMessage {
    onCreateMessage {
      id
      content
      createdAt
    }
  }
''';

final subscription = appSyncClient.subscribe(
  SubscriptionOptions(
    document: gql(subscriptionQuery),
  ),
);

4. 监听订阅

使用 listen 方法来监听订阅事件。你可以处理 dataerrordone 事件。

subscription.listen(
  (result) {
    if (result.hasException) {
      print('Subscription error: ${result.exception}');
    } else {
      final data = result.data;
      print('New message received: $data');
    }
  },
  onError: (error) {
    print('Subscription error: $error');
  },
  onDone: () {
    print('Subscription done');
  },
);

5. 取消订阅

当你不再需要订阅时,可以取消订阅以释放资源。

subscription.cancel();

6. 处理身份验证

如果你的 AppSync API 使用其他身份验证方式(如 Amazon Cognito User Pools 或 IAM),你需要在初始化 AWSAppSyncClient 时提供相应的配置。

例如,使用 Amazon Cognito User Pools 进行身份验证:

final appSyncClient = AWSAppSyncClient(
  config: AWSAppSyncConfig(
    endpoint: 'https://your-appsync-endpoint/graphql',
    region: AWSRegion.usEast1,
    authMode: AuthMode.userPools,
    userPoolsAuthProvider: UserPoolsAuthProvider(
      userPoolId: 'your-user-pool-id',
      clientId: 'your-client-id',
      token: 'your-access-token',
    ),
  ),
);

7. 处理离线数据(可选)

aws_appsync 插件还支持离线数据的处理。你可以配置 AWSAppSyncClient 来启用离线支持。

final appSyncClient = AWSAppSyncClient(
  config: AWSAppSyncConfig(
    endpoint: 'https://your-appsync-endpoint/graphql',
    region: AWSRegion.usEast1,
    authMode: AuthMode.apiKey,
    apiKey: 'your-api-key',
    offlineMutations: true,
    offlineQueries: true,
  ),
);
回到顶部