本文最初發(fā)布于 Medium 博客,,經 Flutter 開發(fā)團隊授權由 InfoQ 中文站翻譯并分享,。 今天我們很高興為大家?guī)砹?Flutter 1.17,也是我們 2020 年的第一個穩(wěn)定版本,。 對所有人來說今年都是充滿挑戰(zhàn)的一年。我們的目標是大約每個季度發(fā)布一個穩(wěn)定版本,,但這次的版本花費的時間要長一些,因為我們一直在針對新的發(fā)布流程調整我們的基礎架構,。我們繼續(xù)堅持質量至上的原則,相信新的發(fā)布模型將提升我們?yōu)榉€(wěn)定分支提供關鍵修復的能力,。 今天發(fā)布的版本包含大量修復內容,解決了自 1.12 穩(wěn)定版本以來報告的 6,339 個問題,,這么大的數字也是前所未有的。如此大的進展很大一部分歸功于我們與 Nevercode 的合作關系,,這種合作提升了我們對客戶問題的響應速度,。今年到目前為止,我們關閉的問題比新增的問題更多,,使問題總量凈減少了約 800 個,。我們從 231 位貢獻者那里合并了 3,164 個 PR,,修復了大批錯誤,。這些數字都是非??捎^的,,在這個充滿挑戰(zhàn)的時期,,我們由衷感謝大家的辛勤工作和持續(xù)貢獻。 如果你對我們在這一版本中合并 PR 的完整列表感興趣,,則可以訪問 flutter.dev 網站查看,。除了質量改進之外,,我們還設法在該版本中添加了一些新功能,,包括 iOS 上的 Metal 支持,、新的 Material 組件和新的 Network 跟蹤工具等等,!新版本還包含了 Dart 2.8,,你可以在 Dart 博客上查看有關 Dart 2.8 的更多信息。 移動端性能和文件大小改進新版本的主要重點是繼續(xù)改進性能和內存方面的表現,。只需將你的應用升級到新版本,,你的用戶就會看到更快的動畫、體積更小的應用和更低的內存占用率,。在新版本中,,默認導航場景(非透明路徑)的速度將提高 20%-37%,。對于簡單的 iOS 動畫而言,,CPU/GPU 使用率最多會降低 40%,,具體取決于硬件配置(在 PR 14104 和 PR 13976 中有詳細說明),。 在多個修復的共同作用下,,新版本還顯著縮減了應用的大小。例如,,Android 的 Flutter Gallery 示例在 2019 年底是 9.6MB,,現在則是 8.1MB,減少了 18.5%,。 至于內存使用率,新版本在快速滾動瀏覽大圖像時減少了 70%的內存占用,,這也可能帶來性能的提升,,具體則取決于設備的內存大小。 而最明顯的性能改進則來自于 iOS 端對 Metal 的支持。 Metal 支持可將 iOS 端的性能提升 50%蘋果公司在 iOS 上的 Metal 幾乎可以直接訪問底層 GPU,,這也是蘋果公司推薦的圖形 API,。在完全支持 Metal 的 iOS 設備上,,Flutter 現在默認開啟 Metal,,讓你的 Flutter 應用在大多數時候都能運行得更快,,平均提升約 50%的渲染速度(取決于你的負載): https://github.com/flutter/flutter/issues/53768 對于不完全支持 Metal 的設備(A7 之前的芯片版本或運行 iOS 10 版本之前的設備),,Flutter 會像過去一樣使用 OpenGL,,為較舊的設備提供原生渲染速度。更多詳細信息,,請在 Flutter Wiki 上查看 iOS 上的 Metal 常見問題: https://github.com/flutter/flutter/wiki/Metal-on-iOS-FAQ Material 小部件:NavigationRail,、DatePicker 等我們會根據內部和外部客戶的反饋,持續(xù)改進和發(fā)展 Flutter 中實現的 Material 設計系統(tǒng),。在新版本中我們添加了 NavigationRail,,這是一個提供響應式應用導航模型的小部件。它是由 Google Material Design 團隊設計和實現的,。NavigationRail 非常適合可以在移動和桌面端屏幕之間切換的應用,,因為隨著應用屏幕尺寸的增加,它很容易換成 BottomNavigator,。 關于 NavigationRail 的效果,,請查看 web_dashboard 示例: https://github.com/flutter/samples/tree/master/experimental/web_dashboard 或在 DartPad 上嘗試: https://dartpad.dev/b9c6cd345fd1cff643353c1f4902f888 除了新的小部件之外,,新版本還提供了 Material DatePicker 和文本選擇溢出小部件的更新。 這一 DatePicker 版本包含新的視覺效果,,以遵循更新的 Material 指南,還有一個新的文本輸入模式,。詳細信息請參閱這一規(guī)范: https://flutter.dev/go/material-date-picker-redesign 現在,,當按鈕比無溢出時可以顯示的長度更長時,,文本選擇菜單在 Android 和 iOS 端的精確度提升了。這在菜單項文本可能比較長的語言環(huán)境中效果尤其明顯,。 在 Flutter 1.17 發(fā)布的同時,,我們還另外交付了新的 Animations 包,其提供了實現新的 Material motion 規(guī)范的預構建動畫,。 在這篇文章中,Material 設計團隊定義了四個過渡模式,,用于描述組件和全屏視圖之間的動畫:分別是容器變換,、共享軸、淡入和淡入,。雖然這些動畫一直都能在 Flutter 中實現,,但是 Animations 包大大簡化了實現步驟。 Material Text Scale:讓 Flutter 文本主題現代化在新版本中,,Flutter 團隊完成了 2018 Material 設計規(guī)范的 Type Scale 部分的實現,,同時不會影響已有的 Flutter 應用。2018 年 10 月的 PR22330 中增加了對新配置的可選支持(但沒有新名稱)?,F有的文本樣式名稱沒有更改,,因為這樣做是對 API 的重大更改,,可能會影響大多數應用,。新版本更新了 TextTheme API 以遵循當前的 Material 規(guī)范,,但保留了舊名稱以免影響已有代碼。但是舊名稱已被棄用,,因此你將收到警告,,鼓勵你采用新名稱。 下表總結了 2018 Material TextStyle 的名稱和配置,。 請注意,Material 設計規(guī)范中稱為 body1 和 body2 的 TextStyles,,在 Flutter TextTheme API 中稱為 bodyText1 和 bodyText2,。類似地,規(guī)范中稱為 H1-H6 的 TextStyles 在 TextTheme API 中稱為 headline1-headline6,。 Google Fonts for Flutter文本和字體是密不可分的,,因此如果你喜歡新的 Material TextScale 實現,那么你可能也會喜歡新的 Google Fonts for Flutter v1.0 版本: https:///flutter/introducing-google-fonts-for-flutter-v-1-0-0-c0e993617118 Google Fonts 允許開發(fā)人員在應用中輕松嘗試和使用 fonts.google.com 中的任何字體,。當應用準備發(fā)布時,開發(fā)人員將決定用戶是否要通過 API 下載字體,,還是將字體與應用預先打包在一起,。 可訪問性和國際化最后,可訪問性是我們持續(xù)關注的一個重要領域,,因為我們認為 Flutter 應用應該能盡可能適合更多的用戶群體,,這對于我們來說是一個優(yōu)先事項。在新版本中我們已完成了全部工作,,包括滾動,、文本字段和其他輸入小部件的可訪問性修復。在新版中關閉的可訪問性問題的完整列表在此: 我們鼓勵你測試自己應用的可訪問性,,并且更新了新版本中的文檔,,提供了一些推薦的最佳實踐: https://flutter.dev/docs/development/accessibility-and-localization/accessibility 在國際化方面,我們一直在研究一些影響三星鍵盤輸入法的問題,,這些問題影響了各種東亞語言的文本輸入操作,。如今這項工作已經完成了。 工具鏈:將 Dart 開發(fā)工具移植到 Flutter,,Android 端快速入門等新版本加入了當前版本的 Dart 開發(fā)工具的移植,。如果你想嘗試一下,請啟動 DevTools 并單擊 DevTools 右上角的燒杯圖標,。 當你使用 Flutter 實現的 Dart 開發(fā)工具的預發(fā)布版本時可能會注意到各種改進,但最大的改進是新的Network標簽,。 如果你沒有在 Dart DevTools 的預發(fā)行版中看到 Network 標簽(從命令行運行時就會出現這種情況),,則可以使用以下命令手動更新: 復制代碼
按下 Record 按鈕后,Network 選項卡將顯示 Flutter 應用的網絡流量,。此外,,如果你想在啟動應用時立即開始捕獲網絡流量,則可以在 main() 方法中加入以下代碼: 復制代碼
除了更新的 Dart 開發(fā)工具,,新版本還增加了對實驗性“快速啟動”選項的支持,,該功能讓你在以 Android 為目標時將 Flutter 應用的調試速度提升多達 70%。你可以通過 flutter run --fast-start -d< 你的 Android 設備 > 啟用此選項,。該選項將安裝一個通用 Android 應用,,其中只有你的插件代碼,不包括任何 Dart 代碼或資產,。由于對 Dart 代碼或素材資源的更改無需重新構建 APK,,因此可以讓重復運行的 flutter run 命令啟動更快。該選項將你的應用打包到一個通用 Android“wrapper”中(它實際上并未安裝在你的設備上),,不同于我們正常的啟動選項,。此外在某些情況下,例如當你使用訪問后臺執(zhí)行的插件時這個選項是不能用的,。另一方面,,如果你的 Android 調試啟動時間很漫長,你可以嘗試一下這個選項,。 如果你以 Android 為目標,,則需要注意的另一個變化是:當創(chuàng)建新的 Flutter 項目時,AndroidX 是唯一的選項,。AndroidX 庫提供了稱為 Android Jetpack 的高級 Android 功能,。在上一個版本中,我們棄用了原始的 Android 支持庫,,并遷移至 AndroidX 作為所有新項目的默認設置,。在新版本中,flutter create 的–androidx 標志是唯一可用的選項,。雖然沒有使用 AndroidX 的現有應用還是能用 Flutter 編譯,,但現在也是遷移到新庫的絕佳時機。 如果你是 Android Studio 或 IntelliJ 用戶,,則會發(fā)現 Hot Reload(熱重載)功能更具彈性,。之前當你遇到任何分析錯誤時,Hot Reload 將不會重載你的代碼,。如果分析錯誤不會影響你當前正在運行的代碼(例如在單元測試中的情況),,那么沒有啟動重載就很讓人不爽了。如今,,分析錯誤并不會阻止 Hot Reload 正常運行,,來自 VM 的編譯錯誤才會,。 如果你希望在 Android Studio 或 IntelliJ 的 Flutter 插件中更早用上這些更改,我們現在為 IntelliJ 插件提供了一個開發(fā)通道,,你可以選擇該通道以更快更新,。開發(fā)通道的目標是在我們正式發(fā)布之前,,從 Flutter 開發(fā)人員那里收集有關 IDE 集成新功能的反饋,。如果你喜歡冒險,并希望向 Flutter 工具團隊提供早期反饋,,請立即注冊,! 對于 Visual Studio Code 用戶,我們建議使用新的Dart: List Outdated Packages命令,,該命令會運行新的“pub outdated”命令,。 該命令會幫助你跟蹤依賴項中的版本控制問題,。 最后,,如果你遇到了 Flutter 崩潰的情況,則工具會提示你提交錯誤,。 團隊會密切關注這些錯誤報告的嚴重性和頻率,因此請在出現提示時記錄錯誤,。 MGM 和 Superformula當然,,Flutter 是為了帶來舒適的應用體驗而誕生的。Superformula 就是一個很好的例子,,該公司最近與 MGM Resorts 合作,,對其移動應用進行了重大更新,并在 Flutter 中完全重建了應用,。他們報告說:“將 Flutter 加入我們的核心產品中可以釋放出更高的速度和靈活性,,而這些指標改進對于我們的客戶及他們的用戶來說,都可以轉化為真實可衡量的價值,?!?/p> Superformula 與 MGM Resorts 設計團隊合作,,為 Web 端,、移動端和信息亭場景創(chuàng)建了一種新的 MGM 設計語言。更精簡的團隊使用全新的 Flutter 代碼庫,,能夠比以前更快地重建應用并交付到兩個應用商店中,,從而使 MGM 的預訂轉換率提高了 9%。 重大更改與往常一樣,,我們嘗試在每個 Flutter 的新版本中盡量減少重大更改的數量,,同時繼續(xù)讓 Flutter 提供一個直觀而靈活的 API 來支持新平臺上的新用法,。在去年的用戶調查中,用戶表示他們可以容忍那些經過仔細考慮的,,可以改進框架的重大更改,。因此我們將繼續(xù)逐步改進 API。以下是新版本中的重大更改,。 #42100 使用 pushReplacement(… 時,,運行之前路徑的備用動畫 #45940 棄用 UpdateLiveRegionEvent #49389 快速滾動時延遲圖像解碼 #49391 文本選擇溢出 (Android) #49771 Assert cache hints 不對 null painters 設置 #50318 實時圖像緩存 #50354 使用 strut box heights 計算 selection rectangles,確保它們位于可視邊界之內 #50733 在 gen_l10n 中生成信息查詢 #51435 在 RouteSettings 中移除 isinitialroute #52781 將 mouse_tracking.dart 移至 rendering 總結隨著我們對移動端的支持不斷成熟,,Web 端的支持也逐漸接近生產質量,,Flutter 有望解決我們這個行業(yè)數十年來一直困擾的問題:如何使用單一源代碼庫構建出色的跨平臺應用?憑借 Flutter 提供的所有功能,,我們離這個目標越來越近了,。 作者介紹Chris Sells 很久以前就是 Windows 開發(fā)人員社區(qū)的貢獻者了。他是 Flutter 開發(fā)者體驗部門的產品經理,。 |
|
來自: 新用戶37418977 > 《Flutter》