Flutter环境变量管理插件flutter_dot_json_env的使用
Flutter环境变量管理插件flutter_dot_json_env 的使用
关于
此库是 java-james/flutter_dotenv Dart 库的一个分支,最初修改以确保与 Flutter 兼容。
一个 环境 包含由进程识别的变量(如 PATH
、PORT
等)。在开发过程中(包括测试和预生产阶段),通过从文件读取这些值来复制生产环境是有益的。
该库解析文件并将其中的值与内置的 <a href="https://api.dart.dev/stable/3.4.4/dart-io/Platform-class.html#id_environment"><code>Platform.environment</code></a>
映射集成在一起。
使用
- 在项目的根目录下创建一个名为
local.json
的文件,内容如下所示:
{
"api_url": "https://api.local.dev.com",
"foo": "foo",
"bar": "bar"
}
- 在
pubspec.yaml
文件中添加local.json
文件到资源包中。确保路径与local.json
文件的位置匹配!
assets:
- local.json
- 在
main.dart
中加载local.json
文件。
import 'package:flutter_dot_json_env/flutter_dot_json_env.dart';
Future<void> main() async {
await dotjsonenv.load(fileName: "local.json");
//...runapp
}
- 在整个应用程序中访问
local.json
中的对象键值。
import 'package:flutter_dot_json_env/flutter_dot_json_env.dart';
String variable_name = dotjsonenv.env['key_value'] ?? 'default fallback value';
使用 --dart-define
选择环境 JSON 文件
- 创建一个名为
[envFileName].json
的文件,包含相同的对象键,例如以下示例内容:
{
"api_url": "https://api.local.dev.com",
"foo": "foo",
"bar": "bar"
}
- 在
pubspec.yaml
文件中将环境JSON
文件添加到资源包中。确保路径与local.json
文件的位置匹配!
assets:
- assets/env/local.json
- assets/env/dev.json
- assets/env/test.json
- assets/env/prelive.json
- assets/env/live.json
- 创建一个新的类,例如
Environment
类。
class Environment {
static const env = String.fromEnvironment('ENV');
String get envFileName {
switch (env) {
case 'dev': // flutter run --dart-define=ENV=dev
return 'assets/env/dev.json';
case 'test': // flutter run --dart-define=ENV=test
return 'assets/env/test.json';
case 'prelive': // flutter run --dart-define=ENV=prelive
return 'assets/env/prelive.json';
case 'live': // flutter run --dart-define=ENV=live
return 'assets/env/live.json';
default: // flutter run
return 'assets/env/local.json';
}
}
static String get environmentName {
return env.isNotEmpty ? env : "Environment name not found";
}
static String get apiUrl =>
dotjsonenv.get('api_url', fallback: 'api url default fallback value');
static String get foo =>
dotjsonenv.env['foo'] ?? 'foo default fallback value';
static String get bar =>
dotjsonenv.env['bar'] ?? 'bar default fallback value';
}
- 在整个应用程序中访问
Environment
类中的值。
Future<void> main() async {
// await dotjsonenv.load(fileName: "assets/env/local.json"); // load as static json
await dotjsonenv.load(fileName: Environment().envFileName);
print('appURL::: ${Environment.apiUrl}'); // appURL::: https://api.local.com
print('Foo::: ${Environment.foo}'); // Foo::: prelive foo
print('Bar::: ${Environment.bar}'); // Bar::: prelive bar
//...runapp
}
- 运行应用程序或构建时:
flutter run --dart-define=ENV=<envFileName>
// flutter run --dart-define=ENV=dev
flutter build web --dart-define=ENV=<envFileName>
// flutter build web --dart-define=ENV=dev
零安全
为了避免对已知存在的变量进行空安全检查,有一个 get()
方法会在变量未定义时抛出异常。你还可以为 .env
文件中未定义的变量指定默认回退值。
Future<void> main() async {
await dotjsonenv.load(fileName: "local.json");
String foo = dotjsonenv.get('key_value');
// 或者使用回退。
String bar = dotjsonenv.get('missing_key_value', fallback: 'default fallback value');
// 这将返回 null。
String? baz = dotenv.maybeGet('missing_key_value', fallback: null);
}
讨论
使用 问题跟踪器 报告错误和提出功能请求。
欢迎提交拉取请求。
前置工作
- java-james/flutter_dotenv (dart)
许可证
许可证: MIT
完整示例 Demo
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_dot_json_env/flutter_dot_json_env.dart';
Future<void> main() async {
// await dotjsonenv.load(fileName: "assets/env/local.json"); // load as static json
await dotjsonenv.load(fileName: Environment().envFileName);
print(
'app URL::: ${dotjsonenv.env['api_url'] ?? 'api url default fallback value'}');
print('appURL::: ${Environment.apiUrl}');
print('Foo::: ${Environment.foo}');
print('Bar::: ${Environment.bar}');
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.teal),
useMaterial3: true,
),
home: Scaffold(
appBar: AppBar(
title: const Text('DotJSONEnv Demo'),
backgroundColor: Colors.teal,
),
body: SingleChildScrollView(
child: FutureBuilder<String>(
future: rootBundle.loadString('assets/env/local.json'),
initialData: '',
builder: (context, snapshot) => Container(
padding: const EdgeInsets.all(50),
child: Center(
child: Column(
children: [
Text(
'Env map: ${dotjsonenv.env.toString()}',
),
Text(dotjsonenv.get('api_url',
fallback: 'api url default fallback value')),
Text(dotjsonenv.get('foo',
fallback: 'foo default fallback value')),
Text(dotjsonenv.get('bar',
fallback: 'bar default fallback value')),
const Text("Environment class values"),
Text('appURL::: ${Environment.apiUrl}'),
Text('Foo::: ${Environment.foo}'),
Text('Bar::: ${Environment.bar}'),
],
),
),
),
),
),
),
);
}
}
class Environment {
static const env = String.fromEnvironment('ENV');
String get envFileName {
switch (env) {
case 'dev': // flutter run --dart-define=ENV=dev
return 'assets/env/dev.json';
case 'test': // flutter run --dart-define=ENV=test
return 'assets/env/test.json';
case 'prelive': // flutter run --dart-define=ENV=prelive
return 'assets/env/prelive.json';
case 'live': // flutter run --dart-define=ENV=live
return 'assets/env/live.json';
default: // flutter run
return 'assets/env/local.json';
}
}
static String get environmentName {
return env.isNotEmpty ? env : "Environment name not found";
}
static String get apiUrl =>
dotjsonenv.get('api_url', fallback: 'api url default fallback value');
static String get foo =>
dotjsonenv.env['foo'] ?? 'foo default fallback value';
static String get bar =>
dotjsonenv.env['bar'] ?? 'bar default fallback value';
}
更多关于Flutter环境变量管理插件flutter_dot_json_env的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter环境变量管理插件flutter_dot_json_env的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
flutter_dot_json_env
是一个用于在 Flutter 项目中管理环境变量的插件。它允许你从 JSON 文件中加载环境变量,并在应用程序中使用这些变量。以下是如何使用 flutter_dot_json_env
插件的步骤:
1. 添加依赖
首先,在你的 pubspec.yaml
文件中添加 flutter_dot_json_env
依赖:
dependencies:
flutter:
sdk: flutter
flutter_dot_json_env: ^1.0.0 # 请检查最新版本
然后运行 flutter pub get
来安装依赖。
2. 创建 JSON 配置文件
在项目的根目录下创建一个 JSON 文件来存储你的环境变量。例如,你可以创建一个 env.json
文件:
{
"API_URL": "https://api.example.com",
"API_KEY": "your_api_key_here",
"DEBUG_MODE": true
}
3. 加载环境变量
在你的 Dart 代码中,使用 DotJsonEnv
来加载 JSON 文件中的环境变量。通常,你可以在 main.dart
文件中的 main
函数中加载这些变量:
import 'package:flutter/material.dart';
import 'package:flutter_dot_json_env/flutter_dot_json_env.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 加载环境变量
await DotJsonEnv.load('env.json');
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
// 使用环境变量
String apiUrl = DotJsonEnv.env['API_URL'];
String apiKey = DotJsonEnv.env['API_KEY'];
bool debugMode = DotJsonEnv.env['DEBUG_MODE'];
return Scaffold(
appBar: AppBar(
title: Text('Flutter DotJsonEnv Demo'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text('API URL: $apiUrl'),
Text('API Key: $apiKey'),
Text('Debug Mode: $debugMode'),
],
),
),
);
}
}
4. 使用环境变量
在加载环境变量后,你可以通过 DotJsonEnv.env
来访问这些变量。例如:
String apiUrl = DotJsonEnv.env['API_URL'];
String apiKey = DotJsonEnv.env['API_KEY'];
bool debugMode = DotJsonEnv.env['DEBUG_MODE'];
5. 支持多环境(可选)
如果你需要支持多个环境(如开发环境、测试环境、生产环境),你可以创建多个 JSON 文件,例如 env.dev.json
, env.test.json
, env.prod.json
,并根据当前环境加载相应的文件。
String envFile = 'env.dev.json'; // 根据当前环境选择文件
await DotJsonEnv.load(envFile);