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 8一同發佈的API,具備兼顧圖形與計算功能、面向底層、低開銷的硬件加速[4]等優點。Flutter現已默認使用Metal,讓用戶應用的平均渲染速度加快了50%(由實際業務決定)。緩存
而在不支持Metal的設備上(A7處理器及iOS 10如下),Flutter將繼續使用OpenGL進行渲染。 bash
NavigationRail
、DatePicker
、VisualDensity
及更多 Flutter團隊正在持續地根據客戶的反饋推動Flutter中Material Design的實現。本次由Material Design團隊設計並實現了一個用於響應式App佈局的路由組件NavigationRail
,該組件能與BottomNavigator
快速轉換,在設備尺寸變大時隨之改變,能很好地適應移動端與桌面版的佈局。網絡
快速體驗 NavigationRail
能夠訪問 demo 或在 dartpad 上進行嘗試。
此外,基於Material Design的日期選擇器DatePicker
也已一同發佈。新的DatePicker
使用了符合Material指導的視覺效果,經過詳情文章能夠了解到更多。
VisualDensity
也是新引入的內容,其指代的是Material Design中各種組件的視覺密度。經過調整它可使得標準Material組件之間更加緊湊或疏遠。新版本在ThemeData
中引入了設置(ThemeData.visualDensity
)。詳細介紹請移步文檔。
文字選擇菜單也已針對平臺作了相應的改進。如今菜單內的選項超出屏幕寬度時將會自動收起並能夠經過與原生一致的操做切換,解決了某些語言中操做項的文字過長時佈局溢出的問題。
與1.17一塊兒,Flutter團隊一同發佈了基於Material 運動系統的預設動畫組件包。
在Material的運動系統介紹文章中,Material Design團隊定義了從組件到全屏視圖的四種動畫變化類型:容器轉換、共軸轉換、交叉漸變、漸變。儘管Flutter本來就能夠實現對應效果,但該動畫組件包能讓開發者更輕鬆地實現它們。
在該版本的發佈中,Flutter團隊在兼容之前版本的App的前提下完整整合了2018標準的Material Design文本大小定義。原有的TextTheme
API使用未受影響,但如今被標記爲廢棄,提醒開發者儘快遷移到新的標準。
在Flutter的TextTheme
中,bodyText1
和bodyText2
對應着Material Design的body1
和body2
。相似的還有H1-H6
,對應headline1-headline6
。
若是你對新的Material Design文字縮放感興趣,那麼相信你對在Flutter中使用GoogleFonts
也抱有很是大的期待。
GoogleFonts
讓開發者能輕易地在開發的App中體驗和使用fonts.google.com
上的全部字體,開發者能夠選擇讓用戶直接經過API下載字體,或在應用中內置提供這些字體。
Flutter團隊持續關注的另外一個方向即是輔助功能,它將讓Flutter應用的應用範圍更加普遍而且爲特定場景增長了可用性。在該版本中針對滑動、文字、輸入框及其餘輸入組件修復了大量問題。官方推薦開發者根據文檔中更新的最佳實踐去測試本身的應用。
在國際化方面,團隊針對三星輸入法對許多東亞語言的影響完成了修復。思密達開發者們應該會慶祝這些改動🤣
該版本的發佈伴隨着即將發佈的與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改動:
RouteSettings
中移除isInitialRoute
mouse_tracking.dart
移動至rendering2020年註定是不平凡的一年,對於Flutter來講也不例外。但Flutter Team仍然在谷爹的強力支持下堅持了下來,而且作了巨量的工做,向團隊致敬!
最後照例歡迎各位加入Flutter Candies,一塊兒製造可愛好用的🍬。 (QQ羣:181398081)
References: