flutter_reactive_ble - 如何在订阅前检查设备是否已连接

问题描述

我正在使用这个插件来尝试开发一个使用蓝牙模块的应用。

GitHub https://github.com/PhilipsHue/flutter_reactive_ble/

我正在尝试修改代码中包含的示例,以便设备列表的 onTap 可以连接和 subscribetocharacteristic

但是,似乎connectToDevice()方法被声明为一个流,

并在方法调用之前放置 "await" 并不真正符合我的标准(在连接的设备上,然后 subscribetocharacteristic)

我如何实现这一目标?

我目前在 device_list.dart 中有什么

(device) => ListTile(
    title: Text(device.name),subtitle: Text("${device.id}\nRSSI: ${device.RSSi}"),leading: const BluetoothIcon(),onTap: () async {
        widget.stopScan();
        await widget.deviceConn.connect(device.id);
        //call to subscribetocharacteristic(characteristic);
    });

解决方法

await 仅适用于方法返回未来的情况。您应该监听流,当流发出 connected 状态时,您执行订阅调用。例如:

_ble.connectToDevice(id: deviceId).listen(
      (update) {
        if(update.connectionState == DeviceConnectionState.connected){
       // execute subscribe
        }
      },