Flutter工具集成插件zaptools_client的使用

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

Flutter工具集成插件zaptools_client的使用

Zaptools

Zaptools 是一个用于事件驱动的 websocket 管理工具库。它基于 Websocket 构建。

使用说明

为了与服务器建立连接,zaptools-dart 提供了两种客户端:基于回调和基于流。

  • 基于回调的客户端 (ZapConsumer): 当事件被触发时会触发回调。

    final zConsumer = ZapConsumer('ws://127.0.0.1:8000/')..connect();
    
    zConsumer.onConnected((eventData) {
      print('connected!');
    });
    
    zConsumer.onDisconnected((eventData) {
      print('disconnected!');
    });
    
    zConsumer.onEvent("myEvent", (eventData) { 
      print("myEvent Received");
    });
    
  • 基于流的客户端 (ZapSubscriber): 提供 ConnectionState 的流和事件接收的流。你可以订阅特定事件、一组事件或所有事件。

    final zSubscriber = ZapSubscriber('ws://127.0.0.1:8000/')..connect();
    
    zSubscriber.connectionState.listen((event) {
      if (event case ConnectionState.online) {
        print("connected!"); 
      }
      if (event case ConnectionState.offline) {
        print("disconnected!"); 
      }
    });
    
    zSubscriber.subscribeToEvent("myEVent").listen((eventData){
      print("event received!");
      // listen when 'myEvent' is received.
    });
    
    zSubscriber.subscribeToEvents(["myEvent", "myOtherEvent"]).listen((event) { 
      print("a event is received");
      // listen when 'myEvent' or 'myOtherEvent' are received.
    });
    
    zSubscriber.subscribe toAllEvent().listen((event) {
      print("whatever is received!");
      // listen all events 
    });
    

    注意:记得取消订阅流以防止不必要的资源消耗。

发送事件

ZapConsumerZapSubscriber 都可以通过 send 方法向服务器发送事件。

zSubscriber.sendEvent("eventName", "payload");

zConsumer.sendEvent("eventName", "payload");

连接、断开连接、重试连接

connect 方法用于初始连接和在连接丢失时重新连接到服务器。

zConsumer.connect();
zSubscriber.connect();

disconnect 方法用于关闭与服务器的 WebSocket 连接。

zConsumer.disconnect();
zSubscriber.disconnect();

清洁

当您调用 disconnect 方法在 ZapSubscriber 中时,虽然关闭了 WebSocket 连接,但 ZapSubscriber 仍然等待事件发出。如果 ZapSubscriber 从 WebSocket 断开连接,再次调用 connect 方法会使 ZapSubscriber 重新连接到 WebSocket 并可以发出来自服务器的事件,这可以防止创建新的订阅并防止重复事件。

final zSubscriber = ZapSubscriber('ws://127.0.0.1:8000/')..connect();

zSubscriber.connectionState.listen((event) {
  // code here
  // still received event after reconnect
});

zSubscriber.subscribeToEvent("myEVent").listen((eventData){
  // code here
  // still received event after reconnect
});

zSubscriber.disconnect();

zSubscriber.connect();

如果您想完全关闭 ZapSubscriber,请调用 clean 方法,这将关闭并清理与 WebSocket 的连接。

final zSubscriber = ZapSubscriber('ws://127.0.0.1:8000/')..connect();

zSubscriber.connectionState.listen((event) {
  // code here
  // No received event after clean
});

zSubscriber.subscribe toEvent("myEVent").listen((eventData){
  // code here
  // No received event after clean
});

zSubscriber.clean(); // all subscriptions "done"

重要提示: 取消所有 StreamSubscription 以避免不必要的资源消耗。

示例代码

import 'package:zaptools_client/zaptools_client.dart';

void main() {
  final uri = Uri.parse('ws://127.0.0.1:8000/');
  final zConsumer = ZapConsumer(uri)..connect();

  zConsumer.onConnected((eventData) {
    print('connected!');
  });

  zConsumer.onDisconnected((eventData) {
    print('disconnected!');
  });

  zConsumer.sendEvent('hello', 'hello from client');

  zConsumer.onEvent(
    'bye',
    (eventData) async {
      print(eventData.name);
      print(eventData.payload);
      await Future.delayed(Duration(seconds: 1));
      zConsumer.disconnect;
    },
  );
}

更多关于Flutter工具集成插件zaptools_client的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter工具集成插件zaptools_client的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter项目中集成和使用zaptools_client插件的示例代码案例。请注意,由于zaptools_client并非一个广为人知的Flutter插件(在撰写时未能在pub.dev上找到该插件),我将基于假设其功能类似于其他网络请求或工具类插件来提供一个示例。如果zaptools_client插件的实际功能与假设不符,请根据官方文档进行调整。

1. 添加依赖

首先,你需要在pubspec.yaml文件中添加zaptools_client的依赖(假设它已经在pub.dev上发布)。如果它还没有发布,你可能需要从本地路径或Git仓库添加依赖。

dependencies:
  flutter:
    sdk: flutter
  zaptools_client: ^x.y.z  # 替换为实际版本号

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

2. 导入插件

在你的Dart文件中导入zaptools_client插件。

import 'package:zaptools_client/zaptools_client.dart';

3. 初始化插件

假设zaptools_client插件需要进行初始化,你可能需要提供一个API密钥或其他配置。

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

  // 初始化 zaptools_client
  await ZaptoolsClient.initialize(apiKey: 'your_api_key_here');

  runApp(MyApp());
}

4. 使用插件功能

假设zaptools_client插件提供了进行网络请求的功能,下面是一个使用插件进行GET请求的示例。

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

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

  await ZaptoolsClient.initialize(apiKey: 'your_api_key_here');

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Zaptools Client Demo'),
        ),
        body: Center(
          child: FutureBuilder<Map<String, dynamic>>(
            future: fetchData(),
            builder: (context, snapshot) {
              if (snapshot.connectionState == ConnectionState.waiting) {
                return CircularProgressIndicator();
              } else if (snapshot.hasError) {
                return Text('Error: ${snapshot.error}');
              } else {
                return Text('Data: ${snapshot.data?['data']}');
              }
            },
          ),
        ),
      ),
    );
  }

  Future<Map<String, dynamic>> fetchData() async {
    try {
      final response = await ZaptoolsClient.get(
        endpoint: 'https://api.example.com/data',
        parameters: {
          'param1': 'value1',
          'param2': 'value2',
        },
      );
      return response.data;
    } catch (e) {
      throw e;
    }
  }
}

注意事项

  1. API密钥:确保在初始化时提供正确的API密钥。
  2. 错误处理:在实际应用中,应该添加更完善的错误处理逻辑。
  3. 插件文档:由于zaptools_client插件的具体API和功能可能有所不同,请参考官方文档获取最准确的信息。
  4. 依赖管理:确保你的pubspec.lock文件是最新的,并且所有依赖都已正确安装。

希望这个示例能帮助你在Flutter项目中集成和使用zaptools_client插件。如果zaptools_client的实际功能与假设不符,请参考插件的官方文档进行调整。

回到顶部