Simple solution to handle environment variables using `.json` or config in entrypoint file.
MIT License
Simple solution to handle environment variables using .json
or config in entrypoint file.
$ flutter pub add --dev flutter_app_environment
Call before initialize the environment
WidgetsFlutterBinding.ensureInitialized();
Add res/config/
to pubspec.yaml assets. This folder contains json files with environment variables
flutter:
assets:
- res/config/
For EnvironmentType.development use name development.json for configuration file
For EnvironmentType.test use name test.json for configuration file
For EnvironmentType.production use name production.json for configuration file
Create config
@JsonSerializable(createToJson: false)
class EnvironmentConfig {
const EnvironmentConfig({
required this.title,
required this.initialCounter,
});
factory EnvironmentConfig.fromJson(Map<String, dynamic> json) =>
_$EnvironmentConfigFromJson(json);
final String title;
final int initialCounter;
}
Initialize
WidgetsFlutterBinding.ensureInitialized();
await Environment.initFromJson<EnvironmentConfig>(
environmentType: EnvironmentType.development,
fromJson: EnvironmentConfig.fromJson,
);
Use it
home: HomePage(
title: Environment<EnvironmentConfig>.instance().config.title,
),
Create config
@JsonSerializable(createToJson: false)
class EnvironmentConfig {
const EnvironmentConfig({
required this.title,
required this.initialCounter,
});
factory EnvironmentConfig.fromJson(Map<String, dynamic> json) =>
_$EnvironmentConfigFromJson(json);
final String title;
final int initialCounter;
}
Initialize
WidgetsFlutterBinding.ensureInitialized();
Environment.init<EnvironmentConfig>(
environmentType: EnvironmentType.test,
config: const EnvironmentConfig(
title: 'Test evironment title',
initialCounter: 0,
),
);
Use it
home: HomePage(
title: Environment<EnvironmentConfig>.instance().config.title,
),
Create environment type
enum CustomEnvironmentType { dev, stage, prod }
Use method initFromJsonWithCustomType for json config
await Environment.initFromJsonWithCustomType<EnvironmentConfig,
CustomEnvironmentType>(
environmentType: CustomEnvironmentType.stage,
fromJson: EnvironmentConfig.fromJson,
);
Or use method initWithCustomType for entrypoint config
Environment.initWithCustomType<EnvironmentConfig, CustomEnvironmentType>(
environmentType: CustomEnvironmentType.dev,
config: const EnvironmentConfig(
title: 'Test evironment title',
initialCounter: 0,
),
);
Please feel free to fork, improve, make pull requests or fill issues. I'll be glad to fix bugs you encountered or improve the extension.