Flutter SDK版本未知致构建失败及通道切换问题求助
尝试在VS中构建Flutter签名APK时,执行flutter build appbundle触发以下错误:
当前Flutter SDK版本为0.0.0-unknown。
由于workmanager 0.5.1要求Flutter SDK版本≥2.5.0,且没有符合>0.5.1 <0.6.0范围的workmanager版本,因此workmanager ^0.5.1被禁用。由于pocket_mentor依赖workmanager ^0.5.1,版本解析失败。
后续执行flutter upgrade报错:
ProcessException: 进程异常退出: fatal: no such branch: 'stable' 命令: git rev-parse --verify @{upstream}
执行flutter channel stable切换通道时也报错:
git: fatal: 'origin/stable' 不是有效提交,无法基于它创建分支'stable' 切换通道失败,错误码128。
执行flutter doctor的输出如下:
医生摘要(查看详细信息请运行flutter doctor -v):
无法找到最新Git提交日期:VersionCheckError: 命令退出码128: git -c log.showSignature=false log HEAD -n 1 --pretty=format:%ad --date=iso
标准输出:
标准错误:fatal: 参数'HEAD'不明确:未知的版本或工作树中不存在的路径。
使用'--'分隔版本和路径,例如:'git <命令> [<版本>...] -- [<文件>...]'
已返回1969-12-31 19:00:00.000替代。
[!] Flutter(未知通道,版本0.0.0-unknown,运行于Microsoft Windows [版本10.0.22621.1992],区域设置en-US)
! Flutter版本0.0.0-unknown,位于未知通道,安装路径C:\flutter\flutter
当前处于未知通道。运行flutter channel切换到官方通道。如果无法解决,请重新安装Flutter。
无法解析当前版本,可能是由于本地修改。请重新安装Flutter。
! 未知的上游仓库。请重新安装Flutter。
[√] Windows版本(已安装Windows 10或更高版本)
[!] Android工具链 - 开发Android设备(Android SDK版本33.0.1)
X 缺少cmdline-tools组件
运行path/to/sdkmanager --install "cmdline-tools;latest"获取详细信息。
X Android许可证状态未知。运行flutter doctor --android-licenses接受SDK许可证。
[√] Chrome - 开发Web应用
[√] Android Studio(版本2021.3)
[√] VS Code(版本1.80.1)
[√] 已连接设备(2台可用)
[√] 网络资源
! 医生发现2类问题。
1. 修复Flutter Git仓库异常
Flutter SDK的Git仓库状态异常导致无法识别分支和版本,按以下操作修复:
- 打开命令提示符,进入Flutter安装目录(例如
cd C:\flutter\flutter) - 执行
git remote set-url origin https://github.com/flutter/flutter.git,重置远程仓库地址 - 执行
git fetch origin,拉取远程所有分支与提交记录 - 执行
git checkout stable,切换到稳定分支 - 执行
flutter upgrade,将SDK更新至最新稳定版
2. 解决依赖版本冲突
SDK版本恢复正常后,重新执行flutter build appbundle即可满足workmanager的版本要求。若仍有问题:
- 打开项目根目录下的
pubspec.yaml,将workmanager版本调整为兼容当前SDK的版本(比如保留^0.5.1,或升级到更高版本) - 执行
flutter pub get,重新拉取依赖包
3. 补全Android工具链
根据flutter doctor提示,完成Android环境配置:
- 找到Android SDK目录下的
sdkmanager(通常路径为Android SDK安装目录\cmdline-tools\latest\bin) - 执行
sdkmanager --install "cmdline-tools;latest",安装缺失的组件 - 执行
flutter doctor --android-licenses,接受所有SDK许可证
内容的提问来源于stack exchange,提问作者Bo Z

