Flutter App Environment
A simple solution to manage environment variables using .json files or configuration in the entrypoint file.
Links
- See CHANGELOG.md for major/breaking updates.
- Check out the Example for a detailed explanation of all features.
Installation
To install the package, run the following command:
flutter pub add --dev flutter_app_environment
Managing Environment Variables from a .json File
Requirements
Before initializing the environment, ensure the following:
WidgetsFlutterBinding.ensureInitialized();
Add the configuration files path to pubspec.yaml:
flutter:
assets:
- res/config/
- For EnvironmentType.development, use
development.jsonas the configuration file. - For EnvironmentType.test, use
test.jsonas the configuration file. - For EnvironmentType.production, use
production.jsonas the configuration file.
Usage: Three Simple Steps
-
Create the 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 the Environment
WidgetsFlutterBinding.ensureInitialized(); await Environment.initFromJson<EnvironmentConfig>( environmentType: EnvironmentType.development, fromJson: EnvironmentConfig.fromJson, ); -
Use the Config
home: HomePage( title: Environment<EnvironmentConfig>.instance().config.title, ),
Managing Environment Variables from the Entrypoint File
Usage: Three Simple Steps
-
Create the Config (same as the previous example)
-
Initialize the Environment
WidgetsFlutterBinding.ensureInitialized(); Environment.init<EnvironmentConfig>( environmentType: EnvironmentType.test, config: const EnvironmentConfig( title: 'Test environment title', initialCounter: 0, ), ); -
Use the Config
home: HomePage( title: Environment<EnvironmentConfig>.instance().config.title, ),
Managing Environment Variables with Custom Types
-
Create a Custom Environment Type
enum CustomEnvironmentType { dev, stage, prod } -
Initialize with a JSON Config
await Environment.initFromJsonWithCustomType<EnvironmentConfig, CustomEnvironmentType>( environmentType: CustomEnvironmentType.stage, fromJson: EnvironmentConfig.fromJson, ); -
Initialize from the Entrypoint File
Environment.initWithCustomType<EnvironmentConfig, CustomEnvironmentType>( environmentType: CustomEnvironmentType.dev, config: const EnvironmentConfig( title: 'Custom environment title', initialCounter: 0, ), );
Example Project Structure
For a better understanding, here's an example of how your project structure might look when handling environment variables:
your_project/
│
├── res/
│ └── config/
│ ├── development.json
│ ├── test.json
│ └── production.json
│
├── lib/
│ ├── main.dart
│ └── environment_config.dart
│
└── pubspec.yaml
In this example, JSON configuration files are stored in the res/config/ folder and declared in pubspec.yaml. The environment configuration is loaded in main.dart and used throughout the app.
Notes
- Make sure to call
WidgetsFlutterBinding.ensureInitialized()before initializing the environment. - The
EnvironmentConfigclass should match the structure of your.jsonfiles or entrypoint configurations. - You can switch between different environment types depending on your build (development, test, production) or create custom environment types.
Contribute
Feel free to fork, improve, submit pull requests, or report issues. I’ll be happy to fix bugs or enhance the extension based on your feedback.
License
This project is licensed under the MIT License. See the LICENSE file for more details.