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
相关产品推荐
相关产品推荐

