Flutter使用Firestore包报Error.throwWithStackTrace错误解决方法
报错原因
核心原因是本地Flutter/Dart SDK版本过低。Error.throwWithStackTrace是Dart 2.16版本才新增的内置方法,你在pubspec.yaml中声明Firebase相关依赖时没有指定版本号,pub get默认拉取的最新版Firebase平台接口层依赖(cloud_firestore_platform_interface 5.5.0、firebase_auth_platform_interface 6.2.0、firebase_storage_platform_interface 4.1.0)都调用了这个高版本Dart才有的方法,和本地低版本SDK不兼容,同时触发了返回值非空的校验报错。
可行解决方案
二选一即可:
- 方案1:升级本地Flutter SDK(推荐,后续引入location等其他新依赖也不会频繁遇到版本兼容问题)
终端执行以下命令切换到稳定渠道并升级到最新版SDK:
升级完成后清理构建缓存、重新拉取依赖:flutter channel stable flutter upgrade
重新编译项目即可正常运行。flutter clean flutter pub get - 方案2:不升级SDK,锁定Firebase依赖的兼容低版本
打开项目根目录的pubspec.yaml,把dependencies下的相关依赖替换为适配低版本Dart的固定版本号,不要留空让工具自动拉取最新不兼容版本:
保存文件后执行以下命令清理缓存重新拉取依赖:dependencies: flutter: sdk: flutter get: ^4.6.5 firebase_auth: ^3.3.20 firebase_storage: ^10.2.18 cloud_firestore: ^3.1.18 # 后续引入location包时,低版本SDK可锁定使用4.x版本避免兼容问题 # location: ^4.4.0
重新编译即可解决报错。flutter clean flutter pub get
注意:如果选择方案2,后续引入其他第三方依赖时如果出现类似的成员找不到、空返回校验报错,优先查找对应依赖适配当前SDK版本的历史版本,在pubspec.yaml中锁定版本号即可,不要使用无版本号的空依赖声明。
内容的提问来源于stack exchange,提问作者Sulaiman Fazli
相关产品推荐
相关产品推荐

