iT邦幫忙

2022 iThome 鐵人賽

0
自我挑戰組

C++30日挑戰之旅系列 第 38

【WIDE LAB紀錄 Day8】 Flutter Packages一包一包又一包

  • 分享至 

  • xImage
  •  

壹、前情提要:交接工作進度銜接

一、“Could not build the application for the simulator”問題

https://ithelp.ithome.com.tw/upload/images/20230209/2015159345LmdZkdt3.png

1.解法一

https://ithelp.ithome.com.tw/upload/images/20230209/20151593pZ5NEBweN9.png

https://ithelp.ithome.com.tw/upload/images/20230209/201515936MAOReOLNG.png

再用了flutter doctor -v 來驗證問題,Xcode version不足會是我們下一個要DE的問題,其他有些我看到跑了這個方法之後有好轉

用完還是出現一樣問題
https://ithelp.ithome.com.tw/upload/images/20230209/20151593fEKDKot3EC.png

2.解法三

Solution 3是我看到感覺最有效,但它有進行到package 的update,I think 不會
影響到版本update
https://ithelp.ithome.com.tw/upload/images/20230209/20151593EEL441djRp.png

https://ithelp.ithome.com.tw/upload/images/20230209/20151593sFalrvjcK5.png

https://ithelp.ithome.com.tw/upload/images/20230209/20151593hOKLoXGngD.png

https://ithelp.ithome.com.tw/upload/images/20230209/20151593QcvpAW5Np5.png

https://ithelp.ithome.com.tw/upload/images/20230209/20151593Zwx1ZC1tp2.png

多種方式跑了那麼多次,發現跑flutter run時的pod install和Xcode build有好轉,變得沒有跑得很慢,是不是代表有改善到?

3.小結論

正常在這幾種方式便能解決才對,則代表要注意看Xcode’s output failed的原因:

  • 第一個是path的問題
  • 第二個是一個叫addPostFrameCallback可能為空的問題

二、“addPostFrameCallback can't be unconditionally invoked because the receiver can be 'null' in Flutter”問題

1.大方向解法

大多數人的解法都要求升級至stable的flutter 3.0.0以後的版本
https://ithelp.ithome.com.tw/upload/images/20230209/20151593w64VpweX8S.png

https://ithelp.ithome.com.tw/upload/images/20230209/201515937dHUnfvy8A.png

2.嘗試使用結果:失敗,需另尋他法

https://ithelp.ithome.com.tw/upload/images/20230209/20151593X4Bg44WapJ.png

https://ithelp.ithome.com.tw/upload/images/20230209/20151593ZZdJRGwS4M.png

3.查看flutter 3.0.0 對應版本與設備相容性

看起來不相容QAO
https://ithelp.ithome.com.tw/upload/images/20230209/20151593sm2S3xMPgK.png

三、自己的想法

我覺得套件部分的問題自己應該會放到待flutter物件概念有以後再來解決,這樣對bug或是在看套件源代碼時也比較有架構,或者看我們兩方要不要分批進行!

貳、問套件為何物?佛曰:萬物萬物

像是在很多語言(像是React Native等)都支援使用者開發各種的package可以publish讓其他人使用,避免大家花多餘時間在刻畫基本框架上(希望大家不要一直重複制造輪子),因而有了package的概念。

而因為跟版本相容性有關係所以在基本語法講述完後跳了一大步至此,不然普通應該是先由flutter框架上的應用,像是基本的icon,圖片,button等物件介紹開始。

而在package方面可以分為兩類:

  • 已在Dart Package網站上發布的
  • 未發布到Dart Package網站上,而是在github上公開的

貳、已發佈package:在pub.dev上已有的

一、先開啟一個新的Project跟原本的做區分

flutter create [專案名稱],這裡先叫做xian_app
https://ithelp.ithome.com.tw/upload/images/20230208/20151593GBUxHneK4Q.png

二、搜尋Package

我們可以從pub.dev中尋找我們需要的已發佈package
https://ithelp.ithome.com.tw/upload/images/20230208/20151593TZTQGWJpVN.png

