前言
我的主机上的Flutter 本地的分支是在 beta,因为去年想尝鲜Flutter Web,所以一直没切回来stable分支。
早上打开VSCode,右下角弹出了Flutter upgrade的选项,无意中看见自己的flutter 版本居然还在 1.12.13 ,手贱冲动开始了Flutter 版本更新,然后弹出waiting lock的提示,没管它继续让它下载,然后过了一会提示flutter upgrade失败了。
接着启动项目调试,发现就失败了,报错的信息有几百行,都是某些函数底部有红波浪线提示报错了,最后的原因为:
Cause:Target kernel_snapshot failed: Exception: Errors during snapshot creation: null...
但是运行 flutter doctor命令却是一切正常的,都是打勾勾的。于是开始漫长查询报错解决:
在StackOverflow和Flutter官方的issue上,找到了应该比较靠谱的两个解决方法
- Download latest version flutter sdk and setup. 更新Flutter SDK 最新的版本并设置
- Fix it by creating a new project and copying the code from the old one.创建一个新项目
因为我是因为更新版本才导致的出错,所以我打算先选择第二个方法,创建一个新项目试试看,
尝试一:创建新项目
创建后,运行 flutter doctor,一切正常,然后运行启动调试 flutter run ,报错了和旧项目一样的报错信息。
说明这个方法行不通,我的问题不跟新旧项目配置有关。
尝试二:切换分支到stable
使用flutter channel stable 失败,显示:Your local changes to the following files would be overwritte。
然后列出了很多修改过的文件与远程库分支不相同。
尝试三:flutter 当前分支执行pull,与远程同步(更新到最新版本) 成功解决!
定位到我的主机上存放flutter的根目录 C:flutter 下
执行git pull,出现了
git error:fatal: unable to access 'https://github.com/flutter/flutter.git/': OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 10054。
新的问题,先解决这个ErrorCode:10054问题的方案:
执行 git config --global http.sslVerify false
然后因为我的本地beta分支的文件已经落后远程官方库的beta分支接近2000次的commit了,所以我打算直接让远程的文件直接覆盖掉我的本地文件吧
执行命令:git reset --hard ,回退到上一个commit的版本,也就是打算消除本地与远程的差异。
执行命令:git pull origin beta,然鹅又出现错误了:
error: The following untracked working tree files would be overwritten by merge:后面接着一大堆文件和列表balabala
行吧,又得解决新的问题,
解决Error:The following untracked working tree files would be overwritten by merge的方案:
执行命令 git clean -d -fx ,会判断删除本地与远程不相同的文件,当有无法删除的文件不断会询问你 y or n,我遇到的 dart.exe 无法删除就一直问我 y / n ? ,最后选择了 n ,命令就继续执行下去了,接着程序自动remove了很多很多文件。
然后我又又又再次执行 git pull,经过漫长等待,这次成功了,下面是成功时候的截图,将本地分支(我的是beta),更新到与flutter Github上beta分支的最新版本了。
接着重启VSCode,运行Flutter Doctor,会重新进行依赖和下载Flutter Doctor所需要的tools,经过一段时间的等待后,Flutter Doctor显示的结果依旧正常,不过Flutter SDK的版本已经从最初的1.12.13 更新为1.18.0了
终端运行 flutter run,新项目和旧项目都能正常的在真机和模拟器上运行了。折腾了一个下午终于搞定了,也说明这次补坑之旅可以告一段落了。
顺带一提
我的本地Flutter分支是 beta,如果你是stable或其他的分支,解决的方法也是同理的。
还有就是本次填坑的时候我没有使用梯子(梯子刚好坏了),所以说如果你没有梯子也不会有影响的,可能也就等待时间长一点点吧~
总结
如非必要或者做好要漫长填坑的准备,就不要点击更新Flutter SDK或者执行flutter upgrade
,否则你永远猜不到接下来等待你的坑是什么。
我是刚刚接触Flutter的小白一个,不喜勿喷哈哈,也希望我的填坑分享对您有所帮助吧~