Flutter非空安全项目集成Firebase_crashlytics版本冲突咨询
问题核心
你的项目基于非空安全的Flutter 2.10.4,想集成Firebase Crashlytics 2.7.1及以下版本,但pubspec.lock总是自动解析为支持空安全的2.9.0,导致构建失败。这通常是因为其他依赖包的版本约束拉取了更高版本的Crashlytics,或者依赖解析时的版本优先级问题。
具体解决步骤
固定Crashlytics版本,拒绝自动升级
在pubspec.yaml的dependencies里直接写死版本号,不要用^前缀(^会允许小版本自动升级):dependencies: # 其他依赖保持不变 firebase_crashlytics: 2.7.1强制覆盖冲突的依赖版本
有些Firebase相关的底层依赖(比如平台接口包)可能会强制拉取高版本,需要在dependency_overrides里指定对应兼容的版本。比如Crashlytics 2.7.1依赖firebase_crashlytics_platform_interface: 2.4.1,同时保留你原有的firebase_core_platform_interface配置:dependency_overrides: firebase_core_platform_interface: 4.2.0 # 保留原有配置 firebase_crashlytics: 2.7.1 firebase_crashlytics_platform_interface: 2.4.1清理缓存并重新拉取依赖
先删除自动生成的文件,避免缓存干扰:# 删除pubspec.lock文件 rm pubspec.lock # 删除dart_tool缓存文件夹 rm -rf .dart_tool # 重新拉取依赖 flutter pub get检查依赖树确认版本
执行命令查看依赖解析结果,确认Crashlytics版本是否正确:flutter pub deps | grep firebase_crashlytics输出应该显示
firebase_crashlytics 2.7.1,而不是2.9.0。同步其他Firebase包版本
确保项目中其他Firebase相关包(比如firebase_core、firebase_analytics)的版本和Crashlytics 2.7.1兼容。你当前用的firebase_core: ^1.6.0和2.7.1匹配,不需要改动;如果后续出现其他冲突,可调整对应包的固定版本号。
额外注意事项
- 对于需要严格控制的包,一律用固定版本号,不要混用
^前缀。 - 检查本地路径依赖的包(比如你项目里的
flutter-braintree-master、flutter-onesignal)是否间接依赖了高版本的Crashlytics,若有则同步调整这些本地包的依赖配置。
内容的提问来源于stack exchange,提问作者Bani Akram

