Flutter中location与image_picker依赖共存时AndroidX版本冲突求助
我之前也碰到过一模一样的问题,核心原因就是location: ^2.3.5和image_picker: ^0.6.1+10这两个依赖各自拉取了不同版本的androidx.core:core。虽然你已经开启了AndroidX和Jetifier,但Jetifier的职责是迁移旧Support库到AndroidX,不会自动帮我们统一依赖版本。下面是几个通用的修复方案,按推荐程度排序:
方案1:在Android层面强制统一依赖版本(最推荐)
直接在项目的android/build.gradle文件里,给所有模块设置版本强制规则,指定androidx.core:core用运行时的1.0.2版本(或者你也可以选更高的稳定版,比如1.1.0+):
allprojects { repositories { google() jcenter() } // 新增这段配置,强制统一androidx.core版本 configurations.all { resolutionStrategy { force 'androidx.core:core:1.0.2' } } }
这样不管哪个依赖声明了什么版本的androidx.core,都会被强制替换成你指定的版本,从根源解决版本冲突。
方案2:升级location依赖到兼容版本
既然单独使用任意一个依赖都没问题,说明新版的location很可能已经适配了更高版本的androidx.core。你可以去pub.dev查一下location的最新稳定版,把依赖升级后,大概率就能和image_picker: ^0.6.1+10兼容了。
修改pubspec.yaml:
dependencies: location: ^最新稳定版本号 # 比如可以试试^4.0.0+以上的版本 image_picker: ^0.6.1+10
方案3:用Flutter的dependency_overrides覆盖版本
Flutter提供了dependency_overrides机制,能直接在pubspec.yaml里强制指定子依赖的版本,不用改Android原生配置:
dependencies: location: ^2.3.5 image_picker: ^0.6.1+10 # 新增这段,强制指定androidx.core的版本 dependency_overrides: androidx.core:core: 1.0.2
这个方案和方案1效果类似,只是处理层面不同,选你觉得更顺手的就行。
小提示
如果改完配置还是报错,先执行flutter clean清理缓存,再跑flutter pub get重新拉取依赖,最后重新构建项目,很多时候缓存会导致配置不生效。
内容的提问来源于stack exchange,提问作者Mahmoud Niypoo

