Flutter 2.8 新特性續集【Flutter專題9】

      網友投稿 1009 2025-04-01

      昨天北風搖曳,我們等來了flutter2.8的更新,看他的介紹,說是更快速、更高效,我們一起查看更多細節內容吧

      歡迎來到 Flutter 2.8!該版本包含了 207 位 contributors 和 178 位 reviewers 的內容,其中一共有 2,424 個合并的 PR,并 Closed 了 2976 個問題。

      與往常一樣,Flutter 的工作的第一位就是保證質量,我們花費了大量時間來確保 Flutter 在支持的設備范圍內可以盡可能平穩和穩健地運行。

      Startup

      該版本改進了應用的啟動延遲問題,這個改進在 Google Pay 中進行了, Google Pay 作為一個主流的大型應用程序,代碼超過 100 萬行,使用它進行測試可以確保這些更改所產生的影響是可以被感知的。

      所有這些改進使得 Google Pay 在低端 Android 設備上運行時的啟動延遲降低了 50%,在高端設備上降低了 10%。

      Flutter 通過影響 Dart VM 的垃圾收集策略的方式,可以有助于避免在應用啟動期間出現不合時宜的 GC 。

      例如在 Android 上渲染第一幀之前,Flutter 現在 只通知 Dart VM TRIM_LEVEL_RUNNING_CRITICAL 及以上的內存壓力信號,在本地測試中,這個更改將低端設備上的第一幀時間減少了多達 300 毫秒。

      出于嚴謹的考慮,在之前的版本中 Flutter 創建平臺視圖時會阻塞平臺線程,這次通過詳細的推理和測試 確定了可以刪除一些序列化,這個改進消除了在低端設備上啟動 Google Pay 期間超過 100 毫秒的阻塞。

      另外,以前設置默認字體管理器時,會在設置第一個 Dart isolate 時添加人為的延遲,而延遲默認字體管理器 和 Dart Isolate 設置,這樣既改善了啟動延遲,又使上述優化的效果更加明顯。

      # Memory

      由于 Flutter 頻繁地加載 Dart VM 的 “service isolate”,這部分 AOT 代碼與應用程序捆綁在一起,因此 Flutter 會同時將這兩者都讀入內存,因此針對內存受限的設備, Flutter 開發人員在進行性能跟蹤時遇到了問題。

      在 2.8 版本中針對 Android 設備, Dart VM 的 service isolate 被拆分為可以單獨加載的自己的包,這樣的調整讓設備可節省最多 40 MB 的內存。

      通過 Dart VM informing the OS ,內存占用進一步減少了 10% ,AOT 程序使用的內存將可能不需要再次讀取文件,因此,之前保存文件備份數據副本的頁面可以被回收并用于其他用途。

      Profiling

      以便更好地了解應用程序中的性能問題,在應用程序啟動時啟用,2.8 版本現在會將跟蹤事件發送到 Android systrace 記錄器,即使 Flutter 應用程序構建在發布模式下也會發送這些事件。

      此外為了創建更少卡頓的動畫效果,開發者可能會想要更多關于光柵緩存行為的性能跟蹤信息,因為這個行為對于 Flutter 來說是比較昂貴的,可以重復使用的圖片進行 blit, 而不是在每一幀上重新繪制它們,在性能跟蹤中的新事件流現在允許跟蹤光柵緩存圖片的生命周期

      Flutter DevTools

      對于調試性能問題,該版本的 DevTools 添加了一個新的“Enhance Tracing”功能,它可以幫助開發者診斷因昂貴的構建、布局和繪制操作而導致的 UI 卡頓。

      啟用這些跟蹤功能中的任何一個后,時間軸將包含用于構建的 Widget、布置的渲染對象和繪制渲染對象的新事件(視情況而定)。

      此外該版本的 DevTools 增加了分析應用程序啟動性能的支持,該配置文件包含從 Dart VM 初始化到第一個 Flutter 幀渲染的 CPU 樣本。

      在按下 “Profile app start up” 按鈕并加載應用程序啟動配置文件后,開發者將看到為配置文件選擇的 “AppStartUp” 用戶標簽,另外還可以通過在可用用戶標簽列表中,選擇此用戶標簽過濾器(如果有)來加載應用程序啟動配置文件。

      選擇此標簽會顯示應用啟動的配置文件數據。

      Web platform views

      Android 和 iOS 并不是唯一獲得性能改進的平臺,該版本還改進了 Flutter web 平臺的性能。

      Flutter Web 使用 HtmlElementView Widget 實現了這一點,它允許開發者在 Flutter Web 應用程序中托管 HTML 元素。

      如果開發者使用的是 google_maps_flutter 插件或 video_player 插件的 web 版本,或者你已經遵循了 Flutter 團隊關于如何優化網絡上顯示圖像的建議,那么您其實已經在使用 platform views。

      在之前版本的 Flutter 中,platform view 會立即創建一個新的畫布,每個額外的平臺視圖都會添加另一個畫布,可是創建額外的畫布是很昂貴的,因為每個畫布都是整個窗口的大小。

      所以該版本會復用早期平臺視圖創建的畫布,這意味著開發者可以在 HtmlElementView 的 Web 應用中擁有多個實例而不會降低性能,同時還可以減少使用平臺視圖時的滾動卡頓。

      WebView 3.0

      這次 webview_flutter 的另一個新版本是,這里提高了版本號,是因為新功能的數量增加了,而且還因為 Web 視圖在 Android 上的工作方式可能發生了重大變化。

      在之前的版本中, webview_flutter 的 hybrid composition 模式已經可用,但并不是默認設置。

      hybrid composition 修復了先前默認 virtual displays 模式存在的許多問題,根據用戶反饋和問題跟蹤的結果,我們認為是時候讓 hybrid composition 成為默認設置了,另外 webview_flutter 還增加了一些要求很高的功能:

      支持 POST 和 GET 來填充內容(4450、4479、4480、4573)

      從文件和字符串(4446、4486、4544、4558)加載 HTML

      透明背景支持(3431、3431、4570)

      在加載內容之前編寫 cookie(4555、4555、4557)

      此外在 3.0 版本中,webview_flutter 為新平臺提供了初步支持:web,這個支持允許開發者從單個代碼庫構建 mobile 和 web 應用,在 Flutter Web 應用程序中托管 Web 視圖是什么樣的?從代碼的角度來看它看起來是一樣的:

      import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:webview_flutter/webview_flutter.dart'; import 'package:webview_flutter_web/webview_flutter_web.dart'; void main() { runApp(const MaterialApp(home: HomePage())); } class HomePage extends StatefulWidget { const HomePage({Key? key}) : super(key: key); @override State createState() => _HomePageState(); } class _HomePageState extends State { @override void initState() { super.initState(); // required while web support is in preview if (kIsWeb) WebView.platform = WebWebViewPlatform(); } @override Widget build(BuildContext context) => Scaffold( appBar: AppBar(title: const Text('Flutter WebView example')), body: const WebView(initialUrl: 'https://flutter.dev'), ); }

      在 Web上運行時它也會按開發者的預期工作:

      請注意,其實當前的 webview_flutter for web 的實現還有許多限制,因為它是使用 構建的 iframe 實現的。

      它僅支持簡單的 URL 加載,無法控制加載的內容或者和加載的內容交互

      有關更多信息,請查看 webview_flutter_web Readme

      但是 webview_flutter_web 由于太收歡迎,我們將作為 未經認可的插件提供,如果你想嘗試一下,請將以下行添加到 pubspec.yaml 中:

      dependencies: webview_flutter: ^3.0.0 webview_flutter_web: ^0.1.0 # add unendorsed plugin explicitly 復制代碼

      Flutter Favorites

      Flutter Ecosystem Committee 生態系統委員會再次召開會議,指定以下 Flutter Favorites 包:

      三種自定義路由器包:beamer,routemaster 和 go_router

      drift,一個功能強大且流行的 Flutter 和 Dart 響應式持久化庫的重命名,構建在 sqlite

      freezed,一個 Dart “語言補丁” 為定義模型、克隆對象、模式匹配等提供簡單的語法

      dart_code_metrics

      幾個非常好看的圖形用戶界面包:flex_color_scheme,flutter_svg,feedback,toggle_switch,和 auto_size_text

      特定于平臺的軟件包

      flutter: plugin: platforms: android: package: com.example.hello pluginClass: HelloPlugin ios: pluginClass: HelloPlugin 復制代碼

      但是隨著 Dart FFI 變得更加成熟,可以像 path_provider_windows 包一樣在 100% Dart 中實現用于特定平臺的功能,所以當沒有任何本機類可以使用,但你仍想將你的包指定為僅支持某些平臺時,請改用該dartPluginClass 屬性:

      flutter: plugin: implements: hello platforms: windows: dartPluginClass: HelloPluginWindows 復制代碼

      使用這個配置后,即使沒有任何 native 代碼,也已將包指定為僅支持某些平臺,另外還必須提供 Dart 插件類;可以在 flutter.dev 上的 Dart-only 平臺實現文檔中了解更多信息。

      Firebase

      關于它的一系列升級和更新,很大一塊,反正國內用不上,懶得寫了

      Desktop

      Flutter 2.8 版本在 Windows、macOS 和 Linux 穩定版本的道路上又邁出了一大步。 包括國際化和本地化支持,如最近的 中文IME支持、韓語IME支持和漢字IME支持。

      一個為穩定版本準備的例子:完全重構 Flutter 處理鍵盤事件以允許同步響應,這使 Widget 能夠處理按鍵并取消其在 tree 的其余部分中傳播。

      最初是在 Flutter 2.5 和 Flutter 2.8 中添加了對問題的回歸和修復,這是重新設計處理特定于設備的鍵盤輸入的方式,重構 Flutter 處理文本編輯方式來達到補充的目的,所有這些都是鍵盤輸入密集型桌面應用程序所必需。

      此外我們會繼續擴展 Flutter 對視覺密度的支持并為對話框公開對齊方式,以實現更加桌面友好的 UI。

      最后 Flutter 團隊并不是唯一一個在 Flutter 桌面上工作的人,舉個例子,Canonical 的桌面團隊正在與 Invertase 合作,在 Linux 和 Windows 上實現最流行的 Flutter Firebase 插件。

      DartPad

      DartPad 的改進,其中最大的改進是對更多包的支持,事實上現在有 23 個包可供導入,除了幾個 Firebase 服務,該名單包含常用軟件如 bloc,characters,collection,google_fonts,和 flutter_riverpod ,DartPad 團隊會繼續添加新的軟件包,因此如果想查看當前支持哪些軟件包,請單擊右下角的信息圖標。

      Flutter 2.8 新特性續集【Flutter專題9】

      還有另一個新的 DartPad 功能也非常方便。以前 DartPad 總是運行最新的穩定版本,在此版本中可以使用狀態欄中的新頻道菜單,來選擇最新的 Beta 頻道版本以及之前的穩定版本(稱為“舊頻道”)。

      Removing the dev channel

      Flutter “channel” 控制著底層 Flutter 框架和引擎在你的開發機器上變化的速度,Stable 代表最少的問題,而 master 代表最多。

      由于資源限制,我們最近停止更新 dev channel。雖然為此我們確實收到了一些關于此的問題,但我們發現只有不到 3% 的 Flutter 開發人員使用該dev渠道。

      因此我們決定正式退役的進程dev渠道,因為很少有開發人員使用 dev 頻道,但 Flutter 工程師需要花費大量時間和精力來維護它。

      你可以使用該 flutter channel 命令決定想要哪個頻道,以下是 Flutter 團隊對每個頻道的看法:

      stable頻道代表我們擁有的最高質量的構建。它們每季度(大致)發布一次,并針對中間的關鍵問題進行熱修復,這就是“慢”通道:安全、成熟、長期服務。

      beta 頻道為那些習慣于更快節奏的人提供了一種快速移動的替代方案。目前每月發布。

      master 頻道是我們活躍的開發頻道,我們不提供對該頻道的支持,但我們針對它運行了一套全面的單元測試。

      當 dev 在未來幾個月停用該頻道時,請考慮 beta 或 master頻道,具體取決于對問題的容忍度以及對最新和最好的需求。

      Breaking Changes

      與往常一樣,我們都在努力減少每個版本中重大更改的數量,在此版本中,Flutter 2.8 除了已過期并根據我們的重大變更政策已被刪除的已棄用 API 之外,沒有重大變更:

      90292刪除autovalidate棄用

      90293刪除FloatingHeaderSnapConfiguration.vsync棄用

      90294刪除AndroidViewController.id棄用

      90295刪除BottomNavigationBarItem.title棄用

      90296刪除不推薦使用的文本輸入格式類

      Flutter 廣告的 GA

      首先也是最重要的是Google Mobile SDK for Flutter于 11 月正式發布。

      此版本支持 5 種廣告格式,集成了 AdMob 和 Ad Manager 支持,并包含一個新中介功能的測試版,可幫助您優化廣告效果。有關將 Google Ads 集成到 Flutter 應用程序以及其他monetization選項的更多信息,請查看 flutter.dev 上的新monetization頁面。

      生態系統

      Flutter 不僅僅是框架、引擎和工具——pub.dev 上有超過 20,000 個與 Flutter 兼容的包和插件,而且每天都在增加。Flutter 開發人員日常交互的大量內容是更大生態系統的一部分。

      這可能是今年的最后一個版本,但誰又知道呢,所以你想嘗試了嗎?

      可以在下面的鏈接獲取到更多flutter相關的資訊。

      文章設計到的鏈接

      官網鏈家:https://flutter.dev/

      版本列表:https://flutter.cn/docs/development/tools/sdk/releases

      Android Flutter iOS

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:微軟開始為Office 365企業用戶推送Office 2016更新(微軟 成立)
      下一篇:HDC.Cloud | 網絡故障數據的那些事~
      相關文章
      亚洲婷婷天堂在线综合| 国产成人毛片亚洲精品| 亚洲日韩精品无码专区网址| 亚洲精品无码成人片在线观看| 亚洲av无码专区在线观看亚| 亚洲乱色伦图片区小说| 国内精品久久久久影院亚洲 | 久久久久se色偷偷亚洲精品av| 久久亚洲熟女cc98cm| 久久久久久亚洲AV无码专区| 久久久久久亚洲精品成人| 亚洲综合无码一区二区三区| 亚洲高清无在码在线电影不卡| 在线电影你懂的亚洲| 亚洲欧洲综合在线| 亚洲人成电影青青在线播放| 亚洲午夜精品一区二区公牛电影院| 亚洲最新中文字幕| 亚洲娇小性色xxxx| 亚洲中文字幕无码久久| 亚洲αⅴ无码乱码在线观看性色| 久久亚洲中文字幕无码| 亚洲成人一区二区| 久久久久亚洲AV综合波多野结衣| 狠狠亚洲狠狠欧洲2019| 亚洲热线99精品视频| 亚洲av日韩综合一区在线观看| 亚洲一区二区在线免费观看| 亚洲婷婷天堂在线综合| 亚洲一区二区三区成人网站 | 激情无码亚洲一区二区三区| jizzjizz亚洲日本少妇| 亚洲人成人无码网www国产| 国产综合亚洲专区在线| 久久久久亚洲精品无码系列| 亚洲成在人线电影天堂色| 亚洲最大中文字幕无码网站| 国产精品久久亚洲一区二区| 国产AⅤ无码专区亚洲AV| 亚洲AV无码乱码国产麻豆| 亚洲手机中文字幕|