<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Flutter 2.5 發(fā)布啦,快來看看新特性

          共 11164字,需瀏覽 23分鐘

           ·

          2021-09-18 22:57


          Flutter 2.5 是 Flutter 版本歷史上排名第二的大版本更新,該版本:
          • 關(guān)閉了 4600 個 issues;
          • 合并了 252 contributors 和 216 reviewers 的 3932 個 PR;

          回顧過去一年,可以看到有 1337 位 contributors 創(chuàng)建了 21,072 個 PR 這樣龐大的數(shù)據(jù),其中有15,172 個被合并。

          事實上該版本依然是對性能和開發(fā)工具進行了改進,同時還有增加許多新功能,包括:

          • 對 Android 的全屏支持、更多 Material You(也稱為 v3)支持;
          • 更新文本編輯功能以支持可切換的鍵盤快捷鍵;
          • Widget Inspector 可查閱更多詳細信息;
          • Visual Studio Code 項目中對添加依賴項增加新的支持;
          • IntelliJ/Android Studio 中新增測試運行獲取覆蓋率信息;
          • 一個全新的應用程序模板,為 Flutter 應用程序提供更好的開發(fā)基礎;

          性能:iOS 著色器預熱、異步任務、GC 和消息傳遞

          #25644 中的第一個 PR 就是用于離線訓練運行 Metal 著色器預編譯,如基準測試所示,它將最壞情況的幀光柵化時間減少了 2/3 秒,將第 99 個百分位幀減少了一半。

          然而著色器預熱只是卡頓的來源之一,在之前的版本處理來自網(wǎng)絡、文件系統(tǒng)、插件或其他 isolate 的異步事件都可能會中斷動畫,這是另一個卡頓的來源。

          所以 #25789 改進了調(diào)度策略,在此版本 isolate 的 UI 事件循環(huán)里,幀處理現(xiàn)在優(yōu)先于處理其他異步事件,從而在測試中消除了此類的卡頓。

          另一個導致卡頓的原因是垃圾收集器 (GC) 暫停 UI 線程以回收內(nèi)存。

          以前某些圖像的內(nèi)存在響應 Dart VM 的 GC 執(zhí)行時會延遲回收,作為早期版本中的解決方法,F(xiàn)lutter 引擎會通過 Dart VM 的 GC 回收暗示圖像內(nèi)存可以回收,這在理論上可以實現(xiàn)了更及時的內(nèi)存回收。

          不幸的是這也導致了太多的主要 GC,并且有時仍然無法足夠快地回收內(nèi)存,以避免內(nèi)存受限設備上的低內(nèi)存情況,而在這個版本中未使用的圖像的內(nèi)存被急切地回收(#26219、#82883、#84740),大大減少了 GC。

          例如在一項測試用例中,播放 20 秒動畫 GIF 從需要 400 多次 GC 變?yōu)橹恍枰?4 次,更少的主要 GC 意味著涉及圖像出現(xiàn)和消失的動畫將減少卡頓,并消耗更少的 CPU 和功率。

          Flutter 2.5 的另一個性能改進是在 Dart 和 Objective-C/Swift (iOS) 或 Dart 和 Java/Kotlin (Android) 之間發(fā)送消息時的延遲。

          通常作為調(diào)整 消息頻道的一部分,從消息編解碼器中刪除不必要的副本可將延遲減少高達 50% ,當然具體取決于消息大小和設備(#25988,#26331)。

          Dart 2.14:格式、語言特性、發(fā)布和 linting 開箱即用

          此版本的 Flutter 和 Dart 2.14 一起發(fā)布。

          新版本的 Dart 帶有新的格式,使級聯(lián) 更加清晰,新的 pub 支持忽略文件,以及新的語言功能,包括三重移位運算符的回歸。

          此外 Dart 2.14 創(chuàng)建了一組標準的 lint,在新的 Dart 和 Flutter 項目之間共享,開箱即用。

          開發(fā)者不僅會在創(chuàng)建新的 Dart 或 Flutter 項目時獲得這些 lint,而且只需幾個步驟就可以將相同的分析添加到現(xiàn)有應用程序中。

          Framework:Android 全屏、Material You & 文本編輯快捷方式

          從 #81303 開始, 我們修復了 Android 一系列與全屏模式相關(guān)的問題,此更改還添加了一種在其他模式下收聽全屏更改的方法。

          例如用戶與應用互動時,當系統(tǒng) UI 返回時,開發(fā)人員現(xiàn)在可以編寫代碼在返回全屏時執(zhí)行其他操作。

          新的 Android 全屏模式:普通模式(左)、邊到邊模式(中)、帶有自定義 SystemUIOverlayStyle 的邊到邊(右)

          在此版本中,我們對新 Material You(又名 v3)的規(guī)范增加了支持,包括對浮動操作按鈕大小和主題的更新(#86441),在MaterialState.scrolledUnder 可以使用 Demo 中的示例代碼查看的新狀態(tài) PR 式例 ( #79999 )。

          圖片過大,截圖處理

          新的 MaterialState.scrolledUnder 狀態(tài)在起作用

          另一個改進是添加了 scroll metrics notifications(#85221、#85499),即使用戶沒有滾動,它也會提供可滾動區(qū)域的通知,例如下面顯示了 ListView 根據(jù)的基礎大小適當?shù)爻霈F(xiàn)或消失滾動條:

          圖片過大,截圖處理

          在這種情況下不必編寫任何代碼,但如果想捕獲 ScrollMetricNotification 更改,則可以通過此監(jiān)聽來完成。

          特別感謝社區(qū)貢獻者xu-baoolin,他為此付出了努力并提出了一個很好的解決方案。

          另一個出色的社區(qū)貢獻是為 ScaffoldMessenger , 你可能還記得 Flutter 2.0 開始 ScaffoldMessenger 作為一個更強大的方式來顯示 SnackBars , 在屏幕的底部為用戶提供通知,而在 Flutter 2.5 中,現(xiàn)在可以在 Scaffold 的頂部添加一個橫幅,該橫幅會一直保持到用戶關(guān)閉它為止。

          圖片過大,截圖處理

          應用程序可以通過調(diào)用以下 showMaterialBanner 方法來獲得此行為 ScaffoldMessenger :

          class HomePage extends StatelessWidget {
            const HomePage({Key? key}) : super(key: key);
            @override
            Widget build(BuildContext context) => Scaffold(
                  appBar: AppBar(
                    title: const Text('The MaterialBanner is below'),
                  ),
                  body: Center(
                    child: ElevatedButton(
                      child: const Text('Show MaterialBanner'),
                      onPressed: () => ScaffoldMessenger.of(context).showMaterialBanner(
                        MaterialBanner(
                          content: const Text('Hello, I am a Material Banner'),
                          leading: const Icon(Icons.info),
                          backgroundColor: Colors.yellow,
                          actions: [
                            TextButton(
                              child: const Text('Dismiss'),
                              onPressed: () => ScaffoldMessenger.of(context)
                                  .hideCurrentMaterialBanner(),
                            ),
                          ],
                        ),
                      ),
                    ),
                  ),
                );
          }

          Material 指南規(guī)定 開發(fā)者的應用橫幅一次只能顯示一個,因此如果你調(diào)用多次 showMaterialBannerScaffoldMessenger 它將維護一個隊列,在前一個橫幅已被關(guān)閉之后,再顯示一個新橫幅。

          感謝 Calamity210 對 Flutter 中的 Material 支持做出了如此出色的補充!

          在此版本中,我們添加了文本編輯鍵盤快捷鍵可覆蓋的功能 #85381,這是在 Flutter 2.0 及其新的文本編輯功能的基礎上進一步構(gòu)建,例如文本選擇以及能夠在處理鍵盤事件后停止它的傳播。

          如果您希望 Ctrl-A 執(zhí)行一些自定義操作而不是選擇所有文本。

          DefaultTextEditingShortcuts 類包含每個平臺上受支持的鍵盤快捷鍵列表,如果開發(fā)者想覆蓋任何內(nèi)容,可以使用 Flutter 的現(xiàn)有 Shortcuts 將任何快捷方式重新映射到現(xiàn)有或自定義意圖。

          插件:相機、圖像選擇器和 plus 插件

          另一個具有有很多改進的插件是相機插件:

          • #3795 [相機] android-rework 第 1 部分:支持 Android 相機功能的基類
          • #3796 [相機] android-rework 第 2 部分:Android 自動對焦功能
          • #3797 [camera] android-rework part 3:Android曝光相關(guān)功能
          • #3798 [相機] android-rework 第 4 部分:Android 閃光和變焦功能
          • #3799 [相機] android-rework 第 5 部分:Android FPS 范圍、分辨率和傳感器方向功能
          • #4039 [相機] android-rework 第 6 部分:Android 曝光和焦點功能
          • #4052 [camera] android-rework part 7:Android降噪功能
          • #4054 [相機] android-rework 第 8 部分:最終實現(xiàn)的支持模塊
          • #4010 [camera] 在 iOS 上不觸發(fā)設備方向
          • #4158 [相機] 修復坐標旋轉(zhuǎn)以在 iOS 上設置焦點和曝光點
          • #4197 [相機] 修復相機預覽并不總是在方向改變時重建
          • #3992 [camera] 設置不受支持的 FocusMode 時防止崩潰
          • #4151 [camera] 引入camera_web包

          image_picker 插件 也做了很多工作,專注于端到端的相機體驗:

          • #3898 [image_picker] 圖像選擇器修復相機設備
          • #3956 [image_picker] 將相機捕獲的存儲位置更改為 Android 上的內(nèi)部緩存,以符合新的 Google Play 存儲要求
          • #4001 [image_picker] 刪除了對相機權(quán)限的冗余請求
          • #4019 [image_picker] 當相機是 source 時修復旋轉(zhuǎn)

          這項工作改進了 Android 的相機和 image_picker 插件的功能和穩(wěn)健性。

          此外你會注意到 攝像頭插件 的早期版本可用于網(wǎng)絡支持 ( #4151 )。

          此預覽為在 Web 上查看相機預覽、拍照、使用閃光燈和縮放控件提供基本支持,它目前還不是被認可的插件,因此您需要明確添加它以在才能在 web 中使用。

          在此版本的 Flutter 中,F(xiàn)lutter 團隊的每個相應插件現(xiàn)在都帶有一個類似 電池 的建議:

          此外,由于這些插件不再被積極維護,它們不再被標記為 Flutter 最喜歡的插件,我們建議使用以下插件的 plus 版本:

          Flutter DevTools:性能、Widget 檢查器和 Polish

          首先最重要的是 DevTools 中增加利用引擎更新的支持(#26205、#26233、#26237、#26970、#27074、#26617)。

          其中一組更新使 Flutter 能夠更好地將跟蹤事件與特定框架相關(guān)聯(lián),這有助于開發(fā)人員確定框架可能超出預算的原因。

          可以在 DevTools Frames 圖表中看到這一點,該圖表已被重建為“實時”,可以在應用程序呈現(xiàn)時填充在此圖表中,從此圖表中選擇一個幀導航到該幀的時間線事件:

          Flutter 引擎現(xiàn)在還可以識別時間線中的著色器編譯事件,F(xiàn)lutter DevTools 使用這些事件來幫助診斷應用程序中的著色器編譯卡頓。

          借助這項新功能,DevTools 會檢測何時因著色器編譯丟失幀,以便可以解決卡頓問題。

          在 flutter run 時與 --purge-persistent-cache 標志一起使用,這會清除緩存以確保重現(xiàn)用戶在 “首次運行” 或 “重新打開” (iOS) 體驗中看到的環(huán)境。

          此外跟蹤應用程序中的 CPU 性能問題時,可能會被來自 Dart 和 Flutter 庫或引擎本機代碼的分析數(shù)據(jù)淹沒,如果想關(guān)閉其中任何一個以專注于您自己的代碼,您可以使用新的 CPU Profiler 功能 #3236 來實現(xiàn),該功能可以從這些來源中隱藏分析器信息。

          對于沒有過濾掉的任何類別,它們現(xiàn)在已經(jīng)進行了顏色編碼(#3310、#3324),以便可以輕松查看 CPU 幀圖表來自系統(tǒng)的哪些部分。

          彩色框架圖,用于識別應用中的應用、原生、Dart 和 Flutter 代碼活動

          性能并不時調(diào)試的唯一因素,此版本的 DevTools 附帶了對 Widget Inspector 的更新,允許將鼠標懸停在 Widget 時評估對象、視圖屬性、小部件狀態(tài)等。

          而當選擇一個 Widget 時,它會自動填充在新的小部件檢查器控制臺中,這樣就可以在其中瀏覽 Widget 的屬性。

          在斷點處暫停時還可以從控制臺計算表達式。

          除了新功能外 Widget Inspector 還進行了翻新,為了讓 DevTools 成為了解和調(diào)試 Flutter 應用程序的更有用,我們與芬蘭的一家創(chuàng)意技術(shù)機構(gòu)Codemate合作進行了一些更新。

          在此屏幕截圖中可以看到以下更改:

          • 更好地傳達調(diào)試切換按鈕的作用——這些按鈕具有新圖標、面向任務的標簽,以及描述它們的作用和何時使用它們的豐富工具提示,每個工具提示進一步鏈接到該功能的詳細文檔。
          • 更容易掃描和定位感興趣的 Widgets——Flutter 框架中常用的 Widget 現(xiàn)在在檢查器左側(cè)的 Widget 樹視圖中顯示圖標,它們根據(jù)類別進一步進行顏色編碼,例如布局 Widget 顯示為藍色,而內(nèi)容Widget 顯示為綠色。此外每個文本 Widget 現(xiàn)在顯示其內(nèi)容的預覽。
          • 對齊布局資源管理器和小部件樹的配色方案- 現(xiàn)在可以更輕松地從布局資源管理器和 Widget 樹中識別相同的 Widget。例如屏幕截圖中的“列” Widget 位于布局瀏覽器中的藍色背景上,并且在 Widget 樹視圖中具有藍色圖標。

          IntelliJ/Android Studio:集成測試、測試覆蓋率和圖標預覽

          Flutter 的 IntelliJ/Android Studio 插件在此版本中也進行了許多改進,首先是運行集成測試的能力 ( #5459 )。

          集成測試是在設備上運行的整個應用程序測試,位于 integration_test 目錄中,并使用與testWidgets() 單元測試相同的功能。

          要將集成測試添加到項目,請 按照 flutter.dev 上的說明進行操作,要將測試與 IntelliJ 或 Android Studio 連接,請?zhí)砑訂蛹蓽y試的運行配置并連接設備以供測試使用,運行配置可以讓開發(fā)者運行測試,包括設置斷點、步進等。

          此外,F(xiàn)lutter 最新的 IJ/AS 插件允許查看單元測試和集成測試運行的覆蓋率信息,可以從“調(diào)試”按鈕旁邊的工具欄按鈕訪問它:

          覆蓋信息在編輯器的裝訂線中使用紅色和綠色條顯示,在這個例子中第 9-13 行被測試,但第 3 和 4 行沒有被測試。

          最新版本還包括預覽來自 pub.dev 包中使用的圖標的新功能,這些包是圍繞 TrueType 字體文件(#5504、#5595、#5677、#5704)構(gòu)建的,就像 Material 和 Cupertino 圖標支持預覽一樣。

          要啟用圖標預覽,您需要告訴插件您正在使用哪些軟件包,settings/preferences 中有一個新的文本字段:

          請注意,如屏幕截圖中的示例代碼所示,此設置僅適用于在類中定義為靜態(tài)常量的圖標,它不適用于表達式,例如 LineIcons.addressBook() or LineIcons.values['code'] 。

          Visual Studio Code:依賴項、Fix All 和 Test Runner

          Flutter 的 Visual Studio Code 插件也在此版本中得到了改進,兩個新命令 “Dart: Add Dependency” and “Dart: Add Dev Dependency” (#3306, #3474)。

          這些命令提供的功能類似于Jeroen Meijer 的 Pubspec Assist 插件,新命令開箱即用,并提供定期從 pub.dev 獲取的包類型過濾列表。

          開發(fā)者可能還對適用于 Dart 文件的“Fix All”命令(#3445、#3469)感興趣,并且可以一步修復所有與dart fix相同的問題。

          這也可以通過添加 source.fixAll 到 editor.codeActionsOnSave 的 VS Code 設置來設置為在保存時運行,或者想嘗試預覽功能,可以啟用該 dart.previewVsCodeTestRunner 設置并查看通過新的 Visual Studio Code 測試運行程序運行的 Dart 和 Flutter 測試。

          Visual Studio Code 測試運行器看起來與當前的 Dart 和 Flutter 測試運行器略有不同,它將跨會話保留結(jié)果。Visual Studio Code 測試運行器還添加了新的裝訂線圖標,顯示測試的最后狀態(tài),可以單擊以運行測試(或右鍵單擊以獲取上下文菜單)。

          在即將發(fā)布的版本中,現(xiàn)有的 Dart 和 Flutter 測試運行器將被移除,以支持新的 Visual Studio Code 測試運行器。

          工具:異常、新應用模板和 Pigeon 1.0

          在此版本中,調(diào)試器現(xiàn)在可以在未處理的異常上正確中斷,而這些異常以前時被 framework 捕獲 ( #17007 )。

          這改善了調(diào)試體驗,因為調(diào)試器現(xiàn)在可以直接指向他們在代碼中的拋出行,而不是指向框架深處的隨機行。

          一個相關(guān)的新功能使開發(fā)者能夠決定 FutureBuilder 是否應該重新拋出或吞下錯誤 (#84308),這應該會為開發(fā)者提供大量額外的例外情況,以幫助追蹤 Flutter 應用程序中的問題。

          自 Flutter 誕生以來,就出現(xiàn)了 Counter 應用模板,它具有許多優(yōu)點:

          • 它展示了 Dart 語言的許多特性;
          • 展示了幾個關(guān)鍵的 Flutter 概念,并且它足夠??;
          • 可以放入單個文件中,即使有很多的解釋性評論;

          然而它沒有為Flutter 應用程序提供一個特別好的起點,在此版本中,通過以下命令提供了一個新模板 ( #83530 ):

          $ flutter create -t skeleton my_app

          圖片過大,截圖處理

          骨架模板生成一個遵循社區(qū)最佳實踐的兩頁列表視圖,它的開發(fā)經(jīng)過大量內(nèi)部和外部審查,為構(gòu)建生產(chǎn)質(zhì)量應用程序提供了更好的基礎,并支持以下功能:

          • 用于 ChangeNotifier 協(xié)調(diào)多個 Widget
          • 默認情況下使用 arb 文件生成本地化
          • 包括示例圖像并為圖像資產(chǎn)建立 1x、2x 和 3x 文件夾
          • 使用“功能優(yōu)先”的文件夾組織
          • 支持共享首選項
          • 支持明暗主題
          • 支持多頁面間導航

          隨著時間的推移,隨著 Flutter 最佳實踐的發(fā)展預計這個新模板也會隨之發(fā)展。

          另一方面,如果你正在開發(fā)插件而不是應用程序,那么可能會對 Pigeon 的 1.0 版本感興趣。

          Pigeon 是一個代碼生成工具,用于在 Flutter 及其主機平臺之間生成類型安全的互操作代碼,它允許定義插件 API 的描述,并為 Dart、Java 和 Objective-C(分別可用于 Kotlin 和 Swift)生成框架代碼。

          Flutter 團隊的一些插件中已經(jīng)使用了 Pigeon,在此版本中它提供了更多有用的錯誤消息,增加了對泛型、原始數(shù)據(jù)類型作為參數(shù)和返回類型以及多個參數(shù)的支持,預計開發(fā)者將來會更頻繁地使用它。

          重大更改和棄用

          以下是 Flutter 2.5 版本中的重大變化:

          • 默認拖動滾動設備
          • 在 v2.2 之后刪除了棄用的 API
          • 引入包:flutter_lints
          • ThemeData 的 accent 屬性已被棄用
          • GestureRecognizer Cleanup
          • 用 collate 替換 AnimationSheetBuilder.display
          • 使用 HTML 插槽在 Web 中呈現(xiàn)平臺視圖
          • 將 LogicalKeySet 遷移到 SingleActivator

          隨著繼續(xù)更新 Flutter Fix(在您的 IDE 中和通過dart fix命令可用),總共有 157 條規(guī)則來自動遷移受這些或過去的重大更改以及任何棄用影響的代碼。

          此外隨著 Flutter 2.5 的發(fā)布,我們將棄用2020 年 9 月宣布的對 iOS 8 的支持。放棄對市場份額不到 1% 的 iOS 8 的支持,使 Flutter 團隊能夠?qū)W⒂诟鼜V泛使用的新平臺,棄用意味著這些平臺可以工作,但我們不會在這些平臺上測試 Flutter 的新版本或插件。

          轉(zhuǎn)自:掘金 戀貓de小郭

          https://juejin.cn/post/7005739140452974599


          PS:如果覺得我的分享不錯,歡迎大家隨手點贊、轉(zhuǎn)發(fā)、在看。

          PS:歡迎在留言區(qū)留下你的觀點,一起討論提高。如果今天的文章讓你有新的啟發(fā),歡迎轉(zhuǎn)發(fā)分享給更多人。
          瀏覽 85
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产精品播放 | 九哥超逼网 | 亚洲无码高清在线视频 | 黑人操逼在线 | 亚洲日韩一本道 |