使用flutter_inappwebview从非main.dart调用时WebView加载前应用崩溃
问题原因分析
- 错误日志里的
java.lang.IllegalStateException: Expected Android API level 21+ but was 30是核心报错点,来自flutter_inappwebview 5.3.2版本内置的低版本OkHttp库,该版本OkHttp没有适配安卓API 30及以上系统,初始化时校验API等级的逻辑存在错误导致崩溃 - 从main.dart调用时运行正常是因为应用启动时优先加载了你项目里其他依赖引入的高版本OkHttp,而从其他页面调用时触发了插件自带的低版本OkHttp初始化逻辑,才会触发报错
修复方案
方案一:升级flutter_inappwebview版本(优先推荐)
直接将pubspec.yaml里的flutter_inappwebview版本升级到5.7.2及以上,该版本已经修复了OkHttp适配高版本安卓的问题,升级后执行flutter clean再重新编译即可。
方案二:强制指定项目OkHttp版本(无法升级插件时使用)
如果你的项目因为其他依赖兼容问题不能升级flutter_inappwebview,可以在安卓项目的配置文件里强制指定高版本OkHttp:
- 打开
android/app/build.gradle文件 - 在dependencies代码块里添加如下配置:
implementation("com.squareup.okhttp3:okhttp:4.9.3") implementation("com.squareup.okhttp3:logging-interceptor:4.9.3")
- 打开
android/build.gradle文件,在allprojects代码块的resolutionStrategy里添加强制版本配置:
allprojects { configurations.all { resolutionStrategy { force "com.squareup.okhttp3:okhttp:4.9.3" force "com.squareup.okhttp3:logging-interceptor:4.9.3" } } }
- 执行
flutter clean后重新编译项目即可。
方案三:临时降级安卓编译SDK版本
如果以上两个方案都无法实施,可以临时将android/app/build.gradle里的compileSdkVersion和targetSdkVersion降到29,该版本不会触发低版本OkHttp的校验错误。
内容的提问来源于stack exchange,提问作者zola yanei
相关产品推荐
相关产品推荐

