修改pubspec.yaml后flutter pub get报版本约束需为字符串错误
问题原因
报错和fluttertoast依赖本身无关,是pubspec.yaml的缩进层级完全错乱导致的。YAML是严格依赖缩进判断节点层级的配置格式,你错误地将生产依赖、开发依赖、Flutter项目配置全部嵌套到了environment节点下的flutter子节点里,导致Pub解析工具把这些配置项识别成了Flutter SDK的版本约束,最终抛出“版本约束必须为字符串”的解析错误。
你当前的配置实际被解析为如下错误结构:
environment: sdk: '>=2.18.0-170.0.dev <3.0.0' flutter: sdk: flutter # 以下所有内容都被错误归到flutter.sdk的同级,属于完全错误的嵌套 cupertino_icons: ^1.0.2 fluttertoast: ^8.0.9 dev_dependencies: flutter_test: sdk: flutter flutter_lints: ^2.0.0 # 还被错误嵌套到了flutter_test节点下 flutter: uses-material-design: true # 被错误嵌套了三层
哪怕你删掉fluttertoast的行,错乱的缩进结构没有变化,所以报错会一直存在。
修复方案
- 调整所有节点的缩进,将
dependencies、dev_dependencies、flutter三个块全部设为顶级节点,和environment节点左对齐,不要嵌套到其他节点下。 - 补全你误删的
name、dependencies顶级字段(这两个是flutter create生成项目时默认存在的,你编辑的时候误删/缩错位置了)。
修正后的完整可用配置如下:
name: 你的项目名称 # 替换成你自己的项目名,和项目文件夹名保持一致即可 description: A new Flutter project. publish_to: 'none' version: 1.0.0+1 environment: sdk: '>=2.18.0-170.0.dev <3.0.0' dependencies: flutter: sdk: flutter cupertino_icons: ^1.0.2 fluttertoast: ^8.0.9 dev_dependencies: flutter_test: sdk: flutter flutter_lints: ^2.0.0 flutter: uses-material-design: true
- 替换保存文件后,重新执行
flutter pub get即可正常完成依赖拉取。
额外提示:你当前使用的是master渠道的Flutter预发布版本,本身存在未修复的不稳定问题,如果后续频繁遇到工具链、依赖解析类的异常,可以切换到stable渠道使用正式发布版本。
内容的提问来源于stack exchange,提问作者Aggerio6969
相关产品推荐
相关产品推荐

