Dart → `.exe`:Flutter 桌面與純命令行雙軌編譯完全指南

Dart → .exe:Flutter 桌面與純命令行雙軌編譯完全指南

關鍵詞:Dart、Flutter、Windows、可執行文件、桌面端、CLI、交叉編譯

1. 前言

很多開發者以為 Dart 只能跑在 AOT 移動端或 Web 端,其實 官方工具鏈早已支持一鍵輸出 Windows 原生 .exe
根據有無 UI,可分為兩條路線:

路線產物典型場景本文定位
Flutter 桌面帶 UI 的 .exe本地工具、管理后臺步驟 + 踩坑
純 Dart CLI單文件 .exe數據處理、自動化腳本進階優化

2. 路線 A:Flutter 桌面應用 → .exe

2.1 環境 checklist

  1. Flutter SDK ≥ 3.19(穩定版)
  2. Visual Studio 2022 “使用 C++ 的桌面開發” 工作負載
  3. PowerShell 管理員權限運行一次:
flutter doctor --windows

出現 ? Visual Studio 即可。

2.2 開啟 Windows 支持

flutter config --enable-windows-desktop

執行后項目根目錄自動生成 windows/ 文件夾。

2.3 編譯命令

模式命令產物路徑特點
調試flutter build windows --debugbuild/windows/x64/debug/runner/Runner.exe含符號、幾十 MB、可斷點
發布flutter build windows --releasebuild/windows/x64/release/runner/Runner.exe優化體積、無符號、可分發

2.4 分發注意

  1. 不要只拷 .exe
    同級 *.dlldata/ 必須一起打包,zip 發給用戶。
  2. 改圖標/版本 → 編輯 windows/runner/Runner.rc
    IDI_APP_ICON ICON "resources\\my_icon.ico"
    
  3. 需要管理員權限 → 在 Runner.rc
    requestedExecutionLevel level="requireAdministrator"
    

3. 路線 B:純 Dart CLI → 單文件 .exe

3.1 環境

僅安裝 Dart SDK 即可(無需 Flutter)。
https://dart.dev/get-dart

3.2 示例腳本

bin/data_processor.dart

import 'dart:io';void main(List<String> args) {if (args.isEmpty) {stderr.writeln('用法: data_processor.exe <file>');exitCode = 1;return;}final file = File(args.first);print('行數: ${file.readAsLinesSync().length}');
}

3.3 一鍵編譯

dart compile exe bin/data_processor.dart -o bin/data_processor.exe

產物:單文件 bin/data_processor.exe(5-10 MB),雙擊或命令行均可執行。

3.4 體積優化 & 交叉編譯

需求命令
再小一點dart compile exe --no-snapshot
Linux → Windowsdart compile exe --target-os windows (需 mingw-w64)

4. 兩種路線對比速覽

維度Flutter 桌面 .exe純 Dart CLI .exe
依賴多 DLL 必須同目錄單文件,0 依賴
體積10-50 MB(含 UI 引擎)5-15 MB(僅運行時)
入口main() + Widgetmain() + 命令行參數
編譯依賴Flutter + VS 構建工具僅 Dart SDK
典型場景圖形化工具、本地后臺腳本、批量處理、安裝器

