【譯】Flutter 1.17 | 2020年度第一個穩定版本,你想了解什麼?

  2020年5月6日,Flutter終於迎來的本年的第一個穩定版本:1.17.0,距離上一個穩定版本的發佈已通過去了將近5個月(146天)。受到世界範圍的你我都知道的狀況影響,今年的Google I/O也被取消,必定程度影響了本次版本的發佈。同時在臨近發佈前出現了具備嚴重影響的BUG,也致使發佈時間再次被推遲。html

  那麼1.17.0到底更新了什麼?是否是能再一次顛覆使用體驗?可否讓開發者再次真香?如下經過對Medium原文進行部分總結翻譯以及補充,爲各位進行解答~(若有錯漏歡迎指出)(有英文原文沒有的內容噢😉)android

寫在前面

  本次Flutter版本的發佈,開發團隊將更多的時間用於構建新的發佈流程架構。自上一次發佈穩定版本以來,已解決了6339個問題(issue),分別從231位開源貢獻者合併了3164個提交請求。得益NeverCode與團隊的合做,今年團隊在Flutter的倉庫上關閉的issue比新增的issue更多,總數減小了約800個。與Flutter一同發佈的還有Dart 2.八、iOS新增Metal渲染支持、新的Meterial組件和新的網絡追蹤調試工具等。git

移動端性能及應用大小優化

  性能及內存優化的工做是此次新版本的重點。升級到新版本後,用戶將馬上感覺到更流暢快速的動畫、更小的應用大小以及更低的內存佔用。如今通常的路由變換場景(非透明的路由過渡)將提速20%-37%。根據不一樣設備硬件性能的不一樣,在簡單的iOS動畫上能減小最多40%的CPU/GPU使用率(engine#14104 / engine#13976)。github

  該版本還包含了大量的應用大小優化。例如官方的展現應用Flutter Gallery的Android應用包大小從9.6MB減少到了8.1MB(18.5%)。web

  另外在內存使用率方面,帶有圖片的列表在快速滾動時形成的內存佔用及波動一直是Flutter的痛點之一。該版本將快速滾動帶圖片(大圖)列表場景的內存使用率下降了70%shell

  但,最值得說明的性能強力提高是對iOS Metal的支持。api

Metal的支持爲iOS應用帶來了50%的性能提高

  Metal是與iOS 8一同發佈的API,具備兼顧圖形與計算功能、面向底層、低開銷的硬件加速[4]等優點。Flutter現已默認使用Metal,讓用戶應用的平均渲染速度加快了50%(由實際業務決定)緩存

  而在不支持Metal的設備上(A7處理器及iOS 10如下),Flutter將繼續使用OpenGL進行渲染。   bash

Material部件:NavigationRailDatePickerVisualDensity及更多

  Flutter團隊正在持續地根據客戶的反饋推動Flutter中Material Design的實現。本次由Material Design團隊設計並實現了一個用於響應式App佈局的路由組件NavigationRail,該組件能與BottomNavigator快速轉換,在設備尺寸變大時隨之改變,能很好地適應移動端與桌面版的佈局。網絡

  快速體驗 NavigationRail 能夠訪問 demo 或在 dartpad 上進行嘗試。

  此外,基於Material Design的日期選擇器DatePicker也已一同發佈。新的DatePicker使用了符合Material指導的視覺效果,經過詳情文章能夠了解到更多。

  VisualDensity也是新引入的內容,其指代的是Material Design中各種組件的視覺密度。經過調整它可使得標準Material組件之間更加緊湊或疏遠。新版本在ThemeData中引入了設置(ThemeData.visualDensity)。詳細介紹請移步文檔

  文字選擇菜單也已針對平臺作了相應的改進。如今菜單內的選項超出屏幕寬度時將會自動收起並能夠經過與原生一致的操做切換,解決了某些語言中操做項的文字過長時佈局溢出的問題。

Android平臺的文本選擇

iOS平臺的文本選擇

  與1.17一塊兒,Flutter團隊一同發佈了基於Material 運動系統的預設動畫組件包

  在Material的運動系統介紹文章中,Material Design團隊定義了從組件到全屏視圖的四種動畫變化類型:容器轉換、共軸轉換、交叉漸變、漸變。儘管Flutter本來就能夠實現對應效果,但該動畫組件包能讓開發者更輕鬆地實現它們。

Material文本:更現代化的Flutter文字主題

  在該版本的發佈中,Flutter團隊在兼容之前版本的App的前提下完整整合了2018標準的Material Design文本大小定義。原有的TextTheme API使用未受影響,但如今被標記爲廢棄,提醒開發者儘快遷移到新的標準。

  在Flutter的TextTheme中,bodyText1bodyText2對應着Material Design的body1body2。相似的還有H1-H6,對應headline1-headline6。   

用於Flutter的谷歌字體

  若是你對新的Material Design文字縮放感興趣,那麼相信你對在Flutter中使用GoogleFonts也抱有很是大的期待。

  GoogleFonts讓開發者能輕易地在開發的App中體驗和使用fonts.google.com上的全部字體,開發者能夠選擇讓用戶直接經過API下載字體,或在應用中內置提供這些字體。

輔助功能和國際化  

  Flutter團隊持續關注的另外一個方向即是輔助功能,它將讓Flutter應用的應用範圍更加普遍而且爲特定場景增長了可用性。在該版本中針對滑動文字輸入框其餘輸入組件修復了大量問題。官方推薦開發者根據文檔中更新的最佳實踐去測試本身的應用。

  在國際化方面,團隊針對三星輸入法對許多東亞語言的影響完成了修復。思密達開發者們應該會慶祝這些改動🤣

工具:整合Flutter的Dart DevTools、Android快速啓動應用調試及更多

  該版本的發佈伴隨着即將發佈的與Flutter進行整合的Dart DevTools,若是你想馬上嘗試它,請啓動DevTools並點擊右上角的"beaker"圖標。

  在預發佈的DevTools中,你會看到多項優化點,但最重要的一項即是Network網絡)選項卡。

  網絡選項卡如今能夠查看來自應用的網路請求,方便快速地排查請求問題。若是開發者在DevTools中沒有找到該選項卡,能夠經過如下命令來進行升級或啓用:

$ pub global actiat devtools
複製代碼

  默認狀況下,網絡選項卡會在你點擊"Record"(開始記錄)後顯示你的網絡活動,但若是開發者但願從App啓動開始時就記錄,能夠在main()入口中使用如下方法:

void main() {
    // 啓用網絡請求輸出
    HttpClient.enableTimelineLogging = true;
    runApp(MyApp());
}
複製代碼

  新的DevTools帶來了另外一項實驗性功能:安卓「快速啓動」,讓開發者開啓調試的速度加快70%。這項功能能夠經過flutter run --fast-start -d <your Android Device>開啓。使用功能時,一個僅基於平臺代碼、不含dart代碼和資源變更的「殼」APK包將被安裝到設備上。因爲修改dart代碼或資源並不須要APK從新構建,這會讓flutter run更快地啓動。與傳統的啓動模式不一樣,這個功能會將你的代碼包裝在一個殼中運行。在某些狀況下這項功能將沒法生效,例如在應用使用了原生插件調用了方法。

  從該版本起,建立新的Flutter應用時,將僅容許建立使用AndroidX的應用。團隊已將全部的support API標記爲廢棄,在建立新項目時--android參數是惟一有用的參數。雖然support版本的應用仍然能正常打包,但此時不遷移更待什麼時候?

  若是開發者是Android Studio或者IntelliJ用戶,會發現熱重載變得更爲靈活了。在之前當分析器認爲代碼中存在錯誤(error)時,將阻止開發者熱重載。當這些錯誤並不對你當前正在開發或調試的功能形成影響時,會讓你花費更多的時間去處理這些錯誤,讓人惱火。自此分析器再也不有權利阻止熱重載的進程,而交給VM編譯過程來進行判斷。

  這些改動都發布在了對應的dev分支,若是開發者想盡快參與到其中,能夠經過此處報名。經過參與新版本的測試更頻繁的更新,與Flutter團隊反饋使用感想,將讓編譯器插件更加健壯。

  對於VS Code開發者,團隊推薦一項新的功能:Dart: List Outdated Packages(pub outdated。它能夠幫助開發者排查依賴版本不匹配致使的問題。

  最後,若是開發者碰到了Flutter crash,工具將引導開發者以正確的方式上報異常,Flutter團隊會密切關注這類錯誤的嚴重程度和頻率。

  

不兼容的改動

  該版本中包含如下重大不兼容API改動:

寫在最後

  2020年註定是不平凡的一年,對於Flutter來講也不例外。但Flutter Team仍然在谷爹的強力支持下堅持了下來,而且作了巨量的工做,向團隊致敬!

  最後照例歡迎各位加入Flutter Candies,一塊兒製造可愛好用的🍬。 (QQ羣:181398081) FlutterCandies

References:

  1. medium.com/flutter/ann…
  2. flutter.dev/docs/develo…
  3. blog.codemagic.io/flutter-and…
  4. zh.wikipedia.org/wiki/Metal_…
  5. api.flutter.dev/flutter/mat…
  6. material.io/design/layo…
相關文章
相關標籤/搜索