該應用程式匯入了 Foundation.h,其中包含 Apple Foundation 函式庫的 API 標頭檔。接下來,在 main 方法內,它從 NSTimeZone 類別調用 systemTimeZone 方法。此方法返回一個 NSTimeZone 實例,其中包含設備上選定的時區。最後,應用程式向控制台輸出兩行,其中包含時區的名稱和以小時為單位的 UTC 偏移量。
final systemTimeZonePointer = dylib.lookupFunction<SystemTimeZoneC, SystemTimeZoneDart>('NSTimeZone_systemTimeZone'); final timezone = systemTimeZonePointer();
final secondsFromGMTPointer = dylib.lookupFunction<SecondsFromGMTC, SecondsFromGMTDart>('NSTimeZone_secondsFromGMT'); final secondsFromGMT = secondsFromGMTPointer(timezone); final hoursFromGMT = secondsFromGMT / 3600;
final getNamePointer = dylib.lookupFunction<GetNameC, GetNameDart>('NSTimeZone_name'); final name = getNamePointer(timezone).toDartString();
final url = Uri.parse('https://example.com/whatsit/create'); final response = await client.get(url); print('Response status: ${response.statusCode}'); print('Response body: ${response.body}');
當您無法使用通用用戶端介面時,您可以使用 cupertino_http 函式庫直接調用 Apple 的網路 API:
1 2 3 4 5 6 7 8
final session = cupertino.cupertinoHttp.NSURLSession.sharedSession();
// Now you can use session to perform network requests such as // dataTaskWithRequest, dataTaskWithURL, etc // For example to get data from a URL: final url = cupertino.cupertinoHttp.NSURL(string: 'www.google.com')!; // Now use the URL to get data or perform any other NSURLSession task.
多平台應用程式中的平台特定網路
當我們設計此功能時,目標仍然是盡可能保持應用程式的多平台性。為了實現此目標,我們保留了用於基本 http 操作的通用多平台 http API 集,並允許為每個平台設定要使用的網路函式庫。您可以透過使用 package:http Client API 來最大限度地減少您需要編寫的平台特定程式碼的數量。此 API 可以為每個平台進行設定,但以平台獨立的方式使用。
Dart 2.18 提供了對兩個支援 package:httpClient API 的平台特定 http 函式庫的實驗性支援:
其次,大多數應用程式開發人員都在完全遷移到空安全的程式碼庫中工作。這一點至關重要。Dart 的完整 可靠空安全 在您遷移所有程式碼和所有依賴項(包括傳遞依賴項)之前不會生效。我們正在透過 flutter run 命令的遙測數據來追蹤這一點。
下圖顯示了 flutter run 的不可靠與可靠空安全執行。在引入空安全之前,兩者都沒有。隨後是不可靠空安全的快速增長。隨著應用程式開始遷移到空安全,開發人員進行了部分遷移。有些部分仍然需要遷移。隨著時間的推移,我們看到可靠空安全會話的健康增長。到上個月底,可靠空安全會話的數量是不可靠空安全會話的四倍。我們希望在接下來的幾個季度中,我們將看到可靠空安全方法達到 100%!
FCGT 包含一些在開發您自己的遊戲時很有用的服務整合:Apple Game Center、Google Play Games 服務、Google 行動廣告 SDK 和應用程式內購套件。這些更進階的整合最初是被停用的,因為它們需要您(開發人員)在使用它們之前進行一些設定。如果您查看遊戲範本的 main.dart 檔案,並向下捲動到第一個「TODO」,您將看到廣告、遊戲服務和應用程式內購 Plugin 的程式碼,處於休眠狀態,等待啟用。
void _musicOnHandler() { if (_settings!.musicOn.value) { // Music got turned on. if (!_settings!.muted.value) { _resumeMusic(); } } else { // Music got turned off. _stopMusic(); _log.severe("Someone is messing with the music!"); throw Exception(); } }
Web 應用程式套件大小。一位參與者指出了將遊戲擴展到基於網頁的遊戲平台(例如 Facebook Instant Game)的問題。由於 Web 套件大小過大,他們最終選擇了 HTML 渲染後端,而不是速度更快但更大的 Canvas Kit 後端。(P05)
Windows/Steam 支援。多位參與者表達了對嘗試使用他們的遊戲的全新 Windows 支援的濃厚興趣。其中一人提到,Windows 是最需要支持的平台,特別是如果您打算在 Steam 上發佈您的遊戲。(P03)但是,鑑於沒有參與者或我們的團隊成員在 Windows 上測試過遊戲開發或整合 Steam,所以這種情況仍然不明確。
Introducing Flutter 3 was originally published in Flutter on Medium, where people are continuing the conversation by highlighting and responding to this story.
國際文字輸入,包括對使用文字輸入法編輯器 (IME)(例如中文、日語和韓語)的語言的支援,在所有三個桌面平台上都得到完全支援,包括 Sogou 和 Google 日語輸入等第三方輸入法。
所有桌面平台上的無障礙功能
Windows、macOS 和 Linux 的 Flutter 支援無障礙服務,例如螢幕閱讀器、無障礙導航和反色。
macOS 上預設為通用二進制檔案
從 Flutter 3 開始,Flutter macOS 桌面應用程式被建構為通用二進制檔案,原生支援現有的基於 Intel 的 Mac 和 Apple 最新推出的 Apple Silicon 設備。
棄用 Windows 7/8 開發
在此版本中,我們將推薦的 Windows 開發版本提升到 Windows 10。雖然我們沒有阻止在舊版本(Windows 7、Windows 8、Windows 8.1)上進行開發,但這些版本 不再受 Microsoft 支援,而且我們對這些版本的測試有限。雖然我們將繼續為舊版本提供「盡力而為」的支援,但我們鼓勵您升級。
**注意:**我們繼續提供對在 Windows 7 和 Windows 8 上 *運行* 的 Flutter 應用程式的支援;此更改僅影響推薦的開發環境。
行動更新
我們對行動平台的更新包括以下內容:
可折疊手機支援
Flutter 3 版本支援可折疊行動設備。在由 Microsoft 帶頭合作的過程中,新功能和 Widget 讓您可以在可折疊設備上建立動態且令人愉悅的體驗。
Flutter 3 支援 Material Design 3,這是 Material Design 的下一代版本。Flutter 3 為 Material 3 提供了選擇性支援;這包括 Material You 功能,如動態色彩、更新的色彩系統和字體排版、對許多組件的更新,以及 Android 12 中引入的新的視覺效果,如新的觸控漣漪設計和拉伸過捲效果。在 新的將您的 Flutter 應用程式從無聊變成漂亮 程式碼實驗室中嘗試 Material 3 功能。查看 API 文件 以了解如何選擇性使用這些新功能以及哪些組件支援 Material 3。透過 Material 3 總體議題 關注正在進行的工作。