老孟導讀:昨天期待已久的 Flutter 2.0 終於發佈了, Flutter Web和Null安全性趨於穩定,Flutter桌面安全性逐漸轉向Beta版!html
原文連接:https://medium.com/flutter/whats-new-in-flutter-2-0-fe8e95ecc65android
今天,咱們很高興地宣佈Flutter 2的發佈。距離Flutter 1.0的發佈已經兩年多了,可是在很短的時間內,咱們已經關閉了24,541期,併合並了765個貢獻者的17,039個PR。自9月Flutter 1.22發佈以來,咱們已經關閉了5807期併合並了298位貢獻者的4091個PR。特別感謝咱們的志願者捐助者,他們慷慨地抽出時間來改進Flutter項目。Flutter 2 release 版本前幾名志願者貢獻者是xubaolin46個PR,a14n32個PR,專一於使Flutter達到零安全,hamdikahloun具備20個PR,改善了Flutter插件的數量。可是,不只僅是編碼員爲Flutter項目作出了貢獻。一大批志願者PR評審人員還負責評審1525個PR,包括hamdikahloun(再次!),CareF和YazeedAlKhalaf(16個!)。Flutter確實是社區的一項工做,若是沒有問題提出者,PR貢獻者和代碼審查者,咱們就不可能進入第2版。此版本適用於全部人。ios
Flutter 2發行版中發生了不少使人興奮的事情。有關Flutter 2和Dart 2.12的新功能以及咱們的客戶和合做夥伴如何使用Flutter 2的概述,請參閱宣佈Flutter 2。有關Dart 2.12的詳細信息,請參閱宣佈Dart 2.12。有關建議在生產中使用的Flutter網站的最佳利用方法,請參閱Flutter網站支持達到穩定的里程碑。git
並且,要了解Flutter 2自己的新功能,請繼續閱讀!github
截止到今天,Flutter的Web支持已經從Beta過渡到穩定渠道。在此初始穩定版本中,Flutter在Web平臺的支持下將代碼的可重用性提升到另外一個層次。所以,如今當您穩定地建立Flutter應用程序時,Web只是該應用程序的另外一個設備目標。web
經過利用Web平臺的衆多優點,Flutter爲構建豐富的交互式Web應用程序奠基了基礎。咱們主要專一於性能和渲染保真度的改進。除了咱們的HTML渲染器以外,咱們還添加了一個新的基於CanvasKit的渲染器。咱們還添加了特定於Web的功能,例如Link小部件,以確保在瀏覽器中運行的應用感受像Web應用。macos
在Flutter的Web支持博客文章中找到有關此穩定版本的更多詳細信息。編程
空安全性是Dart語言的重要補充,它經過區分可空類型和非可空類型進一步加強了類型系統。這使開發人員可以防止null錯誤崩潰,這是應用程序崩潰的常見緣由。經過將空檢查合併到類型系統中,能夠在開發過程當中捕獲這些錯誤,從而防止生產崩潰。從Flutter 2開始,包含Dart 2.12的穩定版徹底支持Null Safety。有關更多詳細信息,請參見Dart 2.12博客文章。api
pub.dev軟件包存儲庫已經發布了1,000多個空安全軟件包,其中包括Dart,Flutter,Firebase和Material團隊的數百個軟件包。若是您是軟件包做者,請查看遷移指南並考慮當即進行遷移。android-studio
在此版本中,咱們很高興地宣佈,Flutter的桌面支持已在穩定頻道中以早期版本的標誌提供。這意味着咱們已經準備好讓您嘗試一下它做爲Flutter應用程序的部署目標:您能夠將其視爲「 beta快照」,以預覽將於今年晚些時候發佈的最終穩定版本。
爲了使Flutter桌面達到這樣的質量,從大小上進行了改進,從確保文本編輯像在每一個受支持的平臺上的本機體驗同樣開始,包括諸如文本選擇樞軸點的基本功能以及可以進行文本編輯的能力。在處理完鍵盤事件後中止傳播。在鼠標輸入端,如今能夠當即開始使用高精度定點設備進行拖動,而沒必要等待處理觸摸輸入時所需的延遲。此外,內置的上下文菜單已添加到Material和Cupertino設計語言的TextField和TextFormField小部件中。最後,添加了抓手 到ReorderableListView小部件。
做爲開發人員,ReorderableListView老是很擅長移動項目,可是它要求用戶長按才能啓動拖動。這在移動設備上頗有意義,可是不多有臺式機用戶會想到用鼠標長按某個項目來移動它,所以此版本包括適用於鼠標或觸摸輸入的抓握手柄。平臺慣用功能的另外一項改進是更新的滾動條,該滾動條能夠正確顯示桌面形狀因素。
此版本包括一個更新的Scrollbar小部件,該小部件在桌面環境中很是有效
滾動條小部件已更新,以提供桌面上預期的交互功能,包括拖動拇指,單擊軌道以上下滾動頁面以及在鼠標懸停在鼠標的任何部分上時顯示軌道的功能。滾動條。此外,因爲Scrollbar是使用新ScrollbarTheme類的主題,所以您能夠設置其樣式以使其與應用程序的外觀和風格相匹配。
對於其餘特定於桌面的功能,此版本還啓用了Flutter應用程序的命令行參數處理功能,以即可以使用諸如Windows File Explorer中的數據文件雙擊之類的簡單操做來打開應用程序中的文件。咱們還努力使Windows和macOS的調整大小更加流暢,併爲國際用戶啓用IME(輸入法編輯器)。
Flutter桌面如今支持直觀的IME輸入
此外,咱們還提供了更新的文檔,介紹了開始準備將桌面應用程序部署到特定於操做系統的商店時須要執行的操做。試試看,若是咱們錯過了任何事情,請提供反饋。
在嘗試使用Flutter桌面Beta時,您能夠經過按預期方式切換到Beta通道並根據flutter.dev上的指導爲目標平臺設置配置標誌來訪問它。此外,咱們還製做了穩定通道上可用的beta比特的快照。若是您使用「 flutter config」啓用某個桌面配置設置(例如enable-macos-desktop
),則能夠嘗試桌面支持的beta功能,而沒必要經歷漫長的過程才能轉移到beta頻道,刪除Flutter SDK的全部最新Beta版,構建工具等。這很是適合嘗試一下或將桌面支持用做簡單的「 Flutter Emulator」。
可是,若是您選擇停留在穩定的頻道上以訪問桌面Beta,則不會像切換到Beta或dev頻道那樣快地得到新功能或錯誤修復。所以,若是您正在積極地針對Windows,macOS或Linux,咱們建議您切換到可更快提供更新的渠道。
當咱們接近Flutter桌面的第一個完整的生產質量版本時,咱們知道咱們還有更多工做要作,包括對與本機頂級菜單集成的支持,更像各個平臺的體驗的文本編輯以及可訪問性支持,以及常規的錯誤修復和性能加強。若是您認爲在臺式機達到生產質量以前還須要作其餘事情,請確保提供您的反饋。
如今,Flutter 支持生產應用三個平臺(Android,iOS設備和Web)和三個測試版(在Windows,MacOS和Linux)的,一個天然的問題是:如何編寫一個應用程序,適應自己以及多個不一樣尺寸(小,中和大屏幕),不一樣的輸入模式(觸摸,鍵盤和鼠標)和不一樣的習慣用法(移動,網絡和臺式機)?爲了爲咱們本身以及世界各地的Flutter開發人員回答此問題,咱們委託了Flutter Folio剪貼簿應用程序。
Folio只是一個簡單的示例,您但願它能夠從一個代碼庫在多個平臺上很好地運行。所謂「好」,是指它在小屏幕,中屏幕和大屏幕上看起來都不錯,它利用了觸摸,鍵盤和鼠標輸入的優點,而且對於平臺的慣用語言也很好用(例如,經過使用網絡上的連接和桌面上的菜單)。咱們將這種應用稱爲「平臺自適應」,由於它能夠很好地適應所運行的任何平臺。
若是您想了解如何使本身的應用程序平臺具備適應性,能夠查看Folio的源代碼。未來,指望找到可以更深刻地探討該主題的文檔和代碼實驗室。同時,請查看AloïsDeniel關於該主題的出色博客文章和視頻。
除了Flutter桌面版移至測試版,今天咱們很高興地宣佈Flutter的Google移動廣告SDK的公開測試版。這是一個全新的插件,除了現有的重疊式廣告格式(重疊式橫幅廣告,非頁內廣告和獎勵視頻廣告)外,還提供內嵌橫幅廣告和原生廣告。該插件統一了對Ad Manager和Admob的支持,所以,不管您是什麼規模的發佈商,均可以根據本身的狀況量身定製該插件。
咱們一直在與一些早期客戶一塊兒在私人Beta版程序中試用此插件,其中許多人已成功使用這些新格式啓動了他們的應用程序。例如,Sua Musica(最大的拉丁美洲音樂平臺,面向擁有1.5萬名通過驗證的歌手和1000萬MAU的獨立歌手),使用適用於Flutter的Google移動廣告SDK推出了其新的Flutter應用。他們發現印象數增長了350%,點擊率增長了43%,eCPM增長了13%。
該插件今天可供您使用。做爲Flutter Engage的一部分,Andrew Brogdon和Zoey Fan作了一個關於「使用Flutter進行應用獲利」的會議(可在Flutter Engage網站上找到),他們在其中討論了使用Flutter構建的應用的獲利策略,以及如何在本身的廣告中加載廣告Flutter應用。此外,咱們在flutter.dev上建立了一個新的Ads頁面,您能夠在其中找到全部有用的資源,例如插件實施指南,內嵌橫幅和原生廣告代碼實驗室,以及重疊橫幅,非頁內廣告和獎勵視頻廣告代碼實驗室。請確保將其簽出!
僅僅由於咱們正在繼續提升對其餘平臺的支持質量,因此不要覺得咱們忘記了iOS。實際上,此版本帶來了與iOS相關的178個PR合併,包括23495(將狀態恢復帶到iOS),67781(它知足了長期存在的直接從命令行構建IPA而無需打開Xcode的要求)的要求,以及69809,更新了CocoaPods版本以匹配最新工具。此外,Cupertino設計語言實現中還添加了一些iOS小部件。
新的CupertinoSearchTextField提供了iOS搜索欄UI。
該CupertinoFormSection,CupertinoFormRow和CupertinoTextFormFieldRow部件更容易產生與iOS的分段式視覺美學驗證表單字段。
除了適用於iOS的功能外,在着色器和動畫方面,咱們還將繼續整體上研究iOS和Flutter的性能改進。iOS仍然是Flutter的主要平臺,咱們將繼續努力帶來重要的新功能和性能改進。
此版本的Flutter附帶了兩個附加的新小部件,即AutocompleteCore和ScaffoldMessenger。AutocompleteCore表示將自動完成功能歸入Flutter應用程序所需的最小功能。
自動完成是Flutter常常須要的功能,所以此版本開始提供此功能。您今天就可使用它,可是若是您對完整功能的設計感到好奇,請查看自動完成設計文檔。
一樣,建立ScaffoldMessenger來處理許多與SnackBar相關的問題,包括可以輕鬆建立SnackBar以響應AppBar動做,建立SnackBars以在Scaffold過渡之間持久存在的功能,以及可以在SnackBars完成時顯示SnackBars的能力。即便用戶已導航到具備其餘Scaffold的頁面,也將執行異步操做。
全部這些優勢能夠從如今開始使用幾行代碼來顯示SnackBars:
final messenger = ScaffoldMessenger.of(context); messenger.showSnackBar(SnackBar(content: Text(‘I can fly.’)));
正如您可能想象的那樣,還有更多的東西。有關詳細信息,請在ScaffoldMessenger上觀看Kate Lovett的精彩視頻。
從與許多Flutter開發人員的交談中咱們瞭解到,您中的許多人沒有啓動全新應用程序的奢侈心意,但您能夠經過將Flutter添加到現有的iOS和Android應用程序中來利用Flutter。此功能稱爲Add-to-App,是在兩個移動平臺上重用Flutter代碼同時仍保留現有本機代碼庫的絕佳方法。可是,對於您中的那些人,咱們有時會聽到,不清楚如何將第一個屏幕集成到Flutter中。將Flutter和本機屏幕交織在一塊兒使導航狀態難以維護,而且在視圖級別集成多個Flutter會佔用大量內存。
過去,其餘Flutter實例的存儲成本與第一個實例相同。在Flutter 2中,咱們將建立額外的Flutter引擎的靜態內存成本下降了約99%,每一個實例約爲180kB。
支持此功能的新API能夠在beta通道上預覽,並在flutter.dev上進行了記錄,以及一系列演示此新模式的示例項目。經過此更改,咱們再也不猶豫建議在本機應用程序中建立Flutter引擎的多個實例。
每當任何框架成熟並使用愈來愈多的代碼庫彙集用戶時,隨着時間的推移,趨勢就是避免對框架API進行任何更改,以免破壞愈來愈多的代碼行。Flutter 2擁有超過500,000個Flutter開發人員,涉及的平臺數量愈來愈多,所以它很快就屬於這一類。可是,爲了使咱們可以隨着時間的推移不斷改進Flutter,咱們但願可以對API進行重大更改。問題是,如何在不中斷開發人員的狀況下繼續改進Flutter API?
咱們的答案是Flutter Fix。
Flutter Fix是事物的組合。首先,dart
CLI工具備一個新的命令行選項,名爲dart fix
,它知道在哪裏能夠查找已棄用的API列表以及如何使用這些API更新代碼。其次,它是可用修補程序自己的列表,與版本2捆綁在一塊兒。最後,它是針對VS Code,IntelliJ和Android Studio IDE的更新的Flutter擴展集,它們知道如何公開相同的內容。可用的修復程序列表,如帶小燈泡的快速修復程序,可幫助您單擊鼠標來更改代碼。
舉例來講,假設您的應用中包含如下代碼行:
使用不推薦使用的參數建立Flutter小部件
因爲不同意使用此構造函數的參數,所以應將其替換爲如下內容:
建立一個Flutter小部件,其中不推薦使用的參數已替換
即便您熟悉全部Flutter的棄用,您在代碼中必須進行的更改數量也就越大,應用全部修補程序的難度就越大,而且更容易出錯。人類在這類重複性任務上並不擅長。可是計算機是;經過執行如下命令,您能夠看到咱們知道如何在整個項目中進行的全部修復:
$ dart fix --dry-run
若是您想批量應用它們,能夠輕鬆地這樣作:
$ dart fix --apply
或者,若是您想在本身喜歡的IDE中以交互方式應用這些修補程序,也能夠這樣作。
多年來,咱們一直在將舊的API標記爲已棄用,可是如今有了關於什麼時候刪除實際已棄用的API的政策,Flutter 2是咱們第一次這樣作。即便咱們還沒有捕獲全部已棄用的API做爲數據來提供Flutter Fix,咱們仍將繼續從先前已棄用的API中添加更多信息,並將在將來的重大更改中繼續這樣作。咱們的目標是盡最大努力使Flutter的API達到最佳狀態,同時還要使您的代碼保持最新。
爲了清楚說明DevTools是用於調試Flutter應用程序的工具,咱們在調試Flutter應用程序時將其重命名爲Flutter DevTools。此外,咱們還作了不少工做,以使其達到Flutter 2的生產質量。
一項即便在您啓動DevTools以前也能夠幫助您解決問題的新功能是,Android Studio,IntelliJ或Visual Studio Code可以在出現常見異常時發出通知,並提供將其引入DevTools中以幫助您調試的功能它。例如,如下內容顯示您的應用程序中已引起溢出異常,該異常會在Visual Studio Code中彈出一個選項,用於調試DevTools中的問題。
Flutter IDE擴展會在您的應用引起佈局溢出異常時發出通知
按下該按鈕可將您帶到出現問題的小部件上的DevTools中的Flutter Inspector,所以您能夠對其進行修復。今天,咱們僅針對佈局溢出異常執行此操做,但咱們的計劃是針對全部常見異常提供這種處理,DevTools能夠解決這些異常。
一旦運行了DevTools,選項卡上的新錯誤標記將幫助您跟蹤應用程序中的特定問題。
DevTools中的紅點可幫助您專一於出現錯誤的應用程序部分
DevTools的另外一個新功能是可以輕鬆查看分辨率比顯示的圖像高的圖像,這有助於跟蹤過多的應用程序大小和內存使用狀況。要啓用此功能,請在Flutter Inspector中啓用「反轉超大圖像」。
啓用「反轉超大圖像」選項,以突出顯示比須要放大的圖像大的圖像。
如今,當您顯示分辨率明顯大於其顯示尺寸的圖像時,該圖像將上下顛倒顯示,以便在您的應用中輕鬆查找。
實際應用中的「反轉超大圖像」選項
此外,根據大衆的需求,除了在Flutter Inspector的「佈局資源管理器」中顯示有關靈活佈局的詳細信息外,咱們還添加了顯示固定佈局的功能,使您可以調試各類佈局。
新的版式資源管理器顯示了固定版式和彈性版式的版式詳細信息
這還不是所有。這只是Flutter DevTools 2中更多新功能的摘要:
而這還並不是所有。對於全套更改,我建議如下公告:
用於IntelliJ系列IDE的Flutter插件也爲Flutter 2得到了許多新功能。首先,有一個新的項目嚮導,它與IntelliJ中的新嚮導樣式匹配。
另外,若是您正在Linux上使用IntelliJ或Android Studio對從Snap Store安裝的Flutter SDK進行編程,則Flutter快照路徑已添加到已知SDK路徑列表中。這使Flutter快照的用戶能夠更輕鬆地在「設置」中配置Flutter SDK。感謝MarcusTomlinson @的貢獻!
經過Snap安裝的Flutter SDK,能夠更輕鬆地使用Linux上的Android Studio。
您能夠在公告中閱讀更多有關最新更新的內容:
Visual Studio Code的Flutter擴展也對Flutter 2進行了改進,從許多測試加強功能開始,包括從新運行僅失敗的測試的功能。
通過兩年的開發,對Dart的LSP(語言服務器協議)支持現已做爲默認方式提供給Dart分析器,以將其集成到Flutter擴展的Visual Studio Code中。LSP支持對Flutter開發進行了許多改進,包括可以在當前Dart文件中應用某種類型的全部修復程序,並使代碼完成生成完整的函數調用(包括括號和必需的參數)的功能。
LSP的支持不只限於Dart。它還支持pubspec.yaml
和analysis_options.yaml
文件中的代碼完成。
這些只是Flutter的Visual Studio Code擴展最近得到的一些更新。您能夠在如下公告中閱讀完整列表:
若是不說起DartPad,則該工具更新列表將不完整,而DartPad已更新爲支持Flutter 2。
DartPad已針對Flutter 2更新
如今,您能夠嘗試使用Flutter的新的空安全版本,而無需離開本身喜歡的瀏覽器。
Flutter的開發經驗不只包含框架和工具,還包括其餘內容。它還包括適用於Flutter應用程序的各類軟件包和插件。自上一次Flutter穩定版本發佈以來,該領域也發生了不少事情。例如,在攝像機和video_player插件之間,已合併了將近30個PR,以大大提升二者的質量。若是您之前在使用這兩種方法時遇到麻煩,則應該再看一遍;咱們認爲您會發現它們更增強大。
另外,若是你是一個火力地堡的用戶,咱們很高興地宣佈,最流行的插件已被帶到生產質量,包括空安全的支持,以及全套的參考文檔和常見的使用教程使用Android,iOS,網頁,和macOS。這些插件包括:
另外,若是您正在尋找應用程序的崩潰報告,則可能須要考慮Sentry,該公司已經發佈了適用於Flutter應用程序的新SDK。
Sentry崩潰報告工具如今支持Flutter
藉助Sentry的Flutter SDK,您能夠實時收到在Android,iOS或本機平臺上發生的錯誤的通知。您能夠在Sentry文檔中查看詳細信息。
此外,若是您尚未看到Flutter Community的「 plus」插件,則須要將其簽出。他們分叉了Flutter團隊最初開發的許多受歡迎的插件,並添加了null安全支持,對其餘平臺的支持和一整套全新的文檔,以及開始修復flutter / plugins存儲庫中的適當問題。該插件包括如下內容:
此時,與Flutter兼容的軟件包和插件集的數量超過15,000,這使得很難找到您應該首先考慮的軟件包和插件。所以,咱們會發布發佈點數(靜態分析得分),受歡迎程度,喜歡度,而且,對於特別高的質量,會發布那些特別標記爲Flutter Favorite的包裝。爲了及時應對Flutter 2,咱們在收藏夾列表中添加了幾個新軟件包:
恭喜這些軟件包的做者!若是您還沒有簽出它們,或者還沒有列出列表中的其他軟件包,則應該這樣作。
最後但並不是最不重要的一點是,對於對軟件包的最新版本是否適用於Flutter的最新版本感興趣的軟件包做者或軟件包用戶,您將須要訪問Codemagic的新pub.green網站。
Codemagic的新pub.green網站顯示了最新Flutter版本與頂級軟件包的兼容性
pub.green網站測試了pub.dev上可用的Flutter和Dart軟件包與不一樣Flutter版本的兼容性。將其視爲Flutter的「我可使用」。有關更多詳細信息,我建議CodeMagic團隊發佈公告博客。
咱們對Flutter 2進行了如下重大更改,其中許多可使用dart fix
命令或所選IDE中的快速修復程序自動緩解:
最後,咱們在Google Flutter團隊的全部成員中,咱們要說-謝謝。感謝×150,000,在過去兩年中,社區中推出了超過150,000個Flutter應用程序。萬一您錯過了它,咱們會在Flutter Engage主題演講的開幕式中播放針對社區的Mashup Video,其中聚集了一些咱們最喜歡的Flutter應用程序。
沒有您對咱們全部人正在創造的東西的持續支持和激動,就不可能成爲世界上最具活力的全球開發者社區之一。咱們火燒眉毛想看看您接下來將要作什麼。
老孟Flutter博客(330個控件用法+實戰入門系列文章):http://laomengit.com
添加微信或者公衆號領取 《330個控件大全》和 《Flutter 實戰》PDF。
歡迎加入Flutter交流羣(微信:laomengit)、關注公衆號【老孟Flutter】: