Flutter 3 with some good stuff!
這篇寫於 2022 年。工具和 API 變化很快,部分步驟可能已經不適用。
支援新版 Dart2.17
Intro#
Google IO 2022 發佈了Flutter 3,它是一個全新且完整的版本,但實際造成的影響多寡,取決於你是哪種使用者。身為一個本來就透過Flutter框架開發Android、iOS的人,或許會覺得更新與改動不大。但如果在觀察Flutter能否當作開發核心,以及對多平台適配、支援性或是效能有疑慮的人,想必這次升級會讓你愛上
本文主要參考官方以及許多影片、文章提供的資訊,希望大家能快速了解Flutter 3 的魅力
全面性的平台支援#
這次新增了MacOS、Linux的穩定支持,可以安全地開發桌面應用程式。加上原本支援的Android、iOS、WEB、Windows,移動端與桌面端皆到齊,讓開發完成的APP同時部署到手機、平板、網頁與桌面,大大節省開發週期與提升效率
在 macOS 上,支援 Intel 和 Apple Silicon( Mac、M1 Mac),提供通用二進制文件,允許應用打包成可在兩種架構上運行的可執行文件,高質量且更快的編譯速度
在 Linux 上,Canonical 和 Google 合作提供了一個高度集成的、最佳的開發選項
如果要在原生(Android、iOS)的專案上將 Flutter 導入,可以查看此官方教學
支援macOS選單#
使用 Flutter 提供的 PlatformMenuBar Widget 進行實作,輕鬆實現桌面應用的多層選單列,輕鬆與其中選項互動
指令創建 ipa 檔案#
簡化iOS應用的發布流程
- 使用指令創建 Xcode 檔案(
.xcarchive文件)和應用程序(.ipa文件)
* flutter build ipa --export-method ad-hoc
* flutter build ipa --export-method development
* flutter build ipa --export-method enterprise
\2. 使用指令xcrun altool進行驗證與上傳檔案
\3. 完成後,應用即可發佈到 TestFlight 或 App Store
也可以透過App Store裡的 Transporter 輕鬆將應用檔案上傳到 Apple
Firebase 正式支援 Flutter#
Flutter 終於被納入成核心的一員,未來的專案可以更輕鬆的引進 Firebase 服務,不用再煩惱Android與iOS端,幾個點擊就能完成了
另外 flutterfire_ui 套件,提供登入流程的範例,包含常用的用戶登入、驗證和其他的畫面UI,可以參考及使用
Firebase Crashlytics#
Crash Reporting Tool,可以在錯誤、例外發生時記錄StackTrace,這包括重要的警告和提示訊息,也能更快地對問題進行分類、排序和修復,幫助開發時更快掌握應用的穩定性
Flutter Casual Games Toolkit#
遊戲工具包,它提供最佳實作的入門範例、學習資源以及廣告數據
官方創建了一個有趣的彈球臺遊戲,由 Firebase 和 Flutter 的網絡實現。遊戲內圍繞 Google 最喜歡的四個吉祥物來設計,包括Flutter 的 Dash、Firebase 的 Sparky、Android 機器人和 Chrome 恐龍,有趣的UI與遊戲效果讓人喜歡。大家可以盡力遊玩,累積分數與其他人競爭
https://pinball.flutter.dev/#/
折疊手機的適配#
Flutter 3 提供有關於折疊相關的屬性與元件,MediaQuery現在支援一些DisplayFeatures,包含設備的邊界和狀態,例如:hinges、folds 和 cutouts。此外,DisplayFeatureSubScreen元件有定義本身的child widgets不會與邊界重疊,並且已經支援 dialogs 和 pop-ups,能夠立即與這些元件互動
升級 iOS 手機的刷新率#
渲染引擎能夠更好地處理可變刷新率,實現120hz效果,在執行滾動操作時可以擁有更舒適的體驗
Flutter Web 性能優化#
使用新的 ImageDecoder API,市面上的瀏覽器Chrome、Edge、Opera與Firefox皆支援,執行非同步的圖像解碼,讓大量圖片載入的速度提升兩倍以上,且不阻塞主線程,實現同時現滾動網頁同時顯示圖片的順暢效果
Web Lifecycle API#
預設在html部分加上生命週期的掌控,在啟動時可以顯示自定義的啟動畫面、載入進度條等UI
Dev Tools 升級#
Performance的面板裡,擁有 Enhance Tracing 強化版的追蹤功能,包含三個選項Track Widget Builds、Track Layouts佈局和Track Paints繪製,還可以過濾掉一些渲染類型,例如:Clip、Opacity、Shape,讓開發者縮小範圍更精準的找到關鍵問題
Material 3 Design#
Material Design Language的新版,支援更多的元件可以在UI呈現時有不同的效果。這個部分也是對於開發者會比較有感的更新
調整MaterialAPP widget上的theme,幫ThemeData加上useMaterial3參數,並設置為true,迎接新版的設計風格(預設為Material 2)
持續關注官方flutter issue #91605,了解Material 3對於Widget的支援性與進展(目前還有許多元件還沒有進行升級)
主題擴展(Theme extensions)#
使用定義好的開發流程去擴展自定義主題風格,方便取得指定的顏色集合,針對Widget使用特殊的顏色名稱。官方有提供實作範例
棄用的API與Widget#
- 有些 Deprecated API 在Flutter 3已全面停用,需優化原有的程式碼
- 常用按鈕,包括FlatButton、RaisedButton與OutlineButton,轉換成TextButton、ElevatedButton、OutlinedButton
- SnackBar現在需要使用ScaffoldMessenger進行顯示
新專案納入 flutter_lint 2.0#
程式碼檢查工具,官方鼓勵開發者將專案升級到v2,確保開發時的最佳規範
flutter pub upgrade --major-versions flutter_lints
Dart 2.17#
強化版的枚舉 Enum#
可以像Class一樣定義,包含常用的property、constructor、getter、function,甚至是複寫父類的方法,例如:toString()
Super Constructor 建構子#
這個更新是我最喜歡的部分,可以立即優化專案的品質,避免冗長無聊的樣板程式碼,馬上撰寫馬上有感
Name Arguments 命名參數#
原本Dart限制有名稱的參數需要放在後面,但現在取消了,我們開發時可以靈活調動參數的位置,沒有任何的限制
知名的 Flutter 應用#
Line 購物、Alibaba 閒魚、BMW、Nubank、SHIEN、Fastic、Superlist…
https://flutter.dev/showcase
外部想法#
- Academind主持人說到:Flutter Web目前沒有帶來強勁的影響,與使用傳統Web技術建置的網站相比,性能與可用性還有待觀察
- Filip Hráček:Flutter is like Unity for apps.
參考#
- https://medium.com/flutter/introducing-flutter-3-5eb69151622f
- https://medium.com/flutter/whats-new-in-flutter-3-8c74a5bc32d0
- https://blog.csdn.net/qq_17766199/article/details/108352306
- https://www.youtube.com/watch?v=w_ezWG1yKQQ
- https://www.youtube.com/watch?v=FGjtxGqSqnc&ab_channel=MajidHajian
- https://itnext.io/whats-new-in-flutter-3-0-in-brief-for-lazies-105dfe8bbf21
- https://itnext.io/whats-new-in-flutter-3-0-in-brief-for-lazies-105dfe8bbf21
其他文章#
關於我#
- Github:https://github.com/chyiiiiiiiiiiii
- Linkedin:https://www.linkedin.com/in/yiichenhi/
- Youtube:Yii
- Youtube:一起饅頭(美食頻道)
- Instagram:yiichenhi
- Email:ab20803@gmail.com
贊助#
謝謝你!這是一個很長的文章而且你花費時間看完,真的非常感謝。
還有一件事, 如果覺得文章不錯可以贊助我,讓我有更多的動力和熱情分享 學習筆記和生活!請我喝一杯咖啡吧~
最後#
希望有幫助到你/妳,歡迎追蹤我,方便瀏覽最新的文章,也請別忘記給我拍手哦 (最多可以達到50次)!
本文原刊登於 Medium。