VS Code中Flutter代码报错 重装Windows后正常项目出现异常
我的Flutter项目原本可正常运行,重装Windows系统及相关开发工具后,原有无报错的项目出现编译异常。
执行flutter doctor -v的检测结果如下:
[√] Flutter (Channel dev, 1.26.0-1.0.pre, on Microsoft Windows [Version 10.0.19042.804], locale en-US)
• Flutter version 1.26.0-1.0.pre at F:\src\flutter
• Framework revision 63062a6443 (9 weeks ago), 2020-12-13 23:19:13 +0800
• Engine revision 4797b06652
• Dart version 2.12.0 (build 2.12.0-141.0.dev)[√] Android toolchain - develop for Android devices (Android SDK version 30.0.3)
• Android SDK at F:\src\Android\Sdk
• Platform android-30, build-tools 30.0.3
• Java binary at: C:\Program Files\Android\Android Studio\jre\bin\java
• Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b01)
• All Android licenses accepted.[√] Android Studio (version 4.1.0)
• Android Studio at C:\Program Files\Android\Android Studio
• Flutter插件、Dart插件已安装
• Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b01)[√] VS Code (version 1.53.2)
• VS Code at C:\Users\hyda\AppData\Local\Programs\Microsoft VS Code
• Flutter extension version 3.19.0[√] Connected device (1 available)
• sdk gphone x86 (mobile) • emulator-5554 • android-x86 • Android 11 (API 30) (emulator)• No issues found!
请问该异常的原因是什么,该如何解决?
核心原因
该问题与flutter doctor检测全绿无冲突,核心诱因集中在三点:
- 项目本地缓存失效:旧系统下生成的
build/、.dart_tool/、.gradle/等目录关联旧系统用户权限或路径映射,重装系统后直接不可用 - 全局依赖缓存清空:系统重装会清除用户目录下的Flutter pub缓存、Gradle缓存,当前使用的是2020年12月的dev通道旧版Flutter,依赖拉取时易出现版本校验不匹配
- 项目路径配置残留:项目内
android/local.properties可能残留旧系统的SDK路径配置,与当前环境路径不一致
分步操作
按顺序执行以下步骤即可解决:
- 清除项目本地残留缓存
进入项目根目录执行:
手动确认删除项目下的flutter clean.dart_tool、.gradle、build三个目录(若flutter clean未完全清除) - 修正项目SDK路径配置
打开项目下android/local.properties文件,确认路径与当前flutter doctor检测结果完全匹配:
注意Windows路径的反斜杠需转义为双反斜杠sdk.dir=F:\\src\\Android\\Sdk flutter.sdk=F:\\src\\flutter - 修复Flutter全局依赖缓存
依次执行命令修复本地pub缓存、重新拉取项目依赖:flutter pub cache repair flutter pub get - 重装Gradle全局缓存
打开当前用户目录C:\Users\hyda,删除目录下的.gradle文件夹,重新运行项目时Gradle会自动重新下载匹配依赖 - 可选排查:若仍存在依赖版本报错,可切换到同期稳定通道排除dev通道版本不稳定问题:
flutter channel stable flutter upgrade
内容的提问来源于stack exchange,提问作者Arif hidayah

