flatter_reactive_ble无法连接发布版本(flutter版本3.3.4)



我使用flatter_reactive_ble包进行蓝牙连接,在升级到最新的flutter版本(3.3.4(后,我在调试时按预期进行连接,但发布版本没有连接(适用于flutter 3.0.5的两个版本(。

希望有人可能遇到过这种情况,并提出建议/解决方案。

我在执行flutter run --releaseflutter run --profile时,在iPad(第8代(上的Flutter 3.7.9和iOS 16.3.1中遇到了这个问题。

https://github.com/PhilipsHue/flutter_reactive_ble/issues/457表明问题可能是在BLE平台初始化之前构建UI小工具的竞争条件。我的应用程序一启动就在扫描BLE设备,主屏幕上的几个小部件消耗了流。

在构建使用scanForDevices()流的第一个小部件之前,我先调用scanForDevices(),然后调用Future.delayed(),从而解决了我的问题。这个相关的问题表明,在扫描之前等待BleStatus.ready可能会解决问题,但我还没有测试过,因为它不适用于我的用例。

所以这里是修复!

事实证明,它在我们也在使用的flatter_background_service包的常见问题解答中(这个答案是专门用于此包的(。

发布模式构建的dart编译器将进行树抖动(删除死代码(和缩小(缩短变量和方法名称,删除空白和注释等(以缩小应用程序的大小。这两种情况在调试模式下都不会发生。人们认为Dart 2.18(Flutter 3.3附带(更新了摇树和/或缩小。onStart(…(在树摇动/缩小过程中被删除/收缩,因此FlutterBackgroundService包中的本机代码找不到它,导致后台服务永远无法启动@pragma('vm:entry-point'(使得onStart(…(在这些大小优化过程中不会被删除或缩短。

我仍然不确定这个问题是摇树还是缩小。我的谷歌搜索使它倾向于摇树,然而,该应用程序在配置文件模式下构建,可以执行摇树但不缩小,这使我倾向于缩小。我认为我们是否知道并不重要。

@pragma('vm:entry-point'(的一些文档:https://github.com/dart-lang/sdk/blob/master/runtime/docs/compiler/aot/entry_point_pragma.md

易于阅读的关于树木摇晃和缩小的帖子:http://blog.sethladd.com/2013/01/minification-is-not-enough-you-need.html

关于树木摇晃的深入信息:https://www.alibabacloud.com/blog/the-tree-shaking-mechanism-in-flutter_597737

最新更新