Flutter InAppWebView加载assets本地网页debug正常release模式空白页如何解决
解决方案
可按以下步骤逐一排查解决release模式下flutter_inappwebview加载本地assets空白的问题:
- 检查pubspec.yaml资源声明
确认pubspec.yaml中已正确声明对应assets资源,漏声明的资源不会被打包进release安装包:flutter: assets: - assets/TicTacToe.html # 若该html文件内引用了css、js、图片等其他assets下的资源,也需要对应声明路径,例如: - assets/js/ - assets/css/ - 配置Android混淆规则
release打包开启混淆后会误裁剪flutter_inappwebview的相关类,在android/app/proguard-rules.pro文件中添加如下规则(没有该文件就手动创建):
同时确认-keep class com.pichillilorenzo.** { *; } -dontwarn com.pichillilorenzo.**android/app/build.gradle的release构建配置中引用了该混淆文件:buildTypes { release { minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } - 配置Android明文访问权限
若本地html内存在http协议的资源引用,Android 9及以上系统默认禁止明文http请求,会导致页面加载失败,在android/app/src/main/AndroidManifest.xml的application节点添加属性:android:usesCleartextTraffic="true" - 升级插件版本
旧版flutter_inappwebview存在release模式加载本地文件的已知bug,建议升级到6.x及以上的最新稳定版本。 - 更换加载方式兜底
上述步骤都完成后仍有问题,可以放弃initialFile参数,改为读取assets文件内容后手动加载:import 'package:flutter/services.dart' show rootBundle; // 省略其他代码 InAppWebView( onWebViewCreated: (InAppWebViewController controller) async { webView = controller; String htmlContent = await rootBundle.loadString("assets/TicTacToe.html"); await controller.loadData(data: htmlContent); }, )
内容的提问来源于stack exchange,提问作者joshua julius
相关产品推荐
相关产品推荐

