flutter - 捕获 Flutter_blue 连接方法的 TimeoutException(同步)
问题描述
我使用flutter_blue插件连接到蓝牙设备并超时。
我打电话connect()
如下:
try {
await device.connect(timeout: Duration(seconds:4);
} on TimeoutException catch(e) {
print("error");
}
timeout
异常永远不会被捕获,connect 方法会无限期挂起。
如果我检查该connect()
方法的代码,我会看到TimeoutException
是在传递给计时器的函数中抛出的。
connect() 是否在不同的区域运行?
Future<void> connect({
Duration timeout,
bool autoConnect = true,
}) async {
var request = protos.ConnectRequest.create()
..remoteId = id.toString()
..androidAutoConnect = autoConnect;
Timer timer;
if (timeout != null) {
timer = Timer(timeout, () {
disconnect();
throw TimeoutException('Failed to connect in time.', timeout);
});
}
await FlutterBlue.instance._channel
.invokeMethod('connect', request.writeToBuffer());
await state.firstWhere((s) => s == BluetoothDeviceState.connected);
timer?.cancel();
return;
}
基于 connect() 方法实现,
我不可能等待连接调用并同步确定发生超时吗?
似乎连接方法的实现完全不直观,但我不能确定。
解决方案
推荐阅读
- r - 在 R 中创建求和公式
- java - 双向链表,在Java中的给定节点之前插入
- java - 如何以 N 个计数作为参数选择前 N 个记录
- xamarin.forms - 在 Xamarin 表单中调整活动指示器的大小
- ldap - LDAP 身份验证过滤器以验证哪个员工属于哪个组
- javascript - 如何从时钟选择器中获取价值并将其传递给我的表单 f.date_field?
- javascript - 有没有更简单的方法来更新复选框价格?
- selenium - Selenium:使用 ChomeDriver 浏览器而不是 Chrome 时出现 404 错误
- webrtc - WebRTC - 如何通过 sip 将语音流从 chrome 发送到端点
- python - 将“导入”名称映射到 PyPI 名称?