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

如何通过Flutter Flavors自动配置--dart-define变量?

解决Flutter根据Flavor自动注入dart-define变量的方案

Android 端(Gradle配置)

直接在android/app/build.gradle中关联Flavor与dart-define变量,无需手动在命令行输入参数:

  1. 先定义Flavor维度(如果还没配置):
android {
    flavorDimensions "environment"
    productFlavors {
        prod {
            dimension "environment"
            // 可添加其他Flavor专属配置,比如applicationIdSuffix ".prod"
        }
        dev {
            dimension "environment"
        }
    }
}
  1. 为每个Flavor绑定对应的dart-define变量:
    在android/app/build.gradle的applicationVariants中添加逻辑:
android {
    // 上面的Flavor配置...

    applicationVariants.all { variant ->
        def flavorName = variant.flavorName
        if (flavorName == "prod") {
            variant.dartDefines.addAll([
                "BASE_URL=https://example-prod.com/",
                "API_PATH=/api/v2/",
                "OTHERVAR=blablabla",
                "YETANOTHERVAR=blablablabla"
            ])
        } else if (flavorName == "dev") {
            variant.dartDefines.addAll([
                "BASE_URL=https://example-dev.com/",
                "API_PATH=/api/v1/",
                "OTHERVAR=devblabla",
                "YETANOTHERVAR=devblablablabla"
            ])
        }
    }
}

配置完成后,执行flutter build apk --flavor=prod,Gradle会自动将对应变量传递给Flutter。

iOS 端(xcconfig配置)

通过xcconfig文件为每个Flavor绑定dart-define变量,配合Xcode配置实现自动注入:

  1. 创建Flavor专属xcconfig文件:
    在ios目录下新建Flavors文件夹,创建Prod.xcconfig和Dev.xcconfig:
  • Prod.xcconfig:
// Prod环境dart-define变量
DART_DEFINES = BASE_URL=https://example-prod.com/,API_PATH=/api/v2/,OTHERVAR=blablabla,YETANOTHERVAR=blablablabla
// 可添加其他Flavor配置,比如APP_ICON = AppIconProd
  • Dev.xcconfig:
// Dev环境dart-define变量
DART_DEFINES = BASE_URL=https://example-dev.com/,API_PATH=/api/v1/,OTHERVAR=devblabla,YETANOTHERVAR=devblablablabla
// 可添加其他Flavor配置,比如APP_ICON = AppIconDev
  1. 在Podfile中关联Flavor与xcconfig:
    修改ios/Podfile的post_install块:
post_install do |installer|
  installer.pods_project.targets.each do |target|
    flutter_additional_ios_build_settings(target)
  end

  # 绑定Flavor与xcconfig文件
  project = installer.pods_project
  project.targets.each do |target|
    next unless target.name == 'Runner'
    target.build_configurations.each do |config|
      case config.name
      when 'Prod'
        config.base_configuration_reference = project.files.find { |f| f.path == 'Flavors/Prod.xcconfig' }
      when 'Dev'
        config.base_configuration_reference = project.files.find { |f| f.path == 'Flavors/Dev.xcconfig' }
      end
    end
  end
end
  1. Xcode中配置Build Configuration:
    打开Xcode -> 选择Runner项目 -> 切换到Info标签 -> Configurations,将Prod对应的Debug/Release配置关联到Flavors/Prod.xcconfig,Dev同理。

之后执行flutter build ipa --flavor=prod,Xcode会自动读取xcconfig中的变量传递给Flutter。

跨平台统一脚本方案(Shell/Makefile)

如果需要跨平台统一管理,可编写Shell脚本(Linux/macOS)或批处理脚本(Windows),根据Flavor自动拼接参数:

示例build.sh(macOS/Linux):

#!/bin/bash

if [ -z "$1" ]; then
    echo "请指定Flavor,例如: ./build.sh prod"
    exit 1
fi

FLAVOR=$1

case $FLAVOR in
    prod)
        DEFINE_PARAMS="--dart-define BASE_URL=https://example-prod.com/ --dart-define API_PATH=/api/v2/ --dart-define OTHERVAR=blablabla --dart-define YETANOTHERVAR=blablablabla"
        ;;
    dev)
        DEFINE_PARAMS="--dart-define BASE_URL=https://example-dev.com/ --dart-define API_PATH=/api/v1/ --dart-define OTHERVAR=devblabla --dart-define YETANOTHERVAR=devblablablabla"
        ;;
    *)
        echo "不支持的Flavor: $FLAVOR"
        exit 1
        ;;
esac

flutter build ipa --flavor=$FLAVOR $DEFINE_PARAMS

使用时赋予脚本执行权限:chmod +x build.sh,然后执行./build.sh prod即可。

验证方法

在Flutter代码中通过String.fromEnvironment("BASE_URL")获取变量,构建后通过调试或打印确认值是否正确对应当前Flavor。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 18:40:38