但是,我們注意到整體滿意度自上一季調查以來略有下降,從 94% 降至 92%。為了了解為什麼您對 Flutter 的各個方面並未完全滿意,團隊仔細審閱了開放式意見回饋。感謝您的回饋,團隊意識到了一些主要問題,並將投資於高優先順序項目。例如,我們計劃 改進程式碼完成,因為我們發現這是 IDE 相關問題中最常見的挫折來源。
難點
這次,我們採用了不同的方法來了解 Flutter 的難點。我們想了解什麼阻礙了您更多地使用 Flutter。當我們詢問「如果不是因為以下原因,我會更多地使用 Flutter」,26% 的受訪者選擇了 缺乏關鍵函式庫 作為原因。作為回應,我們正與 Baseflow、Invertase 和 Codemagic 合作,以提高我們第一方套件和外掛的品質。雖然團隊正在努力改進先前研究中識別出的關鍵函式庫,但我們也在使用標籤 would be a good package 監控問題追蹤器中的特定需求,以便任何人都可以找出生態系統中缺少什麼,並為其做出貢獻。
Flutter 致力於為 Android 和 iOS 的最新功能提供完全支援。我們始終監控著 Apple 和 Google 發布的有關其平台 API、工具使用和授權條款變更的定期指南。對新作業系統版本的支援是我們定期產品規劃的一部分,我們會盡量將我們的版本與 Google 和 Apple 的最新指南保持一致,以確保我們的穩定版本始終與兩者的最新指南相容。
Flutter 為多目標支援帶來了兩大優勢。首先,Flutter 對底層作業系統的依賴性很小。Flutter 的引擎直接與圖形 API 互動,Plugin 為其他功能提供了大部分的設備特定實作。
我們的持續整合 (CI) 系統會為 macOS、Linux 和 Windows 建立 Flutter 及其工具,並部署到一系列 Android 和 iOS 設備(實體設備和模擬設備)。部分 CI 是使用 Google 辦公室中的實驗室進行的;其他 CI 測試是在 Firebase 測試實驗室 上進行的,這是 Google 為 Google 和第三方開發人員運營的雲端託管測試解決方案。
以下是一張我們測試實驗室中其中一個機架的照片:
我們在設備實驗室中運行相對低端的行動設備,因為我們會在那裡進行 效能測試。在測試時,我們希望從代表大多數使用者擁有的設備中獲取效能指標。這樣做可以讓我們獲得最糟糕的情況、真實世界的效能。這種理念也適用於核心工程團隊使用的設備。核心工程團隊的大部分成員並沒有在最新的 Google Pixel 或 Apple iPhone 上進行 Flutter 除錯。
不幸的是,Flutter 驅動測試存在一些問題。一個問題是測試從開發機器執行並與設備上的應用程式通訊,這意味著測試不適合在像 Firebase Test Lab 這樣的設備池上執行。另一個問題是,為您的測試單獨使用一個程序會讓您很難檢查應用程式的狀態。您可以檢查輸出,但是您如何知道,例如,應用程式的內部狀態。最後,flutter_driver API 比它需要的要複雜,特別是在編寫程式碼以找到螢幕上適當的 Widget 來進行測試時。
final int major = version?.major; final int minor = version?.minor; if (globals.platform.isMacOS) { /// Android Studio 的插件路径在 4.1 版本之后发生了变化。 if (major >= 4 && minor >= 1) { ...
你能找到错误吗?由于 version 可能会为 null,major 和 minor 也可能会为 null。这个错误在孤立情况下似乎很容易发现,但在实践中,即使是像 Flutter 存储库中使用的严格代码审查流程,也会经常出现类似的代码。使用空安全功能,静态分析 会立即发现这个问题:
这是一个非常简单的错误。在 Google 内部早期使用空安全功能的代码中,我们已经看到更多复杂的错误被发现,然后通过空安全功能解决。以下是几个例子:
finalint major = version?.major; finalint minor = version?.minor; if (globals.platform.isMacOS) { /// Android Studio 4.1 版之後的 Plugin 路徑已更改。 if (major >= 4 && minor >= 1) { ...
您能發現錯誤嗎?因為 version 可能為空,major 和 minor 也可能為空。這個錯誤在這裡單獨看來似乎很容易發現,但在實務中,這樣的程式碼總是會溜走,即使是像 Flutter 儲存庫中使用的嚴格程式碼審查流程也是如此。使用空安全,靜態分析立即捕獲此問題:
那是一個相當簡單的錯誤。在我們在 Google 內部程式碼中早期使用空安全的過程中,我們已經看到更多複雜的錯誤被捕獲,然後透過空安全解決。以下是一些範例: