You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter Windows应用如何配置dev与prod两种build flavor?

Flutter Windows 端 dev/prod 构建变体配置步骤

直接按下面的步骤操作即可,不需要额外安装第三方插件。

1. Dart层入口配置

先在lib目录下创建两个环境对应的入口文件,和默认的main.dart做隔离:

  • 开发环境入口:lib/main_dev.dart
  • 生产环境入口:lib/main_prod.dart

两个入口各自传入对应环境的配置参数,dev环境示例代码如下:

import 'main.dart';

void main() {
  runApp(const MyApp(
    env: 'dev',
    apiBase: 'https://test-api.xxx.com',
    enableLog: true,
  ));
}

prod入口同理,替换成生产环境的接口地址、关闭调试开关即可。如果需要在代码里全局获取环境参数,也可以不用在入口传参,直接用const String.fromEnvironment('FLAVOR')读取构建时传入的自定义参数。

2. (可选)Windows原生层差异化配置

如果需要不同环境的exe名称、图标、应用ID做区分,就修改Windows目录下的CMakeLists.txt,把原来固定写死的BINARY_NAME配置替换成下面的逻辑:

# 读取构建时传入的flavor,默认走dev配置
set(FLAVOR $ENV{FLUTTER_FLAVOR} CACHE STRING "Build flavor")
if(NOT FLAVOR)
  set(FLAVOR "dev")
endif()

# 根据flavor匹配不同的应用名、图标
if(FLAVOR STREQUAL "dev")
  set(BINARY_NAME "myapp_dev")
  set(APP_ICON_RESOURCE_WINDOWS "${CMAKE_CURRENT_SOURCE_DIR}/runner/resources/icon_dev.ico")
elseif(FLAVOR STREQUAL "prod")
  set(BINARY_NAME "myapp_prod")
  set(APP_ICON_RESOURCE_WINDOWS "${CMAKE_CURRENT_SOURCE_DIR}/runner/resources/icon_prod.ico")
endif()

提前把两个环境对应的ico图标放到windows/runner/resources目录下即可,不需要区分原生配置的话直接跳过这一步。

3. 构建/运行命令

日常调试和打包直接用对应命令即可,不需要修改其他配置:

  • 调试启动dev环境:flutter run -d windows -t lib/main_dev.dart --dart-define=FLAVOR=dev
  • 调试启动prod环境:flutter run -d windows -t lib/main_prod.dart --dart-define=FLAVOR=prod
  • 打包dev版本可执行文件:flutter build windows -t lib/main_dev.dart --dart-define=FLAVOR=dev
  • 打包prod版本可执行文件:flutter build windows -t lib/main_prod.dart --dart-define=FLAVOR=prod

如果做了第二步的CMake配置,构建前先在终端设置对应的环境变量就行,Windows终端下执行set FLUTTER_FLAVOR=dev或者set FLUTTER_FLAVOR=prod再跑构建命令即可。

注意事项

  • 切换flavor构建前先执行flutter clean清理旧的构建缓存,避免之前的产物残留导致打包异常。
  • 如果有更多自定义参数需要传入,直接追加--dart-define=参数名=参数值即可,Dart侧统一用String.fromEnvironment读取对应值。

内容的提问来源于stack exchange,提问作者Jonty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 23:06:27