前言
我的主機上的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的小白一個,不喜勿噴哈哈,也希望我的填坑分享對您有所幫助吧~