舉例而言我們搜尋"login"後按下enter,並在左方sdk選擇"flutter"(如橘框所示)
https://ithelp.ithome.com.tw/upload/images/20230208/20151593YoF6fgrIDx.png

選取第二項,並進入installing
https://ithelp.ithome.com.tw/upload/images/20230208/20151593eIV5VJmeYK.png

參自:flutter_login 4.1.1

三、安裝Package

cd xian_app,並依照指示輸入flutter pub add flutter_login
https://ithelp.ithome.com.tw/upload/images/20230208/20151593Sw07ynUZyf.png
https://ithelp.ithome.com.tw/upload/images/20230208/20151593aPldAJIKqf.png

pubspec.yaml(橘框處)新增此程式碼(如藍線所示),因為dependencies:原本就存在,所以只需要新增flutter_login: ^4.1.1一行即可

dependencies:
  flutter_login: ^4.1.1

https://ithelp.ithome.com.tw/upload/images/20230208/20151593KTPuHSexYH.png

執行flutter pub get取得套件,因版本問題跳出error顯示“flutter_login >=4.0.0 which requires SDK version >=2.17.0 < 3.0.0”
https://ithelp.ithome.com.tw/upload/images/20230208/20151593xyQUb9GQ0k.png

四、又是版本的腥風血雨:嘗試解法

由該package的github源代碼頁面,右下角橘框的Releases查看已發布版本
https://ithelp.ithome.com.tw/upload/images/20230208/20151593FZpsT5EjJK.png

參自:NearHuscarl/flutter_login/3.0.0-beta.2

由releases頁面往下滑,藉由每一代更新的Features,決定使用v3.0.0版本作為嘗試
https://ithelp.ithome.com.tw/upload/images/20230208/20151593CO8NStaF1t.png

參自:NearHuscarl/flutter_login :Releases

五、範例大法:try and error是我的每一步伐

使用v4.1.1提供的範例並刪除compile會跳出的紅字部分(因為只有4.1.1版本發佈在dart package網站上,且其他版本只有提供zip檔並沒有對應docs)
https://ithelp.ithome.com.tw/upload/images/20230208/20151593REcXDz469g.png

而在flutter run,執行時間有點久(如藍框所示),跳出Xcode部分的示意文字(橘框),並顯示"Could not build the application for the simulator."
https://ithelp.ithome.com.tw/upload/images/20230208/20151593RCjOKNbI0E.png

六、小結論:

至少由上述的測試中,可以看到若是產生數k以上的問題(舉例如下圖),通常都是因為套件未安裝成功,導致之後在引用時會不斷產生連貫式的error串
https://ithelp.ithome.com.tw/upload/images/20230208/20151593B5Aha6JGeb.png

而在我們第五點的範例測試裡,可以看到沒有本類的錯誤生成,所以sdk版本應是符合的沒有問題,但其後面產生的Xcode部分的訊息還尚未研究!

貳、未發布的package:可能只是在github內有的

可以藉由在dependencies中建立相對路徑的方式(plugin1的目錄與專案名稱是同層級的!)

dependencies:
   //插件
   plugin1: 
       path: ../plugin1/

而若是用git引進,則是以下述方式

dependencies:
   plugin1: 
       git:
           url:git://github.com/flutter/packages.git
           path:packages/package1

而套件的引入可以參考本篇
https://ithelp.ithome.com.tw/upload/images/20230209/20151593zVX3QPdFmq.png

【Flutter基礎概念與實作】 Day8–Package引用與管理

參、package部分暫時小結論

如同交接工作進度銜接部分所提及,會柔性調整研究次序,自己會往原定計劃的flutter元件方面先研究(配合Day5~Day7所提及的Dart基礎語法系列)!待架更加熟稔後,再來看不論是github上的源代碼,擷取所需片段;抑或是在沒有套件的情況或是需要修改套件時,也可以隨時自行更改、生產也沒有問題!

連結之海


上一篇
【WIDE LAB紀錄 Day7】 Dart,讓我更深層的了解你的為人
下一篇
【WIDE LAB紀錄 Day9】 先讓我們看那神奇的工具:Clockify!
系列文
C++30日挑戰之旅43
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言