首页 > 解决方案 > 捕获 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() 方法实现,

我不可能等待连接调用并同步确定发生超时吗?

似乎连接方法的实现完全不直观,但我不能确定。

标签: flutterflutter-dependencies

解决方案


推荐阅读