Dart 2.0仍需用new关键字?SDK与依赖版本不兼容问题求助
解决Dart项目中的两个SDK与依赖兼容性问题
我来帮你拆解这两个问题的根源,一步步给出解决方案:
问题1:NoSuchMethodError: Attempted to use type 'SimplePipe' as a function
这个错误的核心原因是实际运行的Dart版本与代码/依赖的预期版本不匹配:
- 错误提示明确提到“是不是忘了加
new关键字调用构造函数”,这是Dart 1.x的典型要求——在Dart 1中必须用new SimplePipe()来实例化类,直接写SimplePipe()会被当成调用类型的call方法(而类默认没有这个方法)。 - 但你的
pubspec.yaml已经指定了SDK约束>=2.0.0-dev.53.0 <2.0.0,这说明你的本地环境可能还在使用Dart 1.x,或者IDE配置的SDK版本不对。
修复步骤:
- 检查本地Dart SDK版本
打开终端运行:
确认输出的版本在dart --version2.0.0-dev.53.0到2.0.0之间。如果是Dart 1.x,需要升级到对应的Dev版本。 - 修正IDE的SDK配置
不管是VS Code还是Android Studio,进入Dart/Flutter的设置页面,确保选中的SDK路径是符合版本要求的那个。 - 清理并重新获取依赖
有时候缓存的依赖会导致版本混乱,执行以下命令:pub cache repair rm pubspec.lock pub get - 检查代码中的构造调用
如果是你自己写的SimplePipe调用,确保在Dart 1环境下加new(如果暂时无法升级SDK),或者升级到Dart 2后直接用SimplePipe()(Dart 2允许省略new)。
问题2:Dart 2.0.0-dev.54.0.flutter-46ab040e58 is incompatible with your dependencies' SDK constraints
这个问题出在你的依赖包中,有某个包的SDK约束不支持2.0.0-dev.54.0版本——虽然你的pubspec.yaml写了<2.0.0,但部分旧依赖的约束可能更严格(比如只支持到dev.53.0),导致pub无法找到兼容的版本组合。
修复步骤:
- 删除锁文件重新解析依赖
先删除pubspec.lock,再运行pub get,让pub重新计算所有依赖的兼容版本:rm pubspec.lock pub get - 升级依赖到兼容Dart 2的新版本
你的依赖大多是比较旧的版本,很多已经推出了支持更高Dart版本的更新。建议把pubspec.yaml中的依赖替换为以下(版本号可根据实际情况调整,确保相互兼容):
升级后再运行dependencies: uuid: "^3.0.0" json_annotation: "^4.0.1" http: "^0.13.4" rxdart: "^0.27.5" test: "^1.24.0" dev_dependencies: build_runner: "^2.4.4" json_serializable: "^6.7.0"pub get,新版本的依赖通常对Dart 2的Dev版本兼容性更好。 - 放宽SDK约束范围
把environment中的SDK约束改成更宽松的范围,比如:
这样可以兼容更多后续的Dart 2 Dev版本。environment: sdk: '>=2.0.0-dev.53.0 <3.0.0' - 降级Dart SDK版本(备选)
如果上述方法都不行,可以让你的朋友把Dart SDK降级到2.0.0-dev.53.0,和你pubspec.yaml的最低要求保持一致,避免版本差异。
额外建议
为了避免团队成员之间出现版本不一致的问题,推荐使用**FVM(Flutter Version Manager)**来统一管理Dart/Flutter SDK版本,每个人都可以快速切换到项目要求的版本,减少兼容性问题。
内容的提问来源于stack exchange,提问作者Tobias Marschall
相关产品推荐
相关产品推荐

