首页 > 解决方案 > 如何在继续之前等待实际建立 ble 连接

问题描述

我正在使用 Flutter 的 flutter_reactive_ble 包,但在尝试在 for 循环中执行操作时遇到问题。

情况:

这是我的代码:(注意:这是在 IconButton 的 onPressed 部分)

IconButton(
  ...
  ...
  onPressed:
for (String deviceId in deviceIdList) {
                    try {
                      await Provider.of<BleDeviceConnector>(context, listen: false)
                          .connect(deviceId)
                          .then((value) => loadStuff(context))
                          .then((value) =>
                          Provider.of<BleDeviceConnector>(context, listen: false)
                              .disconnect(deviceId));
                    } catch (e) {
                      print(e);
                    }
)

我遇到的问题是第一个“连接”函数被调用,但在继续循环之前它不会等待实际连接。

这导致整个循环在我的设备连接之前完成。

仅供参考...第一台设备确实最终连接了,但是整个应用程序冻结了,因为我相信它处于丢失状态。

感谢您的任何帮助/建议。

- - 更新 - -

我决定将其拆分,并能够让循环连接并加载到多个设备。

但是,我仍然无法与所有连接的设备断开连接。我有一个我连接到的设备 ID 列表,并尝试了以下操作:

  1. for 循环在 deviceIdList 中的每个 deviceId 上调用以下内容:

    await Provider.of<BleDeviceConnector>(context, listen: 
    false).disconnect(deviceId);
    
  2. 实现了一个按钮,尝试一次断开与一台设备的连接(每个按钮单击一个)

两次尝试都导致能够与列表中的第一个连接设备断开连接,但未能成功断开与其余任何设备的连接。

有任何想法吗?谢谢!

标签: flutterdartasync-awaitbluetooth-lowenergy

解决方案


推荐阅读