<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Flutter 2.2 更新詳解

      Flutter 2.2 版已正式發(fā)布!要獲取新版本,您只需切換到 stable 渠道并更新目前安裝的 Flutter,或前往 flutter.cn/docs/get-started 從頭開始安裝。

      雖然與 2.0 版只相隔數(shù)月,2.2 版還是滿載大量改進。此版本共計納入了框架、引擎和插件庫等方面的 2,456 個 PR 并解決了 3,105 個問題。我們要特此鳴謝為此版本貢獻了大量 PR 和 PR review 的整個 Flutter 社區(qū),包括 PR 貢獻最多 (17) 的 Abhishek01039 和 PR review 貢獻最多 (9) 的 xu-baolin。衷心感謝所有開發(fā)者對 Flutter 2.2 順利發(fā)布穩(wěn)定版做出的貢獻。沒有大家的支持,我們將無法做到。

      每個新的 Flutter 穩(wěn)定版都會帶來諸如性能提升、新功能、bug 修復等一系列變化,并會提供一些尚未試用于生產(chǎn)環(huán)境的試驗性功能,希望您能幫助我們驗證這些功能能否正常工作并滿足您的需求。此外,新版本還會包含一系列相關(guān)工具的更新和來自 Flutter 社區(qū)的更新。坦白講,如今 Flutter 每個新版本的內(nèi)容都非常豐富,不可能在一篇文章中巨細無遺地詳述,因此下面我們將著重為您介紹一些主要亮點。

      Flutter 2.2 穩(wěn)定版更新

      此版本在 Flutter 2 的基礎(chǔ)上做了諸多改進,其中不但有面向 Android、iOS 和 web 平臺的更新,還有新的 Material 圖標、文本處理方式的改進、滾動條行為的變化、TextSpan widget 的鼠標光標支持,以及用一份代碼適配多個平臺方面的新指南。這些功能皆已發(fā)布穩(wěn)定版,可供您在正式版應(yīng)用中使用。同時,所有這些功能都是在 新版 Dart 的基礎(chǔ)上構(gòu)建而成。

      Dart 2.13

      隨 Flutter 2.2 版一起發(fā)布的還有 Dart 2.13 版。此 Dart 版本包含眾多新功能,其中之一是新的類型別名,該功能讓您可為類型創(chuàng)建別名,就像為函數(shù)創(chuàng)建別名一樣:

      // Type alias for functions (existing)
      typedef ValueChanged<T> = void Function(T value);
      
      // Type alias for classes (new!)
      typedef StringList = List<String>;
      
      // Rename classes in a non-breaking way (new!)
      @Deprecated("Use NewClassName instead")
      typedef OldClassName<T> = NewClassName<T>;
      

      有了類型別名,您可為長而復雜的類型賦予簡短易懂的名稱,并以不會破壞代碼的方式重命名您的類。Dart 2.13 版還包含其他多項更新,您可以在我們之前的推文 Dart 2.13 版本發(fā)布 中了解詳情。

      Flutter web 更新

      作為 Flutter 穩(wěn)定版最新支持的平臺,web 平臺在此版本也有多項改進。

      首先,我們借助新的 service worker 加載機制優(yōu)化了緩存行為,并修復了 main.dart.js 的重復下載問題。在舊版 Flutter web 中,service worker 會在后臺下載應(yīng)用更新,用戶在此期間可照常使用應(yīng)用的舊版本。更新下載完畢后,用戶要多次刷新瀏覽器頁面后才會看到相應(yīng)更新。在 Flutter 2.2 版中,當新的 service worker 檢測到更新后,用戶需要先等待更新下載完畢才能使用應(yīng)用,但屆時他們無需再次手動刷新頁面即可看到更新內(nèi)容。

      要啟用此項變更,您需要重新生成您的 Flutter 應(yīng)用的 index.html。具體來說,請保存您的修改、刪除 index.html 文件,然后在項目目錄中運行 flutter create . 以重新生成該文件。

      我們還對兩個 web 渲染器都做了改進。在 HTML 渲染器上,我們添加了對 字體特性 的支持,以啟用 FontFeature 設(shè)置并使用 canvas API 渲染文本,從而使鼠標懸停處的文本能夠顯示在適當?shù)奈恢谩T?HTML 和 CanvasKit 渲染器上,我們新增了對著色器遮罩 (shader masks) 和 computeLineMetrics 的支持,以解決 Flutter web 應(yīng)用和移動應(yīng)用兩者不一致的問題。例如,開發(fā)者現(xiàn)在可以通過 不透明度遮罩 使用著色器遮罩實現(xiàn)淡出轉(zhuǎn)場,并像在移動應(yīng)用中一樣使用 computeLineMetrics

      無障礙功能不但是 Flutter web 的一大重點,也是整個 Flutter 的一個重心所在。按照設(shè)計,是通過構(gòu)建 SemanticsNode 樹來實現(xiàn)無障礙功能。Flutter web 應(yīng)用的用戶啟用無障礙功能后,我們會生成一個與 RenderObject DOM 樹并行的 DOM 樹,并將語義屬性轉(zhuǎn)換為 Aira。在此版本中,我們改進了語義節(jié)點位置,消除了移動應(yīng)用和 web 應(yīng)用在使用轉(zhuǎn)換 (transform) 時的不一致,這意味著在使用轉(zhuǎn)換對 widget 進行樣式設(shè)置時,焦點框會正確地顯示在元素上方。如需直觀了解其實際效果,您可以觀看 Material Design 無障礙項目負責人 Victor Tsaran 的視頻,了解他如何對 Flutter Gallery App 使用 VoiceOver。

      我們現(xiàn)在還提供一個適用于性能分析 (profile) 和發(fā)布 (release) 模式的命令行 flag,以供開發(fā)者訪問語義節(jié)點調(diào)試樹,并直觀查看系統(tǒng)為其 web 應(yīng)用創(chuàng)建的語義節(jié)點,從而對應(yīng)用的無障礙功能進行調(diào)試。

      要為您的 Flutter web 應(yīng)用啟用此功能,請運行以下命令:

      $ flutter run -d chrome --profile \
        --dart-define=FLUTTER_WEB_DEBUG_SHOW_SEMANTICS=true
      

      激活該 flag 后,您將能夠在各個 widget 上方看到您的語義節(jié)點,從而進行調(diào)試并檢查語義元素的位置是否符合預(yù)期。如果您發(fā)現(xiàn)這類問題,歡迎向我們 提交 bug 報告。

      雖然在核心無障礙功能的支持方面已經(jīng)取得了長足進步,但我們?nèi)栽谶@個領(lǐng)域不斷改進。在 2.2 穩(wěn)定版 之后的 master 和 dev 渠道 build 中,我們新增了一個 API,供開發(fā)者以編程方式為其應(yīng)用 自動啟用無障礙功能,同時我們正在著手解決 在屏幕閱讀器中使用 Tab 鍵 的問題。

      最后但也同樣重要的是,最新版的 Flutter DevTools 現(xiàn)在還支持為您的 Flutter web 應(yīng)用使用布局瀏覽器。

      您現(xiàn)在可以在 web 應(yīng)用中使用您所熟悉的布局調(diào)試工具,這與移動應(yīng)用和桌面應(yīng)用別無二致。

      iOS 頁面轉(zhuǎn)場和增量式安裝

      對于 iOS 平臺,此版本將動畫幀的渲染時間縮減了 75%,使 Cupertino 主題中頁面轉(zhuǎn)場更流暢。在低端手機上的縮減比例甚至可能更高。我們不僅改善了最終用戶可感知到的性能,還一直在想方設(shè)法提升開發(fā)性能。

      在此版本中,我們實現(xiàn)了開發(fā)過程中的 增量式 iOS 安裝?;鶞蕼y試結(jié)果顯示,iOS 應(yīng)用的更新版本安裝時間縮短了 40%,這也就縮短了您的應(yīng)用變更測試周期。

      使用 Flutter 構(gòu)建平臺自適應(yīng)應(yīng)用

      隨著 Flutter 穩(wěn)定版逐步支持更多平臺,您在設(shè)計應(yīng)用時不僅需要考慮兼容不同的設(shè)備類型 (如手機、平板電腦和桌面電腦),還需要考慮支持不同的輸入方式 (觸摸與鍵鼠),以及適配各個平臺上的不同使用習慣 (例如在導航時是使用抽屜式導航欄還是系統(tǒng)菜單)。如果應(yīng)用能夠根據(jù)不同目標平臺的細節(jié)差異做出相應(yīng)調(diào)整,我們就稱之為平臺自適應(yīng)應(yīng)用。

      如果您想初步了解在構(gòu)建平臺自適應(yīng)應(yīng)用時要考慮哪些因素,請觀看 Kevin Moore 關(guān)于 "構(gòu)建平臺自適應(yīng)應(yīng)用" 的視頻。如需詳細了解,您可以閱讀 Flutter 文檔中關(guān)于平臺自適應(yīng)應(yīng)用的指南。

      最后,如需參考遵循這些指南編寫出的多平臺應(yīng)用示例。我們建議您看看 gSkinner 打造的 FlokkFlutter Folio 應(yīng)用。您既可以下載 FlokkFolio 的源代碼,也可以從各個應(yīng)用商店下載 FlokkFolio 應(yīng)用,還可以直接在瀏覽器中運行它們。另一個優(yōu)秀示例是 用于創(chuàng)建指南本身的應(yīng)用

      Flutter 平臺自適應(yīng)應(yīng)用指南的 UX 部分以新的 Material 大屏幕指南 為基礎(chǔ)。Material 團隊在新發(fā)布的這一指南中,根據(jù)大屏幕的特性,修訂了多篇主要的布局文章,調(diào)整了多個組件,并更新了 Design Kit。

      Flutter 的目標始終是讓應(yīng)用可以走得更高更遠,而不僅是能夠在多個平臺上正常運行。不做到讓您的應(yīng)用能夠良好適配所有目標平臺,我們不會停下腳步。Flutter 能夠為您提供所需支持,讓您的應(yīng)用不但能夠覆蓋多個目標平臺,而且能夠針對不同的屏幕尺寸、輸入方式以及各平臺的不同使用習慣而做出適當?shù)恼{(diào)整。

      更多 Material 圖標

      說起 Material 指南,此版本還納入了兩個獨立的 PR,向 Flutter 中添加了更多 Material 圖標。我們可愛的吉祥物 Dash 現(xiàn)在也有專屬的圖標了!


      加上這些新圖標,可供您的應(yīng)用使用的 Material 圖標總數(shù)現(xiàn)已突破 7,000 大關(guān)。如果您在這海量圖標中尋找所需圖標時遇到了困難,可以訪問 fonts.google.com/icons,按類別和名稱來搜索圖標。

      找到理想的圖標后,您可以在新的 "Flutter" 標簽頁中查看有關(guān)如何使用該圖標的說明。您也可以單獨下載這個圖標,將其用作應(yīng)用中的獨立資源。在您的 Flutter 應(yīng)用中加入 Dash 的可愛形象從未如此簡單。

      通過名稱搜索 Material 圖標

      通過名稱搜索 Material 圖標

      改進文本處理方式

      隨著我們持續(xù)改進 Flutter 以使其能夠更好地適配各個平臺的具體特性,我們正逐步涉足一些在移動設(shè)備上不突出但在桌面設(shè)備上很重要的新領(lǐng)域,其中之一就是文本處理。在此版本中,我們著手對文本輸入的處理方式進行重構(gòu),以實現(xiàn)下述功能: 在按鍵事件于 widget 層次結(jié)構(gòu)內(nèi)傳播的過程中將其取消,以及能夠完全自定義與文本操作相關(guān)聯(lián)的按鍵。

      由于現(xiàn)在能夠取消按鍵事件,F(xiàn)lutter 按下空格鍵和箭頭鍵時不會再觸發(fā)滾動事件,從而讓用戶獲享更直觀的體驗。您還可以使用此功能來實現(xiàn)在一個按鍵事件傳播到您應(yīng)用中的父級 widget 之前對其進行處理。另一個例子是,您可以在您的 Flutter 應(yīng)用中實現(xiàn)用 Tab 鍵在 TextField 和按鈕之間跳轉(zhuǎn),一切都可按預(yù)期正常運作:

      import 'package:flutter/material.dart';
      
      void main() => runApp(App());
      
      class App extends StatelessWidget {
       @override
       Widget build(BuildContext context) => MaterialApp(
             title: 'Flutter Text Editing Fun',
             home: HomePage(),
           );
      }
      
      class HomePage extends StatelessWidget {
       @override
       Widget build(BuildContext context) => Scaffold(
             body: Column(
               children: [
                 TextField(),
                 OutlinedButton(onPressed: () {}, child: const Text('Press Me')),
               ],
             ),
           );
      }
      

      Flutter 2.2 可在按鍵事件于 widget 層次結(jié)構(gòu)內(nèi)向上傳播的過程中將其取消;例如,您可以將 TAB 鍵用于將焦點從 TextField 切換到其他元素

      Flutter 2.2 可在按鍵事件于 widget 層次結(jié)構(gòu)內(nèi)向上傳播的過程中將其取消;例如,您可以將 TAB 鍵用于將焦點從 TextField 切換到其他元素

      自定義文本操作讓您可以實現(xiàn)對 TextField 中的 Enter 按鍵事件進行特殊處理,例如,使 Enter 鍵在聊天客戶端中觸發(fā)消息發(fā)送操作,同時讓用戶可以按 Ctrl+Enter 鍵來換行。此類文本操作 讓 Flutter 本身也能夠提供不同的按鍵設(shè)置,從而使文本編輯行為與主機操作系統(tǒng)相一致,例如在 Windows 和 Linux 上使用 Ctrl+C 復制文本,而在 macOS 上使用 Cmd+C。

      下面就是一個這樣的例子,它覆蓋了默認的向左箭頭按鍵操作,并為退格鍵和刪除鍵設(shè)置了新的操作:

      import 'package:flutter/material.dart';
      import 'package:flutter/services.dart';
      
      void main() => runApp(MyApp());
      
      class MyApp extends StatelessWidget {
       @override
       Widget build(BuildContext context) => MaterialApp(
             title: 'Flutter TextField Key Binding Demo',
             home: Scaffold(body: UnforgivingTextField()),
           );
      }
      
      /// A text field that clears itself if the user tries to back up or correct
      /// something.
      class UnforgivingTextField extends StatefulWidget {
       @override
       State<UnforgivingTextField> createState() => _UnforgivingTextFieldState();
      }
      
      class _UnforgivingTextFieldState extends State<UnforgivingTextField> {
       // The text editing controller used to clear the text field.
       late TextEditingController controller;
      
       @override
       void initState() {
         super.initState();
         controller = TextEditingController();
       }
      
       @override
       Widget build(BuildContext context) => Shortcuts(
             shortcuts: <LogicalKeySet, Intent>{
               // This overrides the left arrow key binding that the text field normally
               // has in order to move the cursor back by a character. The default is
               // created by the MaterialApp, which has a DefaultTextEditingShortcuts
               // widget in it.
               LogicalKeySet(LogicalKeyboardKey.arrowLeft): const ClearIntent(),
      
               // This binds the delete and backspace keys to also clear the text field.
               // You can bind any key, not just those already bound in
               // DefaultTextEditingShortcuts.
               LogicalKeySet(LogicalKeyboardKey.delete): const ClearIntent(),
               LogicalKeySet(LogicalKeyboardKey.backspace): const ClearIntent(),
             },
             child: Actions(
               actions: <Type, Action<Intent>>{
                 // This binds the intent that indicates clearing a text field to the
                 // action that does the clearing.
                 ClearIntent: ClearAction(controller: controller),
               },
               child: Center(child: TextField(controller: controller)),
             ),
           );
      }
      
      /// An intent that is bound to ClearAction.
      class ClearIntent extends Intent {
       const ClearIntent();
      }
      
      /// An action that is bound to ClearIntent that clears the TextEditingController
      /// passed to it.
      class ClearAction extends Action<ClearIntent> {
       ClearAction({required this.controller});
      
       final TextEditingController controller;
      
       @override
       Object? invoke(covariant ClearIntent intent) {
         controller.clear();
       }
      }
      

      一個糟糕的 TextField 示例,按下左箭頭鍵或 ESC 鍵會清除文本

      一個糟糕的 TextField 示例,按下左箭頭鍵或 ESC 鍵會清除文本

      在這方面,我們的確還有很多工作要做,但我們將不遺余力賦予開發(fā)者對文本編輯操作的完全控制權(quán)。目標是在 Flutter 桌面版達到穩(wěn)定時,最終用戶將無法區(qū)分 Flutter 應(yīng)用中的文本編輯功能與主機操作系統(tǒng)中的其他應(yīng)用有什么差別。

      自動滾動行為

      我們一直致力于讓 Flutter 應(yīng)用的表現(xiàn)與各個平臺上最優(yōu)秀的應(yīng)用如出一轍,為此,我們在這個版本中對滾動條又做了進一步優(yōu)化。在滾動條的顯示方式上,Android 和 iOS 將完全相同,即默認不顯示滾動條。但在桌面應(yīng)用中,只要內(nèi)容大于容器,通常就會自動顯示滾動條。這就要求您添加一個類型為 Scrollbar 的父級 widget。為了在移動設(shè)備和桌面設(shè)備上都實現(xiàn)正確的行為,此版本會在需要時自動添加一個 Scrollbar。

      以下是一段不含 Scrollbar 的代碼:

      import 'package:flutter/material.dart';
      
      void main() => runApp(App());
      
      class App extends StatelessWidget {
       @override
       Widget build(BuildContext context) => MaterialApp(
             title: 'Automatic Scrollbars',
             home: HomePage(),
           );
      }
      
      class HomePage extends StatelessWidget {
       @override
       Widget build(BuildContext context) => Scaffold(
             body: ListView.builder(
               itemCount: 100,
               itemBuilder: (context, index) => Text('Item $index'),
             ),
           );
      }
      

      上述代碼在桌面平臺上運行時,將會顯示一個滾動條:

      如果您不喜歡滾動條的外觀或不想讓滾動條一直顯示,可以設(shè)置 ScrollBarTheme。如果您不喜歡該默認行為,可以在應(yīng)用層級或具體實例層級通過設(shè)置 ScrollBehavior 來對其進行更改。如需詳細了解新的默認滾動條行為以及如何遷移代碼以遵循新的最佳實踐,請參閱 Flutter 官方文檔。

      TextSpan 上的鼠標指針

      在之前的 Flutter 版本中,您可以在任何 widget 上添加一個鼠標指針 (例如用手型指針來表示元素可供點擊)。實際上,F(xiàn)lutter 會在大部分情況下替您添加此類鼠標指針,例如在所有按鈕上添加手型鼠標指針。不過,如果您是用多個不同樣式的 TextSpan 來實現(xiàn)一段富文本,而且其長度可能長到需要換行,那就沒辦法給它添加鼠標指針了,這是因為 TextSpan 不屬于 widget,不能用于界定鼠標指針的視效范圍。但現(xiàn)在不一樣了!在新版本中,如果您的 TextSpan 具備手勢識別器 (GestureRecognizer),系統(tǒng)將自動為其設(shè)置鼠標指針:

      import 'package:flutter/gestures.dart';
      import 'package:flutter/material.dart';
      import 'package:url_launcher/url_launcher.dart' as urlLauncher;
      
      void main() => runApp(App());
      
      class App extends StatelessWidget {
       static const title = 'Flutter App';
       @override
       Widget build(BuildContext context) => MaterialApp(
             title: title,
             home: HomePage(),
           );
      }
      
      class HomePage extends StatelessWidget {
       @override
       Widget build(BuildContext context) => Scaffold(
             appBar: AppBar(title: Text(App.title)),
             body: Center(
               child: RichText(
                 text: TextSpan(
                   style: TextStyle(fontSize: 48),
                   children: [
                     TextSpan(
                       text: 'This is not a link, ',
                       style: TextStyle(color: Colors.black),
                     ),
                     TextSpan(
                       text: 'but this is',
                       style: TextStyle(color: Colors.blue),
                       recognizer: TapGestureRecognizer()
                         ..onTap = () {
                           urlLauncher.launch('https://flutter.dev');
                         },
                     ),
                   ],
                 ),
               ),
             ),
           );
      }
      

      現(xiàn)在您可以自由使用任意換行的 TextSpan,只要其具備手勢識別器,系統(tǒng)即會為其設(shè)置適當?shù)氖髽酥羔槨?/p>

      在此版本中,TextSpan 除了支持 mouseCursor,還支持 onEnteronExit。這些改進看似細小,對用戶體驗的影響卻大,能讓 Flutter 應(yīng)用提供更貼近用戶預(yù)期的使用體驗。

      Flutter 2.2 中新的預(yù)覽版功能

      除了適用于生產(chǎn)環(huán)境的新功能,F(xiàn)lutter 2.2 還搭載了多項新的預(yù)覽版功能,包括 iOS 著色器編譯性能改進、Android 延遲加載組件支持、Flutter 桌面平臺更新以及 Sony 貢獻的 ARM64 Linux 主機支持。歡迎您體驗這些功能,并 在遇到問題時向我們報告。

      iOS 著色器編譯改進

      在圖形渲染領(lǐng)域,"著色器" 指的是一個在終端用戶設(shè)備可用的 GPU 上編譯并運行的程序。Flutter 自誕生伊始就在底層的 Skia 圖形庫中使用著色器,從而在色彩、陰影、動畫等方面實現(xiàn)高質(zhì)量圖形效果的同時達成可媲美原生代碼的優(yōu)越性能。得益于 Flutter API 的靈活性,著色器能夠以 JIT 方式即時生成和編譯,并與需要它們的幀工作負載同步。不過,當著色器的編譯耗時超出相應(yīng)幀的時間預(yù)算,就會導致用戶感受到卡頓。

      為了避免這類卡頓,F(xiàn)lutter 讓您可以在訓練運行期間緩存著色器,并將其打包到應(yīng)用中,然后于 Flutter 引擎啟動時的第一幀之前對其進行編譯。這樣一來,這些預(yù)先編譯的著色器就不必在幀工作負載期間進行編譯,也就不會造成卡頓。不過,Skia 一開始只針對 OpenGL 實現(xiàn)了此功能。

      這就導致,我們因 Apple 廢棄 OpenGL 而在 iOS 上默認啟用 Metal 后端后,基準測試測得的最差幀時間數(shù)值有所增長,用戶報告卡頓的情況也有所增多。經(jīng)過調(diào)查,我們發(fā)現(xiàn)此類卡頓往往由下列因素造成: 著色器編譯時間增加、Skia 為 Metal 后端生成的著色器數(shù)量增多,以及未能在多次運行之間對編譯后的著色器進行緩存并因而導致應(yīng)用在后續(xù)運行時仍然出現(xiàn)卡頓。

      到目前為止,在 iOS 上杜絕此類卡頓的唯一方式就是對場景和動畫進行簡化,而這不是一個理想的解決方案。

      為解決這個問題,我們已在 dev 渠道中發(fā)布 Skia 針對 Metal 新增對著色器預(yù)熱的支持 這一預(yù)覽版功能。Flutter 現(xiàn)在會通過 Skia 在第一個幀工作負載開始之前對捆綁的著色器進行編譯。

      應(yīng)用啟動期間的預(yù)編譯操作的跟蹤記錄

      應(yīng)用啟動期間的預(yù)編譯操作的跟蹤記錄

      不過,此解決方案存在一些不足之處:

      • 相比 OpenGL 后端,Skia 仍會為 Metal 后端生成更多的著色器。
      • 最終將著色器編譯為機器碼的操作仍然與幀工作負載同步發(fā)生,但這好過在幀渲染時段內(nèi)執(zhí)行所有著色器生成和編譯操作。
      • 最終生成的機器碼會在應(yīng)用首次運行后得到緩存,直到設(shè)備被重新啟動。

      如果您希望在自己的應(yīng)用中使用此新功能,可以參考 Flutter 官方文檔 上的說明進行操作。

      我們將持續(xù)改進此實現(xiàn)方案。在 Android 和 iOS 上,它目前有幾個缺點:

      • 由于捆綁了著色器,應(yīng)用的部署體積更大。
      • 由于需要預(yù)編譯捆綁的著色器,應(yīng)用啟動延時更長。
      • 對開發(fā)者體驗可能存在負面影響。

      其中,我們最為重視最后一點。我們認為開發(fā)者不應(yīng)該需要執(zhí)行訓練運行,也不應(yīng)該在應(yīng)用體積和啟動延時方面承擔代價。因此,我們還在繼續(xù)探索是否有不依賴此實現(xiàn)方案的其他方法來消除著色器編譯卡頓以及其他類型的卡頓。我們正在與 Skia 團隊攜手合作,降低 Flutter 請求產(chǎn)生的著色器數(shù)量,并探討在 Flutter 引擎中捆綁少量靜態(tài)定義的著色器的可行性。

      您可以關(guān)注 Flutter 代碼庫中的相關(guān)項目 了解相關(guān)進展。

      Android 延遲加載組件: 可下載的 AOT 代碼和資源

      在 Android 平臺上,此版本利用 Dart 的分拆式 AOT 編譯功能來 讓 Flutter 應(yīng)用能夠在運行時下載內(nèi)含預(yù)先編譯的代碼和資源的模塊。我們將這種可安裝的分拆模塊稱為 "延遲加載組件"。由于可在需要時才下載代碼和資源,應(yīng)用的初始安裝體積顯著縮小。例如,我們實現(xiàn)了一個特殊版本的 Flutter Gallery 應(yīng)用,將其中所有案例和 demo 都設(shè)為延遲加載,從而將初始安裝體積縮減了 46%。

      在 Flutter Gallery 應(yīng)用中下載 Crane 案例

      在 Flutter Gallery 應(yīng)用中下載 Crane 案例

      如果在構(gòu)建應(yīng)用時啟用延遲加載組件,Dart 會將那些單獨用 deferred 關(guān)鍵字導入的代碼編譯到獨立的共享庫中,并將這些庫與相關(guān)資源一起打包為延遲加載組件。

      該功能還處于早期預(yù)覽階段,目前只支持 Android。您可以在 Flutter 官方文檔上新的 延遲加載組件 頁面中了解如何實現(xiàn)此類組件。此頁面還鏈接到了 Flutter wiki 上的一個頁面,后者詳細介紹了此功能的工作原理。如果發(fā)現(xiàn)問題,請通過 Flutter 問題跟蹤器 告知我們。

      Flutter Windows UWP alpha 版

      此版本 Flutter 的另一項更新針對的是桌面平臺: 對 Windows UWP 的支持現(xiàn)已在 dev 渠道中進入 alpha 版階段 (2.2 穩(wěn)定版之后)。借助 UWP,您的 Flutter 應(yīng)用將可以覆蓋 Xbox 等無法運行標準 Windows 應(yīng)用的設(shè)備。如需試用此功能,請先 滿足 UWP 前置條件,然后切換到 dev 渠道并啟用 UWP 支持。

      $ flutter channel dev
      $ flutter upgrade
      $ flutter config — enable-windows-uwp-desktop
      

      啟用后,創(chuàng)建的 Flutter 應(yīng)用會包含一個新的 winuwp 文件夾,以便您在 UWP 容器中構(gòu)建和運行您的應(yīng)用:

      $ flutter create uwp_fun
      $ cd uwp_fun
      $ flutter pub get
      $ flutter run -d winuwp
      

      由于構(gòu)建的是在 Windows 沙盒環(huán)境中運行的 Windows UWP 應(yīng)用,您需要在開發(fā)期間對應(yīng)用的防火墻進行 localhost 穿透設(shè)置,以實現(xiàn)熱重載和調(diào)試器斷點等功能。為此,您可以按照 Flutter 桌面文檔頁面 上的說明使用 checknetisolation 進行操作。完成相關(guān)操作后,您就可以在 Windows 上以 UWP 應(yīng)用的形式運行您喜愛的 Flutter 應(yīng)用了。

      在 Windows UWP 容器中運行您喜愛的 Flutter 應(yīng)用

      在 Windows UWP 容器中運行您喜愛的 Flutter 應(yīng)用

      當然,您也可以運行一些更豐富有趣的 UWP 應(yīng)用,例如下面這個 視頻 中在 Xbox 上運行的 Flutter 應(yīng)用。

      在 Xbox 上運行的 Flutter 應(yīng)用

      我們要特此致謝 clarkezone,從我加入 Flutter 團隊時起,他就一直投身于實現(xiàn)這項功能。如需詳細了解 Windows UWP alpha 版支持,請參閱 官方文檔。

      Sony 貢獻的 ARM64 Linux 主機支持

      這項杰出貢獻來自于 Flutter 社區(qū)的 Sony 軟件工程師 HidenoriMatsubayashi。他提交的 ARM64 Linux 目標支持 這條 PR 讓您可以在 ARM64 Linux 機器上構(gòu)建和運行 Flutter 應(yīng)用。

      在 ARM64 Linux 機器上運行您喜愛的 Flutter 應(yīng)用

      在 ARM64 Linux 機器上運行您喜愛的 Flutter 應(yīng)用

      我們很高興看到 Flutter 社區(qū)將 Flutter 移植到超乎 Google 團隊想象的平臺。HidenoriMatsubayashi,感激不盡!

      Flutter 生態(tài)系統(tǒng)和工具更新

      Flutter 引擎和框架只是整體體驗的一部分,package 生態(tài)系統(tǒng)和工具方面的更新對 Flutter 開發(fā)者的體驗來說同樣重要。我們在這個領(lǐng)域也有幾項很棒的更新與您分享。

      在生態(tài)系統(tǒng)端,我們發(fā)布了多個 Flutter Favorite package,并更新了 Flutter 的 Firebase 支持插件集 FlutterFire。FlutterFire 現(xiàn)在還支持新的 Firebase App Check 預(yù)覽版,讓 Flutter 開發(fā)者自第一天起就可受益于這個產(chǎn)品。

      在工具端,F(xiàn)lutter DevTools 做了多項更新以方便您優(yōu)化應(yīng)用的內(nèi)存使用方式,還為 Provider package 提供了一個標簽頁。適用于 VS Code 和 Android Studio/IntelliJ 的 IDE 插件也有重大更新。此外,如果您是 Flutter 相關(guān)內(nèi)容的創(chuàng)作者,我們還提供了一種全新方式讓您將 DartPad 集成到您的創(chuàng)作流程中。

      最后,F(xiàn)lutter 現(xiàn)在有了一個新的低代碼 (low-code) 應(yīng)用設(shè)計和構(gòu)建工具,名為 FlutterFlow。該工具在 web 上運行,本身也是使用 Flutter 構(gòu)建而成。

      Flutter Favorite 更新

      在此版本中,得益于 Flutter 生態(tài)系統(tǒng)委員會 (FEC) 的辛勤工作,我們增加了 24 個 Flutter Favorite 認證 package,堪稱有史以來步伐最大的一次擴張。這些新出爐的 Flutter Favorites package 包括:

      所有這些 package 都已支持空 (null) 安全特性,并盡可能支持 Android、iOS 和 web 平臺。其中有一些例外,例如 firebase_crashlytics 沒有適用于 web 平臺的底層 SDK,而 android_alarm_manager_plus 則是專為 Android 平臺設(shè)計。

      Flutter Community "plus" package 在 Flutter 團隊官方 package 的基礎(chǔ)上提供了更多特性。例如,Google 的 Flutter 團隊提供的 battery package 可以追溯到初版 Flutter 發(fā)布之前,它現(xiàn)在具備空安全特性,但只支持 Android 和 iOS 平臺。與此相對,Flutter Community battery_plus package 則支持全部 6 個 Flutter 平臺,包括 web、Windows、macOS 和 Linux。該套件內(nèi)置的全部 9 個 "plus" package 都獲得了 Flutter Favorite 認可,這是標志著整個 Flutter 社區(qū)邁向成熟的重大一步。Flutter 項目已經(jīng)遠遠不止是 Google 工程團隊獨力奮戰(zhàn)。您應(yīng)盡快將您的代碼遷移至 "plus" package。在未來幾周中,Google 的相關(guān) package 將會更新,建議您進行遷移。

      googleapis 插件為 185 個 Google API 提供了自動生成的 Dart 封裝,供您在客戶端或服務(wù)器端的 Dart 應(yīng)用 (包括您的 Flutter 應(yīng)用) 中使用。如需進一步了解此 package,您可以觀看其作者關(guān)于使用 Google API 為您的 Flutter 應(yīng)用賦能的 I/O 大會演講。

      win32 package 堪稱一件工程杰作,它使用 Dart FFI 封裝了大部分常用 Win32 API 接口,讓 Dart 代碼無需依賴 C 編譯器或 Windows SDK 即可使用這些 API。隨著 Flutter 在 Windows 平臺上越來越受關(guān)注,win32 package 成為了許多熱門插件的關(guān)鍵依賴項,其中包括最熱門 Flutter package 之一的 path_provider。為了挑戰(zhàn)極限,其作者 timsneath 創(chuàng)下了一些驚人壯舉,例如使用純 Win32 和純 Dart 來實現(xiàn) notepad (記事本)、snake (貪吃蛇) 和 tetris (俄羅斯方塊)。

      僅使用 Dart FFI 和 Win32 接口實現(xiàn)的在 Windows 平臺運行的俄羅斯方塊游戲

      僅使用 Dart FFI 和 Win32 接口實現(xiàn)的在 Windows 平臺運行的俄羅斯方塊游戲

      如果您有在 Windows 上進行任何 Dart 或 Flutter 開發(fā),win32 package 值得您一探究竟。

      FlutterFire 更新和 Firebase App Check

      作為 Flutter 的 Firebase 支持插件集,F(xiàn)lutterFire 已躋身最熱門 Flutter 插件之列。為了讓該插件集的正式版能夠與 Flutter 2 一道發(fā)布并在隨后對其持續(xù)進行改進,其主要貢獻者 Invertase 團隊做了許多出色的工作。自 FlutterFire 的首個正式版發(fā)布之后,Invertase 將未解決問題的數(shù)量降低了 79%,并將待處理 PR 的數(shù)量降低了 88%。他們不僅在正式版插件的開發(fā)上成績斐然,還成功將所有 Beta 版插件都支持了空安全機制,同時讓這些插件在您可能遇到的各種核心上都能正常構(gòu)建和運行。

      Invertase 還在繼續(xù)為 FlutterFire 插件增添更多功能,包括在新版 Flutter 中對 Cloud Firebase 集成做的多項更新:

      FlutterFire 現(xiàn)在還支持 Firebase 新推出的 beta 版產(chǎn)品 Firebase App Check。Firebase App Check 可幫助您保護 Cloud Storage 等后端資源,使其不受付費欺詐或釣魚攻擊等濫用行為的侵害。有了 App Check,運行您的 Flutter 應(yīng)用的設(shè)備會通過一個應(yīng)用身份證明提供方來證明應(yīng)用實例的正當身份,并可檢查應(yīng)用是否運行在未受篡改的可信設(shè)備上。一旦您啟用 App Check,相應(yīng)證明信息會附加到您的應(yīng)用向 Firebase 后端資源發(fā)出的每一個請求中。要了解詳情,請參閱 FlutterFire App Check 文檔

      Flutter DevTools 更新

      此版本的 Flutter DevTools 帶來了多項重大更新,包括內(nèi)存跟蹤方面的兩項改進和一個 Provider 插件專屬的新標簽頁。

      內(nèi)存跟蹤方面的第一項改進: 跟蹤對象的內(nèi)存分配位置。這有助于找出導致內(nèi)存泄漏的代碼。

      Flutter DevTools 內(nèi)存標簽頁分配棧軌跡

      Flutter DevTools 內(nèi)存標簽頁分配棧軌跡

      第二項改進: 向內(nèi)存時間軸中注入自定義信息。這讓您可以根據(jù)應(yīng)用的具體情況添加標注,例如標出內(nèi)存密集型工作的開始點和結(jié)束點,以驗證是否適當?shù)貓?zhí)行了清理。

      Flutter DevTools 時間軸標簽頁自定義內(nèi)存事件

      Flutter DevTools 時間軸標簽頁自定義內(nèi)存事件

      隨著 Flutter 應(yīng)用的體積逐步增長,我們將繼續(xù)努力為 Flutter 開發(fā)者提供所需的工具,助其跟蹤和修復內(nèi)存泄漏和其他各種運行時問題。

      您需要排查的問題并不僅僅是那些與 Flutter 框架相關(guān)的運行時問題,有時還有與所依賴 package 相關(guān)的問題。隨著 pub.dev 上的 Flutter 兼容 package 數(shù)量突破 15,000 大關(guān),您的應(yīng)用使用的 package 數(shù)量也很可能隨之增長。有鑒于此,F(xiàn)lutter DevTools 中新加入了一個實驗性的 Provider 標簽頁,由 provider package 本身及其他很多出色軟件的開發(fā)者 Remi Roussel 傾力打造。如果您運行的是最新版 Flutter,在您對一個包含 provider 插件的 Flutter 應(yīng)用進行調(diào)試時,Provider 標簽頁就會自動顯示。

      實戰(zhàn)演示: Flutter DevTools Provider 標簽頁

      實戰(zhàn)演示: Flutter DevTools Provider 標簽頁

      Provider 標簽頁會向您展示每個 provider 的相關(guān)數(shù)據(jù),并會實時反映您在應(yīng)用運行過程中做出的更改。很棒吧?不僅如此,它還可以讓您直接更改這些數(shù)據(jù),從而對應(yīng)用的邊角案例進行測試。太贊了!

      在協(xié)力 Remi 開發(fā)此標簽頁的過程中,我們也學到了一些寶貴經(jīng)驗,知道了該如何更好地為具有類似需求的 package 作者服務(wù)。您可以了解 Remi 是如何構(gòu)建出 Provider 標簽頁的,還可以通過 Flutter DevTools 插件提案了解我們當前的改進思路。歡迎向我們提供反饋;同時,如果您在 Flutter DevTools 新增更多標簽頁方面也有自己的想法,我們也很期待聽到您的高見。

      上述改進只是此版本 Flutter DevTools 眾多改進中的幾項。如需完整列表,請查看下列公告:

      IDE 插件更新

      在此版本中,針對 Flutter 的 Visual Studio Code 和 IntelliJ/Android Studio IDE 擴展也得到了更新。例如,Visual Studio Code 擴展現(xiàn)在支持兩項額外的 Dart 代碼重構(gòu): 內(nèi)聯(lián)函數(shù)和內(nèi)聯(lián)本地變量。

      實戰(zhàn)演示: 新的 "內(nèi)聯(lián)函數(shù)" Dart 重構(gòu)

      實戰(zhàn)演示: 新的 "內(nèi)聯(lián)函數(shù)" Dart 重構(gòu)

      在 Android Studio/IntelliJ 擴展中,我們新增了一個在控制臺中輸出所有堆棧軌跡的選項。

      您現(xiàn)在可以輸出所有堆棧軌跡,而不僅限于第一條

      您現(xiàn)在可以輸出所有堆棧軌跡,而不僅限于第一條

      如果項目中某個問題的根源是在另一個 package,以前相關(guān)軌跡不會納入到輸出中,這項新功能就可以派上大用場。但隨之而來的一個問題是,該如何讓軌跡信息更易于梳理解讀?我們已經(jīng)有了一些想法,歡迎關(guān)注后續(xù)相關(guān)改動。

      如需此版本中 IDE 擴展的完整變更列表,請查看下列公告:

      DartPad 隨堂實踐

      為了確保 Flutter 開發(fā)者社區(qū)蓬勃發(fā)展的同時讓相關(guān)文檔也能跟上腳步,Dart 和 Flutter 團隊始終在想方設(shè)法改進和拓展相關(guān)培訓內(nèi)容的制作方法。在此版本中,我們?yōu)?DartPad 添加了一個新的分步式界面,讓開發(fā)者在學習講師主導的課程/講座時可以方便地隨堂動手實踐。

      實戰(zhàn)演示: DartPad 課程/講座隨堂實踐

      實戰(zhàn)演示: DartPad 課程/講座隨堂實踐

      通過將實踐指引直接加入到 DartPad 中,我們在今年的 I/O 大會實現(xiàn)了 引導式講座體驗。不過,此功能并非專為我們自己的需求而開發(fā),如果您要在自己的 Dart 或 Flutter 課程/講座中使用該工具,可以按 DartPad 培訓內(nèi)容創(chuàng)作指南 中的說明操作。請勿將此功能與 在 Gist 中通過 DartPad 分享代碼在您的網(wǎng)站上嵌入 DartPad 這兩項功能相混淆,后兩者已經(jīng)推出了一段時間。

      我們希望所有 Dart 和 Flutter 內(nèi)容作者都能夠為其受眾帶去豐富的互動式體驗。歡迎試用并 向我們提供反饋。

      社區(qū)聚焦: FlutterFlow

      FlutterFlow 是一個 "低代碼" (low code) 應(yīng)用設(shè)計和開發(fā)工具,用于在瀏覽器中構(gòu)建應(yīng)用。它提供了一個 "所見即所得" 環(huán)境,讓您可根據(jù)實際 Firebase 數(shù)據(jù)來設(shè)計橫跨多個頁面的應(yīng)用布局。此工具的目標是讓您能夠輕松執(zhí)行大部分常見操作,并盡量減少您自己需要編寫的代碼量。實際上,在一次演示中,演示者不到一個小時就使用此工具構(gòu)建出了一個包含多個頁面、可幫助用戶游覽大都會藝術(shù)博物館的完整移動應(yīng)用,整個過程沒有寫一行代碼。您可以在 YouTube 上觀看整個過程的 視頻記錄

      對兼容性有影響的重大變更

      一如既往,我們會盡量避免進行影響兼容性的重大變更。在此版本中,此類變更僅限于移除下面這些已廢棄的組件:

      • 73750 移除已廢棄的 BinaryMessages
      • 73751 移除已廢棄的 TypeMatcher 類

      您可以 在 flutter.cn 上找到這些變更對應(yīng)的遷移指南.

      結(jié)語

      Google Flutter 團隊全體同仁謹此向大家致以誠摯謝意!我們要感謝 Flutter 社區(qū)的每一個人,F(xiàn)lutter 取得的成績離不開大家的每一份貢獻。如今,Play 商店中有超過八分之一的新應(yīng)用是采用 Flutter 構(gòu)建而成,僅在 Play 商店就收錄了多達 20 萬款 Flutter 應(yīng)用。Flutter 的迅猛發(fā)展勢頭出人意表。世界各地大大小小的應(yīng)用團隊都使用 Flutter 進行開發(fā),為諸多平臺上的用戶打造優(yōu)質(zhì)體驗。謝謝大家選擇 Flutter!

      最后,以免您錯過,不要忘了體驗下在本次 I/O 大會推出的 I/O Photo Booth web 應(yīng)用,它是由 Flutter 和 Firebase 構(gòu)建而成的 web 應(yīng)用,讓您可以和 Dash 合拍萌萌的大頭照。我們還 開放了其源代碼,方便您進一步了解 Flutter web 最佳實踐、相機插件 web 支持以及如何使用 Cloud Functions 函數(shù)來生成自定義社交內(nèi)容。機不可失,趕緊一睹為快吧!

      posted on 2021-05-26 18:28  Flutter社區(qū)  閱讀(1192)  評論(0)    收藏  舉報

      導航

      主站蜘蛛池模板: 色视频不卡一区二区三区| 大尺度国产一区二区视频 | 两性午夜刺激性视频| 一区二区三区精品视频免费播放| 成人激情视频一区二区三区| 国产国产午夜福利视频| 两个人看的www免费视频中文| 韩国 日本 亚洲 国产 不卡| 日韩深夜福利视频在线观看 | 国产精品美女黑丝流水| 久久亚洲色WWW成人男男| 99热这里只有精品免费播放 | 日本免费一区二区三区日本| 亚洲 丝袜 另类 校园 欧美| 99人中文字幕亚洲区三| 久爱www人成免费网站| 少妇人妻偷人精品系列| 东京热高清无码精品| 国产成人无码午夜视频在线播放| 少妇撒尿一区二区在线视频| 三级国产在线观看| 亚洲v欧美v日韩v国产v| 欧美牲交a免费| 欧美成人va免费大片视频| 精品激情视频一区二区三区 | 国产国语一级毛片| 97久久精品人人澡人人爽| 老司机免费的精品视频| 成全高清在线播放电视剧| 亚洲色大成网站WWW永久麻豆| 亚洲国产精品日韩在线| 亚洲日韩成人无码不卡网站 | 酒泉市| 亚洲精品日本一区二区| 中文字幕无线码免费人妻| 久久精品无码专区免费东京热| 青春草在线视频观看| 精品亚洲国产成人av制服| 亚洲AVAV天堂AV在线网阿V| 亚洲精品国产老熟女久久| 色呦呦 国产精品|