flutter插件flutter_blue_plus插件取消蓝牙订阅

目前踩到的坑是:
只是普通取消蓝牙的订阅并不能正确全部取消, 当再次连接蓝牙和订阅后, 每次发送,会给我回2次订阅消息,说明之前的取消订阅并没有正确取消,依次类推,会导致代码崩溃.
下面是我能正确关闭这个flutter_blue_plus插件订阅流的代码,仅供参考, 有不同意见欢迎指正

// 创建一个流的List,用于存储订阅回调变量
List<StreamSubscription<List<int>>> subscriptions = [];

Future<void> subscribeCharacteristics(List<BluetoothService> services) async {
//for循环检测所有uuid,有可订阅的特征就订阅
  for (BluetoothService service in services) {
    for (BluetoothCharacteristic characteristic in service.characteristics) {
      if (characteristic.properties.notify ||
          characteristic.properties.indicate) {
        // 设置订阅通知或指示
        await characteristic.setNotifyValue(true);
        debugPrint('订阅特征');

       // 创建一个接收订阅回调的变量,并将其添加到流的List中
        StreamSubscription<List<int>> subscription =
            characteristic.lastValueStream.listen((data) async {
          subscribeCBack(characteristic, data, services);
        });
        //把这个订阅回调的变量添加到流的List中
        subscriptions.add(subscription);
      }
    }
  }
}

// 在断开连接时取消订阅
void cancelSubscriptions() {
  for (var subscription in subscriptions) {
    subscription.cancel();
  }
  subscriptions.clear();
}

取消思路在代码中:

  1. 先创建一个流的List
  2. 再把订阅的回调变量添加到 流的List
  3. 最后在cancelSubscriptions()函数里面先cancel回调变量值,最后清空流的List
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值