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

Flutter Web发布模式下usb_device包连接USB设备报错求助

Flutter Web发布模式USB设备连接崩溃问题解决方法

1. 修复Dart代码混淆导致的类丢失

发布模式下Dart默认启用代码混淆,usb_device包中的部分类(如错误类型)可能被混淆后无法正确识别,从而触发Invalid argument: Instance of 'minified:UK'错误。

在项目根目录创建build.yaml文件,添加混淆排除规则,保留usb_device包的类结构:

targets:
  $default:
    builders:
      dart2js:
        options:
          command-line-options:
            - --preserve-uris=package:usb_device/usb_device.dart
            - --preserve-type-annotations

2. 排查包版本兼容性

usb_device 1.0.2可能与Flutter 3.24.4、Dart 3.5.4存在版本适配问题,尝试升级到该包的最新稳定版,或更换为维护更活跃的同类型USB操作包。

3. 优化设备连接代码,规避序列化异常

发布模式下对象序列化可能因混淆出现异常,可绕过DeviceFilter类,直接传递原生JS兼容的参数格式:

Future<void> _connectToDevice() async {
  try {
    // 直接用Map替代DeviceFilter实例,避免序列化问题
    pairedDevice = await usbDevice.requestDevices([
      {'vendorId': 0x303a, 'productId': 0x1001}
    ]);
  } catch (e, stackTrace) {
    // 打印完整错误栈,定位具体问题
    print('USB连接错误: $e');
    print('错误栈: $stackTrace');
    Utils.showSnackBar('${e.toString()}\n${stackTrace.toString()}', Colors.red);      
    setState(() => _status = 'Error: $e');
  }
}

4. 检查浏览器USB权限设置

发布模式下浏览器可能限制USB设备访问权限:

  • 打开Chrome「设置」>「隐私和安全」>「站点设置」>「USB设备」
  • 确保应用域名(含本地localhost)被允许访问USB设备
  • 首次运行时手动触发USB权限授权

5. 启用发布模式调试获取原始错误信息

运行发布模式时添加参数,禁用混淆并保留调试信息,此时错误会显示原始类名而非混淆后的minified:UK:

flutter run -d chrome --release --dart-define=DART2JS_OPTS="--no-minify --enable-asserts"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 03:23:11