前言

我的主机上的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上,找到了应该比较靠谱的两个解决方法

  1. Download latest version flutter sdk and setup. 更新Flutter SDK 最新的版本并设置
  2. 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的小白一个,不喜勿喷哈哈,也希望我的填坑分享对您有所帮助吧~

最新文章

  1. Entity Framework 6 Recipes 2nd Edition(10-10)译 - > 为TPH继承的插入、更新、删除操作映射到存储过程
  2. Character Controller (角色控制器) 中 Move()和SimpleMove() 的区别
  3. 2天驾驭DIV+CSS (技巧篇)(转)
  4. 转:使用 JMeter 完成常用的压力测试
  5. Providers、Controller 、Service、DirectiveFactory
  6. Scala中的类和对象
  7. C# 之【获取网页】
  8. 10_Segue Example
  9. javaee 规范技术
  10. 使用Spring-boot小结
  11. JS类型
  12. 转载博文: Py西游攻关之IO model
  13. nginx + rtmp 搭建流媒体服务器
  14. jq点击事件未生效
  15. Centos7 -- glibc 升级失败、意外删除、故意删除后的处理方法
  16. 浅谈JAVA中HashMap、ArrayList、StringBuilder等的扩容机制
  17. Java 输入/输出——Java虚拟机读写其它进程的数据
  18. ResolveUrl的用法
  19. 重定向、feed输出:控制台输出的内容存放到文件
  20. $state和$rootScope.$on($stateChangeStart)

热门文章

  1. 【雕爷学编程】Arduino动手做(57)---四档矩形波模块
  2. MySQL用户、库、表(单/多)操作
  3. 苏浪浪 201771010120 《面向对象程序设计(java)》第七章学习总结
  4. poj2823单调队列认知
  5. Spring注入的对象到底是什么类型
  6. Oracle 操作权限
  7. SpringCloud(四)- Hystris简介及@EnableCircuitBreaker 和 @HystrixCommand 注解的使用
  8. iOS开发MD5、SHA1
  9. java对数据库性能测试
  10. UIAutomator2的API文档(二)