5. 最佳實踐小結

  1. 先選場景再選路線 → 有 UI 直接 Flutter,無 UI 直接 dart compile exe
  2. Flutter 發布切記整包壓縮;CI 里加一步 zip -r windows.zip build/windows/x64/release/runner/*
  3. CLI 工具發布到 GitHub Releases 時,同時提供 data_processor.exedata_processor-macos 等多平臺單文件,體驗極佳。
  4. 規則納入版本控制
    .cursorrules 里加一條:
    - 所有 Dart CLI 必須提供 `dart compile exe` 產物
    - Flutter 桌面禁止單獨上傳 Runner.exe
    

6. 一鍵模板倉庫

GitHub 模板已備好:
https://github.com/yourname/dart-to-exe-template
含 Flutter 桌面 + CLI 雙示例,Actions 自動 Release,拿去即用。


🎉 現在就把你的 Dart 代碼編譯成 .exe 發給你的 Windows 小伙伴吧!如果本文幫到你,歡迎點個 Star 并分享。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/98823.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/98823.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/98823.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

互聯網接入網中PPPoE和PPP協議

<摘要> PPPoE和PPP是寬帶接入網絡中至關重要的協議組合&#xff0c;其中PPP提供通用的點對點鏈路層解決方案&#xff0c;而PPPoE則是在以太網架構上擴展PPP應用的技術橋梁。本文從技術演進視角系統解析了兩者的內在關聯與本質區別&#xff1a;PPP作為成熟鏈路層協議&…

詳細解析SparkStreaming和Kafka集成的兩種方式的區別和優劣

spark streaming是基于微批處理的流式計算引擎&#xff0c;通常是利用spark core或者spark core與spark sql一起來處理數據。在企業實時處理架構中&#xff0c;通常將spark streaming和kafka集成作為整個大數據處理架構的核心環節之一。 針對不同的spark、kafka版本&#xff0…

Kite Compositor for Mac v2.1.2 安裝教程|DMG文件安裝步驟(Mac用戶必看)

Kite Compositor? 是一款專為 ?macOS? 設計的 ?輕量級界面設計 & 動畫制作工具&#xff0c;它可以讓你像拼圖一樣直觀地 ?創建、編輯和預覽用戶界面&#xff08;UI&#xff09;以及動畫效果。 一、下載文件 首先&#xff0c;你得先把這個 ?Kite Compositor for Mac …

【逆向】Android程序靜態+動態分析——去殼

對提供的 CrackmeTest.apk 進行逆向分析&#xff0c;程序含有反調試機制&#xff08;加殼&#xff09;&#xff0c;通過靜態補丁反反調試&#xff08;去殼&#xff09;&#xff0c;再動態調試獲取其中密碼。 目錄 環境 基礎 實驗內容 靜態分析 動態分析 反反調試 再動態…

Rust 開發環境安裝與 crates.io 國內源配置(Windows / macOS / Linux 全流程)

Rust 這幾年在系統編程、WebAssembly、區塊鏈、后端服務領域越來越火&#xff0c;很多開發者都在嘗試用它做一些新項目。 但是國內安裝 Rust 開發環境時&#xff0c;經常遇到 安裝慢、依賴拉不下來、crates.io 超時 等問題。本文結合個人踩坑經驗&#xff0c;整理了一份 跨平臺…

Nginx SSL/TLS 配置

Nginx SSL/TLS 配置指南&#xff1a;從入門到安全強化前言一、環境準備&#xff1a;Nginx安裝配置1.1. **EPEL倉庫配置**&#xff1a;1.2. **Nginx安裝**&#xff1a;1.3. **服務啟停管理**&#xff1a;1.4. **服務狀態驗證**&#xff1a;二、SSL/TLS證書獲取方案方案A&#xf…

Java ReentrantLock和synchronized的相同點與區別

1. 核心概念與定位synchronized&#xff1a;Java 內置的關鍵字&#xff0c;屬于 JVM 層面的隱式鎖。通過在方法或代碼塊上聲明&#xff0c;自動實現鎖的獲取與釋放&#xff0c;無需手動操作。設計目標是提供簡單易用的基礎同步能力&#xff0c;適合大多數常規同步場景。Reentra…

【npm】npm 包更新工具 npm-check-updates (ncu)

npm 包太多了&#xff0c;一個項目有那么多依賴包&#xff0c;它們的升級管理需要一個工具&#xff1a;npm-check-updates&#xff1a; 安裝&#xff1a; npm install -g npm-check-updates安裝之后&#xff0c;就可以使用它的命令&#xff1a;ncu 查看哪些包可以升級&#xff…

go資深之路筆記(一) Context

一、 Context 的正確使用與底層原理 1.結構體 type Context interface {// Deadline 返回此 Context 被取消的時間點。// 如果未設置截止時間&#xff0c;ok 為 false。Deadline() (deadline time.Time, ok bool)// Done 返回一個 channel。當 Context 被取消或超時后&#xff…

VS2022 + Qt5.9 中文亂碼/項目設置utf-8編碼

&#x1f6e0;? 解決QT5.9 VS2022中文亂碼的全面方案 &#x1f4c1; 1. 檢查文件編碼與編譯器設置 確保源文件是 帶BOM的UTF-8 編碼對MSVC編譯器很重要。VS2022默認可能使用本地編碼&#xff08;如GB2312&#xff09;解析源文件&#xff0c;即使文件以UTF-8保存。 查看和設置…

數據庫--MySQL數據管理

數據庫–MySQL數據管理 文章目錄數據庫--MySQL數據管理1.外鍵管理2.數據庫數據管理3.DML語言3.1添加數據3.2修改數據3.3刪除數據4.練習1.外鍵管理 外鍵概念 如果公共關鍵字在一個關系中是主關鍵字&#xff0c;那么這個公共關鍵字被稱為另一個關系的外鍵。由此可見&#xff0c;…

【C++練習】13.C++輸出九九乘法表的方法詳解

目錄 C++輸出九九乘法表的方法詳解 方法1:雙重for循環(最基礎) 思考: 代碼分析: 特點: 方法2:使用while循環 思考: 代碼分析: 特點: 方法3:使用遞歸實現 思考: 代碼分析: 特點: 方法4:格式化輸出(對齊美觀) 思考: 代碼分析: 特點: 方法5:使用函數封裝 思考…

MVC及其衍生

MVC 把軟件分成模型&#xff08;Model&#xff09;、視圖&#xff08;View&#xff09;、控制器&#xff08;Controller&#xff09;三個基本部分。 事實上對應著 Controller——輸入 用戶交互&#xff0c;將輸入處理成Controller能處理的形式 Model——處理 描述狀態、邏輯規律…

微碩WINSOK MOS管WSF3089,賦能汽車轉向系統安全升級

隨著汽車電子化程度不斷提高&#xff0c;轉向系統對高效功率器件的需求日益增長。微碩WINSOK推出的N溝道Trench MOS管WSF3089&#xff0c;以30 V/72 A大電流、4.5 mΩ超低導通電阻和TO-252-2L緊湊封裝&#xff0c;為EPS&#xff08;電動助力轉向&#xff09;電機驅動、電源管理…

淘寶拍立淘接口的接入與應用||item_search_img-按圖搜索淘寶商品(拍立淘)

淘寶拍立淘接口的接入與應用如下&#xff1a;接入流程注冊與認證&#xff1a;開發者賬號注冊&#xff1a;訪問淘寶開放平臺&#xff0c;進行開發者賬號注冊。創建應用&#xff1a;在控制臺創建新應用&#xff0c;獲取 App Key 和 App Secret&#xff0c;這是接口調用的憑證。申…

Python學習-day8 元組tuple

元組&#xff08;Tuple&#xff09;是Python中一種不可變的序列類型&#xff0c;用于存儲多個有序元素。與列表&#xff08;List&#xff09;類似&#xff0c;但元組一旦創建后不能修改&#xff08;不可添加、刪除或修改元素&#xff09;&#xff0c;這使得它在安全性、性能優化…

大數據畢業設計選題推薦-基于大數據的國家醫用消耗選品采集數據可視化分析系統-Hadoop-Spark-數據可視化-BigData

?作者主頁&#xff1a;IT畢設夢工廠? 個人簡介&#xff1a;曾從事計算機專業培訓教學&#xff0c;擅長Java、Python、PHP、.NET、Node.js、GO、微信小程序、安卓Android等項目實戰。接項目定制開發、代碼講解、答辯教學、文檔編寫、降重等。 ?文末獲取源碼? 精彩專欄推薦?…

二次學習C語言補充2

文章目錄表棧、隊列、二叉樹一、二叉樹二、表棧三、隊列鏈表一、單向鏈表二、循環鏈表、雙向鏈表和雙向循環鏈表預處理一、預處理二、宏定義文件文件操作補充本篇文章是對二次學習C語言12——文件操作 二次學習C語言14——預處理及模塊化 二次學習C語言15——鏈表 二次學習C語言…

2.9Vue創建項目(組件)的補充

1.再創建和引入vue的選擇2.VsCode插件 安裝Vue自己搜索最新的3.style自己的作用域在一個組件中引入另一個文件的子組件&#xff0c;給當前組件設置樣式&#xff0c;那么子組件的樣式也會改變的。為了解決這個問題 我們在自己的style中設置一個屬性4.另一種創建vue 的方式(主流…

算法高頻題

刷題&#xff1a;LeetCode&#xff08;Top 100-150題&#xff0c;至少刷兩遍&#xff09;。重點&#xff1a;鏈表、樹、二分查找、動態規劃、回溯、棧/隊列。 每一個題型&#xff0c;前10個高頻題 算法思考框架參考&#xff1a;算法題思維框架-CSDN博客 高頻順序參考網站&…