Load configuration at runtime from a .env
file which can be used throughout the application.
The twelve-factor app stores config in environment variables (often shortened to env vars or env). Env vars are easy to change between deploys without changing any code... they are a language- and OS-agnostic standard.
This library is a fork of mockturtl/dotenv dart library, initially with slight changes to make it work with flutter.
An environment is the set of variables known to a process (say, PATH
, PORT
, ...).
It is desirable to mimic the production environment during development (testing,
staging, ...) by reading these values from a file.
This library parses that file and merges its values with the built-in
Platform.environment
map.
Create a .env
file in the root of your project with the example content:
FOO=foo
BAR=bar
FOOBAR=$FOO$BAR
ESCAPED_DOLLAR_SIGN='$1000'
Add the .env
file to your assets bundle in pubspec.yaml
assets:
- .env
Optionally add the .env
file as an entry in your .gitignore
if it isn't already
*.env
Load the .env
file in main.dart
import 'package:flutter_dotenv/flutter_dotenv.dart' as DotEnv;
Future main() async {
// NOTE: The filename will default to .env and doesn't need to be defined in this case
await DotEnv.load(fileName: ".env");
//...runapp
}
You can then access variables from .env
throughout the application
import 'package:flutter_dotenv/flutter_dotenv.dart';
env['VAR_NAME'];
Optionally you could map env
after load to a config model to access a config with types.
You can reference variables defined above other within .env
:
FOO=foo
BAR=bar
FOOBAR=$FOO$BAR
You can escape referencing by wrapping the value in single quotes:
ESCAPED_DOLLAR_SIGN='$1000'
You can merge a map into the environment on load:
await DotEnv.load(mergeWith: { "FOO": "foo", "BAR": "bar"});
You can also reference these merged variables within .env
:
FOOBAR=$FOO$BAR
The Platform.environment map can be merged into the env:
// For example using Platform.environment that contains a CLIENT_ID entry
await DotEnv.load(mergeWith: Platform.environment);
print(env["CLIENT_ID"]);
Like other merged entries described above, .env
entries can reference these merged Platform.Environment entries if required:
CLIENT_URL=https://$CLIENT_ID.dev.domain.com
Use the issue tracker for bug reports and feature requests.
Pull requests are welcome.
- mockturtl/dotenv (dart)
- bkeepers/dotenv (ruby)
- motdotla/dotenv (node)
- theskumar/python-dotenv (python)
- joho/godotenv (go)
- slapresta/rust-dotenv (rust)
- chandu/dotenv (c#)
- tpope/lein-dotenv, rentpath/clj-dotenv (clojure)
- mefellows/sbt-dotenv (scala)
- greenspun/dotenv (half of common lisp)