在使用flutter_blue插件开发蓝牙功能,遇到一个问题就是,断开蓝牙,然后重连,会报错,而且发送命令会失败,现在虽然解决了问题,但还是很需要记录下来,尽量能摸索出一套解决问题的思路。因为项目涉及到多个部门的同事来开发,所以,第一时间,需要明确问题出在哪里,比如我怀疑是设备蓝牙模块的问题,那就请负责这个模块的同事来讨论下,然后得出跟蓝牙模块没有问题,那么我就怀疑是设备本身这部分的命令有问题,可能重连后,再发送同样的命令,得到的不是一样的数据之类,那么我就用其他命令来试验,结果发现重连后,其他命令是没有问题的,所以就排除了这个可能,那么基本就明确到,是我的代码哪里出了问题,那么就想到,通过对比接收到的数据来发现问题,这个设备命令第一次发送是没问题的,但是断开重连后,同样的命令却出现了问题,所以对比数据发现,断开重连后的数据一直是重复的,也就是每断开重连,再发送命令,就会加一次接收到相同的数据,那么我就怀疑,是不是页面跳转了之后,没有走dispose
方法,但是打印是没问题的,所以现在的问题就是,在断开连接之后,一定是哪个监听没有取消掉导致的,到这一步,基本就解决问题了。其实就是,在断开蓝牙的时候,没有把监听取消掉,然后重连发送命令,生成的数据重复,那么解析的时候就报错了,导致页面数据没有渲染。代码如下所示:
notifySubscription = readCharacteristic.value.listen((value) {
.......
});
//断开蓝牙连接,需要把监听取消
notifySubscription.cancel();