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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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博客 高频顺序参考网站&…