【文章內容使用 Gemini 1.5 Pro 自動翻譯產生】
Google 暑期程式碼計畫 2020 成果
Google 暑期程式碼計畫 (GSoC) 是一個全球性的計畫,旨在讓學生開發者參與開放原始碼軟體開發。Google 贊助學生在暑假期間與一個指導性的開放原始碼組織合作,進行為期 3 個月的程式設計專案。
在 二月,我們很興奮地宣布 Dart 團隊將成為 2020 年 GSoC 的指導組織。我們最終 指導了 5 個專案,這些專案是從來自世界各地學生的 170 多份申請中選出的。今天,我們很高興與大家分享我們的成果,這些成果將由參與專案的學生們來描述。
使用 package:ffigen 為 Dart-C 互通性產生 dart:ffi 繫結
Prerak Mann
package:ffigen 是一個 FFI 產生器,它透過從 C 標頭檔 (.h) 產生 Dart 繫結,大大減少了使用 dart:ffi 的工作量。
為了理解這個工具的需求,請考慮 LibClang(Clang 的 C 介面)。LibClang 的 API 大約有 8,000 行程式碼 (LOC)。如果您要手動為 LibClang 編寫 Dart 繫結,您將需要將近 4,500 LOC。使用 package:ffigen,您只需傳入一個小於 20 LOC 的 小型 YAML 設定檔,然後就可以產生繫結。
您可以控制要產生的 C 函式,並使用簡單的正規表示式來重新命名巨集、列舉和個別的結構成員。您也可以 產生 巢狀在結構中的陣列成員(dart:ffi 中尚不完全支援)。
請查看 github.com/dart-lang/ffigen 以取得完整的 設定、常見問題、範例 等等。
使用新的 Flutter 範例學習測試
Abdullah Deshmukh
您已經使用 Flutter 一段時間了,但仍然不知道如何測試 Flutter 應用程式嗎?那麼您可能會對我們建立的範例感興趣,該範例展示了測試 Flutter 應用程式的最佳實踐。您將能夠快速輕鬆地學習在 Flutter 中進行測試。
該 範例 展示了不同類型的測試,包括:
- 單元測試
- Widget 測試
- 整合測試
- 效能測試
- 狀態管理測試
作為額外福利,我們還建立了一個關於如何測試 Flutter 應用程式的程式碼實驗室。您可以在文章 使用新的 Flutter 範例學習測試 中查看專案下完成工作的詳細報告。
使用者可擴展的翻譯檔案格式
Jaime Blasco
intl_translation 套件僅支援 ARB 檔案格式,該格式在 Dart 之外並未廣泛使用。在 GSoC 2020 期間建立的 intl_translation_format 套件建基於 intl_translation,並添加了一個 TranslationFormat 類別,可以支援各種不同的格式。開發人員可以在自己的套件中添加對其他格式的支援,並且只需幾行程式碼即可建立與現有工具整合的提取和產生命令列工具。有了這些,其他格式(即使是專有格式)的現有翻譯可以輕鬆匯入到 Dart 專案中,並且源自 Dart 程式碼的新訊息可以整合到現有的翻譯工具和工作流程中。
作為這些功能的展示,新的套件包含對多種格式的支援。除了 ARB 之外,它還支援 XLIFF v1.2 (iOS)、XLIFF v2.0 和 帶有 ICU 訊息的 JSON。實驗性函式庫 展示了如何實作對其他格式的支援,甚至是可以在執行階段更新的翻譯。
行動應用程式和聯合 Plugin 中的平台通道
Ayush Bherwani
在研究了平台通道(用於在 Dart 與原生程式碼(如 Swift 或 Kotlin)之間來回傳送訊息的 Flutter API)之後,我們決定使用兩個不同的範例來介紹這個主題。一個是 簡單的 Android 和 iOS 範例,而另一個是 聯合 Plugin,能夠使用主頻道為 Web 和桌面建構。在這兩個範例之間,程式碼庫不僅展示了平台通道和用於移動資料的編解碼器的詳細資訊,還展示了聯合 Plugin 的 API 以及在 Web 和桌面(Windows 和 Linux)API 上調用原生程式碼的技術。
如果您是一位正在尋找建構 Plugin 或僅存取平台 API 的開發人員,這些範例是開始學習的好地方。有關此專案的更多資訊,請參閱文章 平台通道範例。
編寫 package:yaml_edit 以啟用 pub add <package>
Garett Tok Ern Liang
Dart 專案在 pubspec.yaml 檔案中指定套件依賴項。YAML 很好,因為它允許我們編寫註釋,但是以程式設計方式修改 YAML 是一個挑戰。
為了應對這一挑戰,我們編寫了 package:yaml_edit 以輕鬆執行上下文感知的字串操作,從而保留格式和註釋。該套件的測試套件包含超過 40,000 個測試,我們認為我們有一個非常好的解決方案。試用它並 提交錯誤!
使用 package:yaml_edit,我們在 pub(Dart 和 Flutter 的套件管理工具)中添加了一個新的子命令 pub add <package>
。pub add
會自動解析目標套件的最新相容版本,並將其添加到使用者的 pubspec.yaml 中。具體來說,pub add <package>
自動化了以下所有操作的繁瑣過程:
- 訪問 https://pub.dev/packages/
- 選擇要添加到套件的版本
- 修改 pubspec.yaml
- 執行 pub get
- 根據需要重複步驟 2-4 多次,以獲得與其他依賴項相容的版本
一個類似的移除依賴項的命令 - pub remove <package>
- 也正在開發中。請密切關注即將在 pub 中推出的這兩個命令!
非常感謝所有向 Dart 申請 Google 暑期程式碼計畫 2020 的人,以及今年完成專案的學生,以及每週花時間讓這個夏天成為一個很棒的程式碼夏天的導師。我們希望在整個 Dart 生態系統中再次見到你們這些學生作為貢獻者。
Google 暑期程式碼計畫 2020 成果 最初發佈在 Dart 上的 Medium,人們在那裡透過突出顯示和回應這個故事來繼續討論。