Flutter 1.17 是2020年的第一個穩定版本,此版本包括iOS平臺Metal支持(性能更快),新的Material組件,新的Network跟蹤工具等等!html
對全部人來講,今年是充滿挑戰的一年。咱們的目標是按季度節奏發佈穩定的發行版;可是,此版本花費了更長的時間,由於咱們一直在爲新的發佈過程從新調整基礎架構。咱們繼續將質量做爲第一要務,並相信新的發佈模型將提升咱們提供服務的能力。android
自1.12穩定版本以來已關閉了史無前例的6,339個問題。這種增加的很大一部分歸功於咱們與Nevercode的合做關係,這使咱們在響應客戶問題方面的響應速度有所提升。今年到目前爲止,咱們今年關閉的錯誤比打開的錯誤多,致使淨減小了約800個問題。咱們從231位貢獻者那裏合併了3,164個PR,從而修復了許多錯誤。這些都是龐大的數字,在此充滿挑戰的時刻,咱們由衷的感謝你們的辛勤工做和不斷的貢獻。ios
若是您對咱們在此版本中合併的PR的完整列表感興趣,則能夠在flutter.dev網站上查看。除了質量改進以外,咱們還在此版本中增長了一些新功能,包括iOS上的Metal支持,新的Material組件,新的Network跟蹤工具等等!此版本還包括Dart 2.8,您能夠在Dart博客上閱讀有關Dart 2.8的更多信息。git
此版本的主要重點是在性能和內存方面進行改進。只需將您的應用程序升級到此版本,就會看到更快的動畫,更小的應用程序和更低的內存利用率。在此版本中,默認導航狀況(不透明的不透明路線)的速度將提升20%-37%。對於簡單的iOS動畫,您還將看到最多減小40%的CPU / GPU使用率,具體取決於硬件(在PR 14104和PR 13976中有詳細說明)。github
該版本還顯著的減小了應用程序的大小。例如,Android的Flutter Gallery示例在2019年末爲9.6MB,如今爲8.1MB,減小了18.5%。web
對於內存使用,此版本將快速滾動瀏覽大圖像時減小了70%的內存,具體取決於設備的內存量,提升了性能。緩存
可是,最普遍的性能改進是iOS中對Metal的支持。微信
蘋果公司在iOS上對Metal的支持幾乎能夠直接訪問底層GPU,而且是蘋果公司推薦的圖形API。在徹底支持Metal的iOS設備上,Flutter默認狀況下使用它,從而使您的Flutter應用程序大多數時候運行得更快,平均使渲染速度提升約50%(取決於您的工做量)。網絡
對於不徹底支持Metal的設備(A7處理器以前的版本或運行10以前的iOS版本的設備),Flutter會像過去同樣使用OpenGL,從而爲較舊的設備提供原生渲染速度。有關更多詳細信息,請在Flutter Wiki上查看iOS上的Metal常見問題。架構
咱們會根據內部和外部客戶的反饋,繼續改進和改進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軟件包使實現它們變得至關容易。將它們放到您的應用中,讓您的用戶滿意!
在此版本中,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
。
若是您對新的Material Text Scale實現感到興奮,那麼您可能也會對新的Flutter v1.0版本Google字體感到興奮。
Google字體容許開發人員在其應用中輕鬆地嘗試和使用fonts.google.com中的任何字體。 當應用準備發佈時,開發人員將決定用戶是否經過從API下載字體來接收字體,或者將其與應用包預先捆綁在一塊兒。
最後,可訪問性是咱們持續關注的一個重要領域,由於咱們認爲Flutter應用程序對儘量普遍的用戶可用是一個優先事項。 在此版本中,咱們已完成了所有工做,包括滾動,文本字段和其餘輸入小部件的輔助功能修復。 您將在GitHub上看到此發行版中關閉的可訪問性問題的完整列表。 咱們鼓勵您測試本身的應用程序的可訪問性,而且還經過一些建議的最佳實踐更新了此版本中的文檔。
在國際化方面,咱們一直在研究一些影響三星鍵盤輸入法的問題,這些問題影響了各類東亞語言的文本輸入。 咱們很高興地報告,咱們已經完成了這項工做,尤爲是韓國開發人員應該在此版本中找到不少值得慶祝的東西。
此版本使咱們很是接近將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崩潰,則工具會提示您提交該錯誤。
團隊會密切關注這些錯誤報告的嚴重性和頻率,所以請在出現提示時進行記錄。
Flutter的存在是爲了實現美麗的應用程序體驗。 數字代理機構作得使人驚奇的事情之一就是Superformula,該公司最近與MGM Resorts合做,對其移動應用程序進行了重大更新,並已在Flutter中對其進行了徹底重建。 他們報告說:「將Flutter添加到咱們的核心產品中,能夠釋放出更高的速度和靈活性,這對於咱們的客戶及其用戶而言,均可以轉化爲真實的,可衡量的價值。」
Superformula與MGM Resorts設計團隊合做,爲全部主要的網絡,移動和信息亭體驗建立了一種新的MGM設計語言。 經過較小的團隊和全新的Flutter代碼庫,他們可以比之前更快地重建應用並交付到兩個應用商店,從而使MGM的預訂轉換率提升了9%。
與往常同樣,咱們嘗試在每一個Flutter的新版本中儘可能減小重大更改的數量,同時仍在平衡咱們的能力,以確保Flutter提供直觀,靈活的API來支持新平臺上的新用法。 在去年的用戶調查中,您告訴咱們,您能夠容忍通過仔細考慮的,能夠改進框架的重大更改。 所以,咱們將繼續逐步改進API。 這些是此版本中的重大更改。
隨着咱們的移動支持不斷成熟,同時咱們使網絡更加接近生產質量,Flutter帶來了解決咱們這個行業數十年來一直困擾的問題的但願:如何從一個跨多個源的單一源代碼構建出色的應用程序 平臺? 憑藉Flutter提供的全部功能,咱們認爲咱們正在很好地回答這一問題。
老孟Flutter博客地址(近200個控件用法):laomengit.com
歡迎加入Flutter交流羣(微信:laomengit)、關注公衆號【老孟Flutter】:
![]() |
![]() |