此外,在 3.0 版本中,webview_flutter 為一個新的平台提供了初步支援:Web。我們已經有很多開發者詢問是否能夠在 Flutter Web 應用程式中託管 Web 視圖,這允許您從單個程式碼庫中為行動設備或 Web 構建應用程式。在 Flutter Web 應用程式中託管 Web 視圖是什麼樣子的呢?從程式碼的角度來看,它看起來完全一樣:
if (accessLevel == 'user .// Check if admin ') { print('You are a regular user.'); } else { print('You are an admin.'); } }
您可能會認為這個程式會列印 *You are a regular user.*,但實際上它可能會列印 *You are an admin.*!透過使用包含雙向 Unicode 字元的字串,可以利用此漏洞。這些字元會將文字的方向從左到右更改為從右到左,然後再返回,所有這些都在同一行中。使用雙向字元時,文字在螢幕上的渲染方式可能與實際文字內容大不相同。您可以在 此 GitHub 程式碼 gist 中看到一個範例。
info • bin/cvetest.dart:4:27 • The Unicode code point 'U+202E' changes the appearance of text from how it's interpreted by the compiler. Try removing the code point or using the Unicode escape sequence '\u202E'. • text_direction_code_point_in_literal
在過去艱難的一年裡,我們自己的工程團隊一直在忙碌。除了 Flutter 2.8 中的功能之外,我們還重寫了開發人員工具,發佈了空安全和 Web 支援,完成了用於原生程式碼整合的 FFI,增加了對 Material You 的初步支援,並努力提高性能和品質。我們總共關閉了近 20,000 個議題。我們創建了一個 全新的智慧網站 以更好地展示 Flutter。在過去的幾個月裡,我們投入了大量的精力來徹底改造我們的工程基礎設施,以提高工程師的生產力,並擴展測試。
展望 2022 年,我們希望能夠親自見到你們中的一些人。我們預計將更多投資於核心開發人員體驗,包括語言增強、文件更新,以及使使用 Flutter 建構複雜應用程式變得更容易的更高階抽象。我們將完成穩定的桌面支援,並進一步擴展我們在 Web 上的工作。我們還計畫擴展與其他平台的互操作性,以及將其移植到新的目標平台。我們才剛剛開始!
一些結語和致敬
我們想將這個 Flutter 2.8 版本獻給凱文·格雷,一位 Very Good Ventures 的開發人員,他一個星期前不幸去世了。自 Flutter 最初誕生以來,凱文一直是 Flutter 成功的重要貢獻者;他是許多早期 Flutter 範例的開發人員,包括我們最早的幾個高知名度客戶成功案例,例如 Flutter 在桌面平台上的首次演示,以及在 Google I/O 主題演講中展示的第一個 Flutter 範例。他是一個有天賦、關心他人、有趣且善良的人,認識他的人都會同意,他的離去留下了巨大的空缺。在悲傷的同時,我們也慶祝他的生命,並公開紀念他,以便他的影響力可以為所有人所知。沒有他,Flutter 就不會是現在這個樣子。
我們與 Google 廣告團隊合作建立了這個 Plugin,作為 Flutter 開發人員的官方廣告解決方案。GMA SDK for Flutter 將對 **Google AdMob 和 Google 廣告管理員** 的支援整合到單一 Plugin 中。
如果您不熟悉 Google 的廣告服務,您可能不知道 [AdMob](https://admob.google.com/home/) 和 [廣告管理員](http://admanager.google.com/home) 是兩種具有不同變現功能的不同產品。AdMob 平台專為希望從廣告中賺錢並獲得可行洞察以發展應用程式業務的行動開發人員設計。廣告管理員平台專為擁有大量直接銷售或多種庫存類型的發佈者設計。
[GMA SDK for Flutter](https://pub.dev/packages/google_mobile_ads) 整合了這些產品,透過在 iOS 和 Android 之間共用程式碼來滿足您的變現需求,並且無需重新編寫程式碼即可滿足不斷增長的需要。
中介和出價
此版本還包含新的中介功能預覽,可幫助您優化廣告效能。[中介](https://developers.google.com/admob/flutter/mediation/get-started) 可幫助您在一個位置管理用於向您的應用程式提供廣告的各種廣告來源。除了 Google 的需求外,您也可以透過此功能從非 Google 廣告網路提供廣告。使用中介,您可以將收到的廣告請求發送到多個廣告來源,並找到最佳的可用來源來滿足這些請求。除了傳統的中介外,它還支援出價,讓廣告來源可以透過即時拍賣來爭奪滿足您的廣告請求。這有助於確保您的每次展示都能獲得最高收益。
GMA SDK for Flutter 提供了與 iOS 和 Android 應用程式相同的廣告功能。您可以使用相同的工具來管理您的活動、追蹤廣告效能等等。
我們還詢問了哪些功能需要改進。SEO 被最多開發人員選中(36%),其次是下載(套件)大小(27%)。雖然我們了解索引在網頁上的重要性,但我們最初發佈的網頁支援專注於 Web 應用程式的利基市場,這些應用程式更重視內容創作,因此不需要索引。Rive 使用的 rive.app 就是一個很好的例子。他們有一個用 HTML 編寫的登陸頁面,該頁面對 SEO 友好,而當使用者啟動用 Flutter Web 編寫的主要應用程式時,SEO 就變得不再必要。我們目前的計畫是首先提高 Flutter 在網頁上的品質,使其在 Web 應用程式中表現出色,然後再解決其他用例,例如更重視內容消費的應用程式或頁面。
SEO 被最多開發人員選中為需要改進的功能(36%),其次是下載(套件)大小(27%)。
原始碼檔案中的程式碼範例
由於 Flutter 是一個開源專案,因此您可以在 IDE 中跳轉到 API 的定義並閱讀其程式碼範例,這些範例嵌入在原始碼中。但是,框架團隊正在考慮將程式碼範例從原始碼移到單獨的檔案中,以便啟用語法高亮顯示並將符號轉換為可點擊的連結。(有關更多資訊,請查看 中型程式碼範例 和 測試程式碼範例 的設計文件。)由於這可能會影響您使用文件的方式,因此我們在本次調查中加入了一個部分,以了解有多少人可能會受到提議的設計的影響。
Google Summer of Code (GSoC) 是一個全球性的計劃,旨在讓學生開發人員參與開放原始碼軟體開發。Google 贊助學生在夏季與一個指導性的開放原始碼組織合作進行一個為期 10 週的編程專案。在過去的 16 年中,已有超過 16,000 名學生參與了 Google Summer of Code。
2021 年是 Dart 組織第二次作為指導性組織參與 Google Summer of Code。繼我們在 3 月份 徵集學生提案 之後,我們收到了來自世界各地學生的 92 份專案提案,其中我們非常興奮地接受了 3 個專案。今天,我們很高興與大家分享我們的成果,由參與這些專案的學生進行描述。