跳至主要內容

使用 Flutter 建立 Windows 應用程式

本頁討論使用 Flutter 建立 Windows 應用程式時的獨特考量,包括殼層整合以及透過 Windows 上的 Microsoft Store 發佈 Windows 應用程式。

與 Windows 整合

#

Windows 程式設計介面結合了傳統的 Win32 API、COM 介面以及更現代的 Windows Runtime 程式庫。由於這些都提供了基於 C 的 ABI,您可以使用 Dart 的外部函式介面程式庫 (dart:ffi) 呼叫作業系統提供的服務。FFI 旨在讓 Dart 程式能夠有效率地呼叫 C 程式庫。它為 Flutter 應用程式提供了使用 malloccalloc 配置原生記憶體的能力,支援指標、結構和回呼,以及 ABI 類型(如 longsize_t)。

如需更多關於從 Flutter 呼叫 C 程式庫的資訊,請參閱使用 dart:ffi 進行 C 互通

實際上,雖然以這種方式從 Dart 呼叫基本的 Win32 API 相對簡單,但使用抽象 COM 程式設計模型複雜性的封裝程式庫會更容易。「win32 套件」提供了一個程式庫,可以使用 Microsoft 提供的中繼資料來存取數千個常見的 Windows API,以確保一致性和正確性。該套件還包括各種常見使用案例的範例,例如 WMI、磁碟管理、殼層整合和系統對話框。

許多其他套件都以此為基礎建構,為Windows 登錄遊戲手把支援生物辨識儲存工作列整合序列埠存取提供慣用的 Dart 存取,僅舉幾例。

更廣泛地說,許多其他套件支援 Windows,包括常見的套件,例如url_launchershared_preferencesfile_selectorpath_provider

支援 Windows UI 指南

#

雖然您可以使用您選擇的任何視覺樣式或主題,包括 Material,但有些應用程式作者可能希望建構一個符合 Microsoft Fluent 設計系統慣例的應用程式。「fluent_ui 套件」是一個Flutter 最愛,它為現代 Windows 應用程式中常見的視覺效果和常用控制項提供支援,包括導覽視圖、內容對話框、浮出視窗、日期選擇器和樹狀檢視小工具。

此外,Microsoft 還提供了fluentui_system_icons,此套件可讓您輕鬆存取數千個 Fluent 圖示,以便在您的 Flutter 應用程式中使用。

最後,「bitsdojo_window 套件」為「擁有者繪製」標題列提供支援,讓您可以將標準 Windows 標題列替換為與應用程式其餘部分相符的自訂標題列。

自訂 Windows 主機應用程式

#

當您建立 Windows 應用程式時,Flutter 會產生一個小型 C++ 應用程式來託管 Flutter。這個「執行器應用程式」負責建立和調整傳統 Win32 視窗的大小、初始化 Flutter 引擎和任何原生外掛程式,並執行 Windows 訊息迴圈(將相關訊息傳遞給 Flutter 以進行進一步處理)。

您當然可以根據您的需求變更此程式碼,包括修改應用程式名稱和圖示,以及設定視窗的初始大小和位置。相關程式碼位於 main.cpp 中,您會在其中找到類似以下的程式碼

cpp
Win32Window::Point origin(10, 10);
Win32Window::Size size(1280, 720);
if (!window.CreateAndShow(L"myapp", origin, size))
{
    return EXIT_FAILURE;
}

myapp 替換為您想要在 Windows 標題列中顯示的標題,並可選擇調整尺寸的大小和視窗座標。

若要變更 Windows 應用程式圖示,請將 windows\runner\resources 目錄中的 app_icon.ico 檔案替換為您偏好的圖示。

可以透過編輯 windows/CMakeLists.txt 中的 BINARY_NAME 變數來變更產生的 Windows 可執行檔名稱。

cmake
cmake_minimum_required(VERSION 3.14)
project(windows_desktop_app LANGUAGES CXX)

# The name of the executable created for the application.
# Change this to change the on-disk name of your application.
set(BINARY_NAME "YourNewApp")

cmake_policy(SET CMP0063 NEW)

當您執行 flutter build windows 時,在 build\windows\runner\Release 目錄中產生的可執行檔將會符合新指定的名稱。

最後,應用程式可執行檔本身的更多屬性可以在 windows\runner 目錄中的 Runner.rc 檔案中找到。您可以在這裡變更版權資訊和嵌入在 Windows 應用程式中的應用程式版本,這些資訊會顯示在 Windows 檔案總管屬性對話方塊中。若要變更版本號碼,請編輯 VERSION_AS_NUMBERVERSION_AS_STRING 屬性;其他資訊可以在 StringFileInfo 區塊中編輯。

使用 Visual Studio 編譯

#

對於大多數應用程式來說,使用 flutter runflutter build 命令讓 Flutter 處理編譯過程就足夠了。如果您要對執行器應用程式進行重大變更,或是將 Flutter 整合到現有的應用程式中,您可能會想要在 Visual Studio 本身中載入或編譯 Flutter 應用程式。

