You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS设备开关系统蓝牙时Flutter应用出现崩溃异常

解决 flutter_blue_plus 切换系统蓝牙时崩溃的问题
  • 监听蓝牙状态并主动清理资源
    系统蓝牙开关切换会触发全局蓝牙状态变更,flutter_blue_plus 内部未妥善处理这类场景可能导致崩溃。可以手动监听蓝牙状态,在蓝牙关闭时主动清理连接和订阅:

    FlutterBluePlus.instance.state.listen((BluetoothState state) {
      if (state == BluetoothState.off) {
        // 断开所有已连接设备
        FlutterBluePlus.instance.connectedDevices.then((devices) {
          for (var device in devices) {
            device.disconnect();
          }
        });
        // 取消所有蓝牙相关的流订阅(比如设备状态、服务监听等)
      }
    });
    
  • 捕获原生层异常
    崩溃大概率来自原生端未处理的蓝牙服务断开异常,需在原生代码中添加捕获逻辑:

    • Android:在蓝牙相关原生代码或 MainActivity 中,用 try-catch 包裹蓝牙操作,避免未捕获异常导致应用崩溃。
    • iOS:在插件的 Swift/OC 代码或 AppDelegate 中,用 do-catch 处理蓝牙框架的回调错误。
  • 升级包版本并反馈问题
    你提到多个项目存在此问题,说明这是 flutter_blue_plus 的已知潜在bug。先尝试升级到最新版本,查看官方是否已修复;若未修复,可在项目GitHub Issues中提交详细崩溃日志(含设备型号、系统版本、崩溃栈),推动官方修复。

  • 延迟蓝牙初始化
    若仅初始化项目就崩溃,可能是包在启动时自动初始化蓝牙监听导致的。可以延迟蓝牙逻辑初始化,直到用户首次触发蓝牙操作(比如点击权限请求按钮)再执行:

    // 不要在main函数中直接初始化
    Future<void> initBluetooth() async {
      try {
        await FlutterBluePlus.instance.isAvailable;
        // 执行后续蓝牙操作
      } catch (e) {
        // 捕获初始化异常
      }
    }
    

内容的提问来源于stack exchange,提问作者Justin Chen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 09:24:59