用途:为 Flutter 项目配置构建 flavor 与环境变量。核心做法是定义 dev、staging、prod 三个 flavor,共用同一个 main.dart 入口,用 --dart-define-from-file 传入各环境的 JSON 配置,不创建 main_dev.dart 等独立入口。
主要能力:在项目根 config/ 目录放置 dev.json、staging.json、prod.json,示例含 FLAVOR、BASE_URL、APP_NAME、ENABLE_LOGGING、ENABLE_CRASHLYTICS。入口通过 String.fromEnvironment('FLAVOR') 读取,AppConfig 单例集中持有 baseUrl、日志开关、Crashlytics 开关、应用名等,全部编译期值用 String.fromEnvironment 或 bool.fromEnvironment 读取,不在 Dart 代码中写各环境分支逻辑。
平台配置:Android 在 android/app/build.gradle 设置 flavorDimensions 与 productFlavors,用 applicationIdSuffix 和 resValue 区分;iOS 为每个 flavor 建 Xcode scheme,用 xcconfig 配置 bundle ID、显示名与签名,并在 ios/Runner.xcodeproj 中把 Flutter flavor 映射到 scheme。使用 Swift Package Manager 时 scheme 会自动映射依赖配置,无需改 Podfile,依赖覆盖需在 Xcode Runner 的 Package Dependencies 中定义。Firebase 建议每个 flavor 用独立项目,把 google-services.json 与 GoogleService-Info.plist 放到对应目录,并用 flutterfire configure --project 分别配置。
使用方式:运行用 flutter run --flavor dev --dart-define-from-file=config/dev.json(staging、prod 同理);发布用 flutter build appbundle 或 flutter build ipa,加 --flavor prod、--dart-define-from-file=config/prod.json 与 --release。
限制与注意:不得在 JSON 中放密钥、API key、签名凭据,应使用 CI 注入的环境变量或 flutter_secure_storage;若 JSON 含环境敏感信息需加入 .gitignore,否则可提交。禁止硬编码环境相关值、禁止提交生产密钥;每位成员应能用单条命令运行任意 flavor;CI/CD 必须显式指定 --flavor 与 --dart-define-from-file。