請按照下列步驟操作

  1. 執行 flutter build windows 以建立 build\ 目錄。

  2. 開啟 Windows 執行器的 Visual Studio 方案檔案,該檔案現在可以在 build\windows 目錄中找到,並根據父 Flutter 應用程式命名。

  3. 在方案總管中,您會看到許多專案。在與 Flutter 應用程式同名的專案上按一下滑鼠右鍵,然後選擇 設定為啟動專案

  4. 若要產生必要的相依性,請執行 建置 > 建置方案

    您也可以按 Ctrl + Shift + B

    若要從 Visual Studio 執行 Windows 應用程式,請前往 偵錯 > 開始偵錯

    您也可以按 F5

  5. 使用工具列在偵錯和發行組態之間切換,視情況而定。

發佈 Windows 應用程式

#

您可以使用各種方法來發佈 Windows 應用程式。以下是一些選項

  • 使用工具來建構應用程式的 MSIX 安裝程式(如下一節所述),並透過 Microsoft Windows 應用商店發佈。您不需要為此選項手動建立簽署憑證,因為系統會為您處理。
  • 建構 MSIX 安裝程式並透過您自己的網站發佈。對於此選項,您需要為您的應用程式提供數位簽章,以 .pfx 憑證的形式。
  • 收集所有必要的組件並建立您自己的 zip 檔案。

MSIX 封裝

#

MSIX,新的 Windows 應用程式封裝格式,提供現代化的封裝格式和安裝程式。此格式既可以用於將應用程式發佈到 Windows 上的 Microsoft Store,也可以直接發佈應用程式安裝程式。

為 Flutter 專案建立 MSIX 發佈的最簡單方法是使用 msix pub 套件。如需從 Flutter 桌面應用程式使用 msix 套件的範例,請參閱桌面照片搜尋範例。

建立用於本機測試的自我簽署 .pfx 憑證

#

若要使用 MSIX 安裝程式進行私人部署和測試,您需要以 .pfx 憑證的形式為您的應用程式提供數位簽章。

若要透過 Windows Store 進行部署,則不需要產生 .pfx 憑證。Windows Store 會處理透過其商店發佈的應用程式的憑證建立和管理。

若要透過您自行託管的網站發佈您的應用程式,則需要由 Windows 已知的憑證授權單位簽署的憑證。

請使用以下指示產生自我簽署的 .pfx 憑證。

  1. 如果您尚未下載,請下載 OpenSSL 工具組以產生您的憑證。
  2. 前往您安裝 OpenSSL 的位置,例如,C:\Program Files\OpenSSL-Win64\bin
  3. 設定環境變數,以便您可以從任何位置存取 OpenSSL
    "C:\Program Files\OpenSSL-Win64\bin"
  4. 如下所示產生私密金鑰
    openssl genrsa -out mykeyname.key 2048
  5. 使用私密金鑰產生憑證簽署要求 (CSR) 檔案
    openssl req -new -key mykeyname.key -out mycsrname.csr
  6. 使用私密金鑰和 CSR 檔案產生簽署的憑證 (CRT) 檔案
    openssl x509 -in mycsrname.csr -out mycrtname.crt -req -signkey mykeyname.key -days 10000
  7. 使用私密金鑰和 CRT 檔案產生 .pfx 檔案
    openssl pkcs12 -export -out CERTIFICATE.pfx -inkey mykeyname.key -in mycrtname.crt
  8. 在安裝應用程式之前,請先在 憑證存放區 中以 信任的根憑證授權單位 的身分在本機電腦上安裝 .pfx 憑證。

為 Windows 建立您自己的 zip 檔案

#

Flutter 可執行檔 .exe 可以在您專案的 build\windows\runner\<建置模式>\ 下找到。除了該可執行檔之外,您還需要下列項目

  • 來自相同目錄

    • 所有 .dll 檔案
    • data 目錄
  • Visual C++ 可轉散發套件。您可以使用 Microsoft 網站上部署範例逐步解說中顯示的任何方法,以確保最終使用者擁有 C++ 可轉散發套件。如果您使用 application-local 選項,則需要複製

    • msvcp140.dll
    • vcruntime140.dll
    • vcruntime140_1.dll

    將 DLL 檔案放置在可執行檔和其他 DLL 的旁邊的目錄中,並將它們捆綁在 zip 檔案中。產生的結構看起來像這樣

    Release
    │   flutter_windows.dll
    │   msvcp140.dll
    │   my_app.exe
    │   vcruntime140.dll
    │   vcruntime140_1.dll
    
    └───data
    │   │   app.so
    │   │   icudtl.dat
    
    ...

此時,如果需要,將此資料夾新增至 Windows 安裝程式(例如 Inno Setup、WiX 等)相對簡單。

其他資源

#

若要了解如何使用 Inno Setup 建立 .exe,以發佈 Windows 的 Flutter 桌面應用程式,請查看逐步Windows 封裝指南