多年之前,當咱們討論移動跨平臺開發時,總會有人提出跨平臺應用程序速度慢的刻板問題。如今,使用Flutter自帶的渲染引擎咱們徹底能夠開發出媲美原生應用的用戶體驗,同時一套代碼便可同時運行在iOS、Android和瀏覽器等多個平臺,也帶來了應用開發效率的提高。html
做爲目前最流行的移動跨平臺技術方案,最近兩年,Flutter在移動跨平臺開發方面的成長能夠說是有目共睹的。進入2020年,Google官方在前不久發佈了2020年的更新計劃,並在前兩天更新了Flutter 1.17版本,這是2020年的第一個穩定版本。android
按照官方的說法,Flutter 1.17版本關閉了自Flutter 1.12版本的6,339個問題,從231位貢獻者那裏合併了3,164個PR,並修復了許多錯誤。除了質量改進以外,Flutter 1.17版本還在增長了一些新功能,包括iOS上的Metal支持,新的Material組件,新的Network跟蹤工具等等!git
下面,就讓咱們具體來看一下Flutter 1.17版本帶來的一些新特性吧!github
此版本最重要的地方就是在性能和內存方面進行的改進,所以,只需將您的應用程序升級到此版本,就會看到更快的動畫,更小的應用程序和更低的內存利用率。通過測算,在此版本中,默認導航狀況(不透明的不透明路線)的速度將提升20%-37%。對於簡單的iOS動畫,您還將看到最多減小40%的CPU / GPU使用率,具體取決於硬件。詳細參考數據:web
除此以外,使用此版本打的包顯著的減小了應用程序的大小。例如,Android的Flutter Gallery示例在2019年末爲9.6MB,如今爲8.1MB,減小了18.5%。對於內存使用,此版本將快速滾動瀏覽大圖像時減小了70%的內存,具體取決於設備的內存量,提升了性能,優化內存佔用。下面是一張對比圖。瀏覽器
不過最大的性能提高來自在 iOS 系統中實現對 Metal 的支持。緩存
Apple 提供的 Metal API 可使開發者能夠直接訪問底層 GPU,它也是 Apple 推薦使用的圖形 API。在支持 Metal 的 iOS 設備上,Flutter 將默認使用 Metal,使得應用在絕大多數狀況下都運行得更快,渲染速度平均提高約 50% (具體取決於設備的工做負載),具體參考渲染速度平均提高約 50%
網絡
而對於那些不徹底支持 Metal 的設備, 如使用 A7 以前的處理器或 iOS 10 以前系統的設備,Flutter 會和之前的版本同樣使用 OpenGL進行渲染,在這些設備上實現原生渲染速度。對於Metal,能夠參考iOS Metal 常見問題解答。app
基於多方用戶的反饋,Flutter也在持續推動 Material 設計系統在 Flutter 開發中落地。在新版本中,咱們加入了 NavigationRail組件,這是一個新的 widget,提供了響應式的應用導航模型。它由 Google Material Design 團隊設計並實現。
NavigationRail 很是適合在移動和桌面設備之間切換的應用,當您的應用所在的屏幕尺寸增大時,您能夠很是容易地從 BottomNavigator 切換成 NavigationRail。工具
您能夠在 web_dashboard 樣例或者 DartPad 中實際體驗 NavigationRail。除了新增了新的 widget 以外,新版本還更新了 Material DatePicker 以及修正了文字選擇菜單 widget 的溢出顯示問題。
而且,DatePicker 基於更新過的 Material 設計指南引入了新的視覺設計,並新增了文本輸入模式,詳情請閱讀 Material DatePicker 改版文檔。
另外,在Flutter 1.17中,還增長了新的Animations軟件包,該軟件包提供了實現新的Material motion規範的預構建動畫。
在《實現動效太難了?試試 Material Design》一文中,Material Design 團隊給出了組件與全屏視圖之間的四種轉場模式: 容器變換、共享軸、淡入淡出和彈出效果。雖然 Flutter 一直就能夠實現這些動效,但 Animations Package 讓您能夠更輕鬆地實現它們。
在新版本中,Flutter 團隊在不破壞現有 Flutter 應用的同時,完成了對 2018 年 Material Design 規範文字排版縮放 (Type Scale) 的實現。2018 年 10 月,咱們在 PR 22330 中添加了對新配置 (而不是新名稱) 的可選支持。現有的文本樣式名稱沒有更改,由於這屬於重大的 API 更改,可能會影響到大多數應用。
Flutter 1.17 更新了 TextTheme API,以遵循當前的 Material 規範,但保留了舊的名稱,從而不影響您的代碼。因爲舊的名稱已經被廢棄,您將收到 warning 提示,建議採用新的名稱。2018 年 Material TextStyle 的名稱和配置彙總以下表所示。
Material Design 規範中稱爲 body1 和 body2 的 TextStyle 在 Flutter TextTheme API 中被稱爲 bodyText1 和 bodyText2。一樣的,在規範中稱爲 H1-H6 的 TextStyle,在 TextTheme API 中稱爲 headline1-headline6。
文本和字體老是密不可分,若是新的 Material 文字縮放實現讓您眼前一亮,那麼您可能也會對新的 Google Fonts for Flutter v1.0 頗感興趣。
Google字體容許開發人員在其應用中輕鬆地嘗試和使用fonts.google.com中的任何字體。 當應用準備發佈時,開發人員將決定用戶是否經過從API下載字體來接收字體,或者將其與應用包預先捆綁在一塊兒。
最後,是咱們持續關注的課題——無障礙功能。咱們認爲,讓 Flutter 應用能夠服務最爲普遍的受衆是咱們的首要任務之一。在新版本中,咱們作了更加全面的工做,對滾動、文本框以及其餘輸入 widget 的無障礙功能進行了修復。GitHub 上有咱們在這個版本中完成修復的無障礙功能完整列表。咱們但願開發者能多多測試本身應用的無障礙功能,而且隨着此次版本還發布了一些推薦的最佳實踐供你們參考。
而在國際化方面,咱們一直在研究一些影響三星鍵盤輸入法的問題,這些問題影響了各類東亞語言的文本輸入。 咱們很高興地報告,咱們已經完成了這項工做,尤爲是韓國開發人員應該在此版本中找到不少值得慶祝的東西。
將當前版本的 Dart DevTools 替換成新的 Flutter 版本,而後在啓動 DevTools 後點擊右上角的 Beaker (燒瓶) 圖標就能夠 支持 Flutter了。
由 Flutter 實現的 Dart DevTools 預發佈版本帶來了諸多改進,其中全新的 Network (網絡) 選項卡最爲重要。
若是您在 Dart DevTools 的預發佈版本中沒有看到 Network 選項卡 (好比,您是經過命令行來使用 DevTools),那麼能夠經過以下命令手動更新它,以下所示。
pub global activate devtools
而後,在按下 Record (錄製) 按鈕後, Network 選項卡會顯示您的 Flutter 應用的網絡流量狀況。若是您想在應用啓動時就當即開始監測網絡流量,能夠在您的 main() 方法中加入以下代碼。
void main() { // enable network traffic logging HttpClient.enableTimelineLogging = true; runApp(MyApp()); }
除了 Dart DevTools 的更新以外,這個版本還實驗性地增長了 "快速啓動" 選項,當您調試 Android 版 Flutter 應用時,其啓動速度能夠提高高達 70%。您能夠經過以下命令來開啓這一功能。
flutter run --fast-start -d <您的Android設備>
這個選項會安裝一個只依賴您的插件代碼的通用 Android 應用,而不包含任何 Dart 代碼或資源。這會讓重複運行的 flutter run 命令更快地啓動,由於修改 Dart 代碼或資源並不須要從新構建 APK。和一般的啓動選項不一樣,快速啓動選項將您的應用綁定到了一個通用的 Android "容器" 中,實際上並不會在您的設備上安裝。在一些狀況下,好比您使用的插件訪問了後臺執行的內容,快速啓動選項將不起做用。若是您以爲 Android 調試的啓動時間漫長得讓人頭疼,不妨試試這個全新的選項吧。
若是您的目標平臺是 Android,您會注意到,如今建立新的 Flutter 項目時只提供 AndroidX 選項。AndroidX 庫提供了被稱爲 Android Jetpack 的高級 Android 功能。在上一個版本中,咱們再也不支持原先的 Android Support Library,轉而將 AndroidX 做爲全部新項目的默認選項。在 Flutter 1.17 中,flutter create 命令只有 --androidx 這一個選項。雖然現有的不使用 AndroidX 的 Flutter 應用依然能夠編譯,可是時候遷移至 AndroidX 了。
若是您使用 Android Studio 或 IntelliJ,您會發現 Hot Reload (熱重載) 功能的容錯性更強了。在本次更新以前,若是您的應用出現了任何分析錯誤,Hot Reload 將不會從新加載您的代碼。若是分析錯誤並不涉及您當前正在運行的代碼 (好比在單元測試中),會讓人很崩潰。但經過本次更新,Hot Reload 將再也不受分析錯誤影響,而取決於 VM 中的編譯錯誤。
若是您想更早地體驗 Android Studio 或 IntelliJ 的 Flutter 插件中相似的改進,咱們如今也爲 IntelliJ 插件提供了 dev 渠道,您能夠選擇加入,以更快獲取到這些更新。這個 dev 渠道的目標是在公開發布新 IDE 集成功能前經過 Flutter 開發者收集反饋。若是您但願嚐鮮而且願意向 Flutter 工具團隊提供早期反饋,請即刻加入咱們的體驗計劃!
若是您使用的是 Visual Studio Code開發工具,咱們推薦使用新的 Dart: List Outdated Packages 命令來運行新的 pub outdedated 命令,以下所示。
此命令旨在幫助您跟蹤依賴項中的版本控制問題。最後,但並不是最不重要的一點是,若是您在使用Flutter時發生崩潰,則工具會提示您提交該錯誤。咱們的團隊會密切關注這些錯誤報告的嚴重程度和出現頻率,因此當這些提示出現時,請提交 bug 給咱們。
除了上面介紹的新特性外,咱們還提供了案例分享。數字開發商 Superformula 最近就完成了一件精彩的做品: 他們最近與 MGM Resorts (美高梅酒店集團) 合做,徹底使用 Flutter 對其移動應用進行了重構。他們反饋道,"在覈心產品中引入 Flutter,爲咱們的客戶和他們的用戶帶來了更快的速度和更高的靈活性,從而爲他們帶來了真正的、可衡量的價值。"
Superformula 與 MGM Resorts 設計團隊合做,爲全部主要的網絡、移動和店頭體驗打造了全新的 MGM 設計語言。這個規模不大的團隊使用全新的 Flutter 源碼庫更快地完成了應用改版,並在兩個應用商店上架,使得 MGM 的預訂轉化率提升了 9%。
和以往的版本同樣,咱們會盡可能減小每個 Flutter 新版本中的重要改動,並回反覆權衡利弊,確保 Flutter 可以提供直觀、靈活的 API,可以在新平臺上支持新的開發習慣。
Flutter 1.17 中的重要改動包括:
連接: Flutter中文網