修复ota_update下载负值BUG,Flutter修改插件方法
- 发表于
- flutter
ota_update
Flutte的OTA更新插件。在Android上,它下载文件(带有进度报告)并触发应用安装意图。在iOS上,它会打开指定IPA网址(苹果商店)。BUG在最新的v2.0.2版本是依然存在,下载时得到的下载进度值显示负值,如:
1 2 3 4 5 6 |
I/flutter ( 5080): 57 I/flutter ( 5080): 57 I/flutter ( 5080): -56 I/flutter ( 5080): -56 I/flutter ( 5080): -54 I/flutter ( 5080): -54 |
在进度50%-57%之后,它们全部变为负值并减小。
查看了源码发现它使用了int,导致文件过大产生BUG,换用long就行。
Flutter使用本地修改的ota_update插件
现在我们使用的是远程的插件版本,pubspec.yaml
1 |
ota_update: ^2.0.2 |
原作者迟迟不修复进度负值的BUG只能我们自己来修改,并替换远程版本为本地版本插件,步骤如下:
- 打开路径:
~/.pub-cache/hosted/pub.dartlang.org/
- 找到你ota_update插件包:
ota_update-2.0.2
- 将整个包文件夹复制到你应用程序文件夹根目录下(与
pubspec.yaml
级别相同,不在lib
文件夹中),然后重命名版本:例如:ota_update-202-fix
- 修改pubspec.yaml以指向本地包,打开项目pubspec.yaml将依赖项路径更改为,例如:
ota_update: path: ./ota_update-202-fix/
修改java源文件以修复下载进度负值的BUG
打开上边步骤中的本地包文件:android/src/main/java/sk/fourq/otaupdate/OtaUpdatePlugin.java
第56行:
1 |
progressSink.success(Arrays.asList("" + OtaStatus.DOWNLOADING.ordinal(), "" + ((msg.arg1 * 100) / msg.arg2))); |
替换为
1 2 |
Bundle bundle = (Bundle) msg.obj; progressSink.success(Arrays.asList("" + OtaStatus.DOWNLOADING.ordinal(), "" + ((bundle.getLong("down") * 100) / bundle.getLong("size")))); |
找到第203-210行
1 2 3 4 5 6 7 8 |
int bytes_downloaded = c.getInt(c.getColumnIndex(DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR)); int bytes_total = c.getInt(c.getColumnIndex(DownloadManager.COLUMN_TOTAL_SIZE_BYTES)); if (progressSink != null && bytes_total > 0) { Message message = new Message(); message.arg1 = bytes_downloaded; message.arg2 = bytes_total; handler.sendMessage(message); } |
替换为
1 2 3 4 5 6 7 8 9 10 |
long bytes_downloaded = c.getLong(c.getColumnIndex(DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR)); long bytes_total = c.getLong(c.getColumnIndex(DownloadManager.COLUMN_TOTAL_SIZE_BYTES)); if (progressSink != null) { Message message = new Message(); Bundle bundle = new Bundle(); bundle.putLong("down",bytes_downloaded); bundle.putLong("size",bytes_total); message.obj = bundle; handler.sendMessage(message); } |
最后,在文件顶部添加
1 |
import android.os.Bundle; |
保存,结束,现在代码及配置都修改完毕了:
- flutter clean
- flutter run
运行测试发现下载进度值已经正常不再是负值。其它Flutter插件修改流程也是一样的,先变远程为本地,再修改配置引用。
原文连接:修复ota_update下载负值BUG,Flutter修改插件方法
所有媒体,可在保留署名、
原文连接
的情况下转载,若非则不得使用我方内容。