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
相关产品推荐
相关产品推荐

