Create flavor in Flutter.
- Open android/app/build.gradle, input code below buildTypes:
flavorDimensions "flavors"
productFlavors {
dev {
dimension "flavors"
applicationIdSuffix ".dev"
versionNameSuffix "-dev"
}
stag {
dimension "flavors"
applicationIdSuffix ".stag"
versionNameSuffix "-stag"
}
prod {
dimension "flavors"
}
- Create Dev.xcconfig, Prod.xcconfig, Staging.xcconfig. All these files will inherit from Generated.xcconfig
#include "Generated.xcconfig"
FLUTTER_TARGET=lib/main_dev.dart
Each file will point to each target. Ex: dev -> main_dev.dart prod -> main_prod.dart ...
- Create configurations for each env:
Debug: -dev, -stag, -prod Profile: -dev, -stag, -prod Release: -dev, -stag, -prod
- Create new scheme for each env: dev, stag, prod.
Note:
Name of schemes and configuration must be same. Flutter will auto select: Debug-dev, Debug-stag... from configuration when you run command: flutter run --flavor dev -t lib/main_dev.dart
- Edit scheme, change build configuration -> -dev, -stag, -prod.
- Open buid settings, Search "Product Bundle Identifier", edit bundle id for each env:
- Create flavor_config.dart file:
import 'package:flutter/material.dart';
enum Flavor {
dev,
staging,
production
}
class FlavorValues {
FlavorValues({@required this.baseUrl});
final String baseUrl;
}
class FlavorConfig {
final Flavor flavor;
final FlavorValues values;
static FlavorConfig instance;
factory FlavorConfig({
@required Flavor flavor,
@required FlavorValues values
}) {
instance ??= FlavorConfig._internal(flavor, values);
return instance;
}
FlavorConfig._internal(this.flavor, this.values);
}
- Create 3 file: main_dev.dart, main_stag.dart, main_prod.dart.
void main() {
FlavorConfig(
flavor: Flavor.dev,
values: FlavorValues(baseUrl: 'https://dev.abc.com/api')
);
runApp(App());
}
- Run project with following command:
flutter run --flavor dev -t lib/main_dev.dart