Flutter 1.17版本重磅發布
Flutter 1.17 是2020年的第一個穩定版本,此版本包括iOS平台Metal支援(性能更快),新的Material組件,新的Network跟蹤工具等等!
對所有人來說,今年是充滿挑戰的一年。我們的目標是按季度節奏發布穩定的發行版;但是,此版本花費了更長的時間,因為我們一直在為新的發布過程重新調整基礎架構。我們繼續將品質作為第一要務,並相信新的發布模型將提高我們提供服務的能力。
自1.12穩定版本以來已關閉了前所未有的6,339個問題。這種增長的很大一部分歸功於我們與Nevercode的合作關係,這使我們在響應客戶問題方面的響應速度有所提高。今年到目前為止,我們今年關閉的錯誤比打開的錯誤多,導致凈減少了約800個問題。我們從231位貢獻者那裡合併了3,164個PR,從而修復了許多錯誤。這些都是龐大的數字,在此充滿挑戰的時刻,我們由衷的感謝大家的辛勤工作和不斷的貢獻。
如果您對我們在此版本中合併的PR的完整列表感興趣,則可以在flutter.dev網站上查看。除了品質改進之外,我們還在此版本中增加了一些新功能,包括iOS上的Metal支援,新的Material組件,新的Network跟蹤工具等等!此版本還包括Dart 2.8,您可以在Dart部落格上閱讀有關Dart 2.8的更多資訊。
移動性能和尺寸改進
此版本的主要重點是在性能和記憶體方面進行改進。只需將您的應用程式升級到此版本,就會看到更快的動畫,更小的應用程式和更低的記憶體利用率。在此版本中,默認導航情況(不透明的不透明路線)的速度將提高20%-37%。對於簡單的iOS動畫,您還將看到最多減少40%的CPU / GPU使用率,具體取決於硬體(在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默認情況下使用它,從而使您的Flutter應用程式大多數時候運行得更快,平均使渲染速度提高約50%(取決於您的工作量)。
對於不完全支援Metal的設備(A7處理器之前的版本或運行10之前的iOS版本的設備),Flutter會像過去一樣使用OpenGL,從而為較舊的設備提供原生渲染速度。有關更多詳細資訊,請在Flutter Wiki上查看iOS上的Metal常見問題。
Material控制項:NavigationRail,DatePicker等
我們會根據內部和外部客戶的回饋,繼續改進和改進Flutter中Material設計系統。在此版本中,我們添加了NavigationRail,這是一個提供響應式應用程式導航模型的新小部件。它是由Google Material Design團隊設計和實施的。 NavigationRail非常適合可以在移動和台式機尺寸之間切換的應用程式,因為隨著應用程式螢幕尺寸的增加,它很容易換成BottomNavigator。
要查看正在運行的NavigationRail,請在web_dashboard示例或在DartPad上嘗試。
除了新的小部件之外,此版本還包括對Material DatePicker和文本選擇溢出小部件的更新。
此DatePicker版本包含新的視覺效果,以匹配更新的Material準則以及新的文本輸入模式。 您可以在「Material Date Picker Redesign」規範中閱讀有關詳細資訊。
現在,當按鈕的長度比沒有溢出時可以顯示的時間長時,文本選擇菜單可提高Android和iOS的保真度。 這在菜單項單詞可能更長的語言環境中尤其明顯。
在Flutter 1.17中,還增加了新的Animations軟體包,該軟體包提供了實現新的Material motion規範的預構建動畫。
在「Implementing Motion」部落格文章中,Material設計團隊定義了四個過渡模式,用於描述組件和全螢幕視圖之間的動畫:容器變換,共享軸,淡入和淡入。儘管這些動畫在Flutter中始終可用,但是Animations軟體包使實現它們變得相當容易。將它們放到您的應用中,讓您的用戶滿意!
Material文本比例:使Flutter文本主題現代化
在此版本中,Flutter團隊完成了2018 Material Design規範的Type Scale部分的實現,同時沒有破壞現有的Flutter應用程式。 2018年10月的PR 22330中增加了對新配置的選擇加入支援,但不對新名稱提供支援。現有的文本樣式名稱未更改,因為這樣做是一個重大的API更改,可能會影響大多數應用程式。 此版本更新了TextTheme API以匹配當前的Material規範,但保留了舊名稱,以使您的程式碼不會中斷。 但是,舊名稱已被棄用,因此您將收到警告,以鼓勵您採用新名稱。
下表總結了2018 Material TextStyle的名稱和配置。
請注意,「Material設計」規範中稱為body1
和body2
的TextStyles在Flutter TextTheme API中稱為bodyText1
和bodyText2
。 同樣,規範中稱為H1-H6
的TextStyles在TextTheme API中稱為headline1-headline6
。
Google字體
如果您對新的Material Text Scale實現感到興奮,那麼您可能也會對新的Flutter v1.0版本Google字體感到興奮。
Google字體允許開發人員在其應用中輕鬆地嘗試和使用fonts.google.com中的任何字體。 當應用準備發布時,開發人員將決定用戶是否通過從API下載字體來接收字體,或者將其與應用包預先捆綁在一起。
可訪問性和國際化
最後,可訪問性是我們持續關注的一個重要領域,因為我們認為Flutter應用程式對儘可能廣泛的用戶可用是一個優先事項。 在此版本中,我們已完成了全部工作,包括滾動,文本欄位和其他輸入小部件的輔助功能修復。 您將在GitHub上看到此發行版中關閉的可訪問性問題的完整列表。 我們鼓勵您測試自己的應用程式的可訪問性,並且還通過一些建議的最佳實踐更新了此版本中的文檔。
在國際化方面,我們一直在研究一些影響三星鍵盤輸入法的問題,這些問題影響了各種東亞語言的文本輸入。 我們很高興地報告,我們已經完成了這項工作,尤其是韓國開發人員應該在此版本中找到很多值得慶祝的東西。
工具:將Dart DevTools埠移植到Flutter,Android快速入門等
此版本使我們非常接近將Dart DevTools的當前版本與新的Flutter版本交換。 如果您想嘗試一下,請啟動DevTools並單擊DevTools右上角的「燒杯」圖標。
當您使用Flutter實現的Dart DevTools的預發布版本時,您可能會注意到各種改進,但最大的改進是新的「網路」標籤。
如果您沒有在Dart DevTools的預發行版中看到「網路」標籤(例如,如果從命令行運行它),則可以使用以下命令手動進行更新:
$ pub global activate devtools
按下「記錄」按鈕後,「網路」選項卡將顯示Flutter應用程式的網路流量。 此外,如果您想從啟動應用程式時立即開始捕獲網路流量,則可以在main()方法中包含以下程式碼行:
void main() {
// enable network traffic logging
HttpClient.enableTimelineLogging = true;
runApp(MyApp());
}
除了更新的Dart DevTools,此版本還增加了對實驗性「快速啟動」選項的支援,該功能使您在定位Android時可以將Flutter應用程式的調試速度提高70%。 您可以通過
flutter run --fast-start -d <您的Android設備>
訪問此選項。 此選項將安裝僅取決於您的插件程式碼(不包括任何Dart程式碼)的通用Android應用。 由於對Dart程式碼或素材資源的更改無需重新構建APK,因此可以使重複的flutter運行命令更快地啟動。 此選項將您的應用程式捆綁到實際上並未在您的設備上安裝的通用Android「包裝器」中,這與我們正常的啟動選項不同。 此外,在某些情況下,例如, 當您使用訪問後台執行的插件時。 如果您的Android調試啟動時間讓您失望,請嘗試一下。
如果您以Android為目標,則需要注意的另一個變化是,當創建新的Flutter項目時,AndroidX是唯一的選擇。 AndroidX庫提供了稱為Android Jetpack的高級Android功能。 在上一個版本中,我們棄用了原始的Android支援庫,並將其移至AndroidX作為所有新項目的默認設置。 在此版本中,-flux創建的–androidx標誌現在是唯一可用的選項。 雖然可以繼續使用Flutter編譯不使用AndroidX的現有應用程式,但現在是遷移到新庫的絕佳時機。
如果您是Android Studio或IntelliJ用戶,則會發現「熱重裝」功能更具彈性。 進行此更改之前,如果您遇到任何分析錯誤,「熱重裝」將不會重裝您的程式碼。 如果分析錯誤不會影響您當前正在運行的程式碼(例如在單元測試中),那麼這可能會令人沮喪。 進行此更改後,分析錯誤不足以阻止Hot Reload正常運行,而取決於VM的編譯器錯誤。
如果您希望在Android Studio或IntelliJ的Flutter插件中更早地訪問此類更改,我們現在為IntelliJ插件提供了一個開發通道,您可以選擇該通道以更快地進行更新。 開發通道的目標是在我們將它們廣泛發布之前,從Flutter開發人員那裡收集有關IDE集成新功能的回饋。 如果您喜歡冒險,並希望向Flutter工具團隊提供早期回饋,請立即註冊!
對於Visual Studio Code用戶,我們建議使用新的Dart:運行新的「pub outdated」命令。
此命令旨在幫助您跟蹤依賴項中的版本控制問題。
最後但並非最不重要的一點是,如果您發現自己發生Flutter崩潰,則工具會提示您提交該錯誤。
團隊會密切關注這些錯誤報告的嚴重性和頻率,因此請在出現提示時進行記錄。
Customer Shoutout: MGM and Superformula
Flutter的存在是為了實現美麗的應用程式體驗。 數字代理機構做得令人驚奇的事情之一就是Superformula,該公司最近與MGM Resorts合作,對其移動應用程式進行了重大更新,並已在Flutter中對其進行了完全重建。 他們報告說:「將Flutter添加到我們的核心產品中,可以釋放出更高的速度和靈活性,這對於我們的客戶及其用戶而言,都可以轉化為真實的,可衡量的價值。」
Superformula與MGM Resorts設計團隊合作,為所有主要的網路,移動和資訊亭體驗創建了一種新的MGM設計語言。 通過較小的團隊和全新的Flutter程式碼庫,他們能夠比以前更快地重建應用並交付到兩個應用商店,從而使MGM的預訂轉換率提高了9%。
重大變化
與往常一樣,我們嘗試在每個Flutter的新版本中盡量減少重大更改的數量,同時仍在平衡我們的能力,以確保Flutter提供直觀,靈活的API來支援新平台上的新用法。 在去年的用戶調查中,您告訴我們,您可以容忍經過仔細考慮的,可以改進框架的重大更改。 因此,我們將繼續逐步改進API。 這些是此版本中的重大更改。
- 42100使用pushReplacement(…時,運行先前路線的輔助動畫
- 45940棄用UpdateLiveRegionEvent
- 49389快速滾動時延遲影像解碼
- 49391文本選擇溢出(Android)
- 49771未為空畫筆設置斷言快取提示
- 50318實時影像快取
- 50354使用支杆盒高度計算選擇矩形,以確保它們保持在可見範圍內
- 50733在gen_l10n中生成消息查找
- 51435從RouteSettings移除isinitialroute
- 52781將mouse_tracking.dart移至渲染
結論
隨著我們的移動支援不斷成熟,同時我們使網路更加接近生產品質,Flutter帶來了解決我們這個行業數十年來一直困擾的問題的希望:如何從一個跨多個源的單一源程式碼構建出色的應用程式 平台? 憑藉Flutter提供的所有功能,我們認為我們正在很好地回答這一問題。
交流
老孟Flutter部落格地址(近200個控制項用法)://laomengit.com
歡迎加入Flutter交流群(微信:laomengit)、關注公眾號【老孟Flutter】:
![]() |
![]() |