Flutter配置管理插件bro_config_manager的使用
Flutter配置管理插件bro_config_manager的使用
目录
介绍
这个包包含了配置管理器的抽象类。配置管理器可以被其他管理器和其他类用来从特定文件中读取应用程序配置。
这个包受node config包的启发。
这个包基于bro_abstract_manager包。
使用
演示
配置管理器使用的配置文件会根据构建应用程序时使用的环境(dev
、staging
或 prod
)进行调整。为此,在构建应用程序时,您需要指定要使用的环境。这可以通过在构建应用程序时使用 --dart-define
选项来实现。
要使用的环境值为 APP_ENV
,其值必须是 dev
、staging
或 prod
(development
和 production
也是可用的)。
配置管理器将在 assets/configs
目录中查找配置文件。该目录必须作为资产添加到 pubspec.yaml
文件中。
配置文件夹路径可以通过构造函数的 configFolderPath
参数更改。
配置文件夹结构
配置管理器将在 assets/configs
目录中查找配置文件。配置文件必须是 JSON 或 YAML 文件(文件扩展名可以是 .json
、.yaml
或 .yml
)。配置管理器将按以下顺序解析这些文件:
default.{json|yaml|yml}
:此文件包含所有配置的默认值,不依赖于环境。{environment}.{json|yaml|yml}
:此文件包含依赖于环境的值。环境由APP_ENV
变量指定。 注意:文件名只能是development
、staging
或production
。local.{json|yaml|yml}
:此文件包含特定于本地环境的值。该文件仅限于设备,并且不应提交到仓库。
如果这些文件之一不存在,配置管理器不会抛出错误。它只会使用其他文件中的值。只有当预期的变量在任何文件中都找不到其值时,配置管理器才会抛出错误。
配置文件内容
配置文件的结构是一个 Map<String, dynamic>
,其中键是变量名称。您可以创建配置文件的层次结构以使其更易读。
避免在变量名称中使用 .
,因为它可能会导致解析失败。
变量值可以是 YAML 值。以下是配置文件的一个示例:
# 这是存储与日志记录相关的配置变量的主要类别
logger:
# 这是日志记录器的全局级别,可以通过以下路径访问:
# `logger.globalLevel`
globalLevel: debug
# 这包含控制台日志记录器的设置
console:
# 这是控制台日志记录器的级别,可以通过以下路径访问:
# `logger.console.level`
level: debug
# 如果为真,则启用控制台日志记录器
enabled: true
# 这包含文件日志记录器的设置
file:
# 这是文件日志记录器的级别,可以通过以下路径访问:
# `logger.file.level`
level: debug
# 如果为真,则启用文件日志记录器
enabled: true
用环境变量覆盖配置文件
您可以使用环境变量覆盖配置文件中的值。
为此,您需要创建一个映射文件,将环境变量映射到配置变量。映射文件必须是 JSON 或 YAML 文件,并且必须命名为 env_mapping.{json|yaml|yml}
。
映射文件的结构与配置文件相同,唯一的区别是值是环境变量名称。
如果您想解析非字符串值,可以通过以下语法指定值类型:
key:
__name: ENV_VAR_NAME
__format: int
以下是映射文件的一个示例:
# 这是存储与日志记录相关的配置变量的主要类别
logger:
# 这是日志记录器的全局级别,可以通过以下路径访问:
# `logger.globalLevel`
globalLevel: LOGGER_GLOBAL_LEVEL
# 这包含控制台日志记录器的设置
console:
# 这是控制台日志记录器的级别,可以通过以下路径访问:
# `logger.console.level`
level: LOGGER_CONSOLE_LEVEL
# 如果为真,则启用控制台日志记录器
enabled:
__name: LOGGER_CONSOLE_ENABLED
__format: bool
# 这包含文件日志记录器的设置
file:
# 这是文件日志记录器的级别,可以通过以下路径访问:
# `logger.file.level`
level: LOGGER_FILE_LEVEL
# 如果为真,则启用文件日志记录器
enabled:
__name: LOGGER_FILE_ENABLED
__format: bool
支持的类型有:
int
,double
,bool
,string
,object
(这将解析值为 JSON 对象),array
(这将解析值为 JSON 数组)。
使用环境变量
演示
要使用环境变量,您需要在 assets/configs
目录中添加映射文件。
平台特定环境变量
首先,应用程序将尝试在平台特定变量中找到环境变量的值。
点env文件
然后,您可以使用 .env
文件来设置环境变量。.env
文件必须命名为 {environment}.env
,其中 {environment}
是您要使用的环境。
我们不建议将 .env
文件提交到仓库,因为它们可能包含敏感数据。
该库使用了 flutter_dotenv包 来解析 .env
文件。
配置管理器将按以下顺序解析环境文件:
.env
:此文件包含所有环境变量的用户值。default.env
:此文件包含所有环境变量的默认值。{environment}.env
:此文件包含依赖于环境的值。local.env
:此文件包含特定于本地环境的值。
构建环境变量
您还可以通过使用 --dart-define
选项直接在构建命令中设置环境变量。
这些值将覆盖 .env
文件中的值。
请注意,构建命令中设置的值只能在运行时通过常量键访问。
总结
总结一下,配置管理器将按以下顺序查找值:
default.{json|yaml|yml}
:所有配置的默认值。{environment}.{json|yaml|yml}
:依赖于环境的值。local.{json|yaml|yml}
:特定于本地环境的值。- 平台特定环境变量。
.env
文件。.env
:所有环境变量的用户值。default.env
:所有环境变量的默认值。{environment}.env
:依赖于环境的值。local.env
:特定于本地环境的值。
- 构建环境变量。
完整示例
示例代码
pubspec.yaml
name: bro_config_manager_example
description: A sample project to demonstrate the usage of bro_config_manager.
dependencies:
flutter:
sdk: flutter
bro_abstract_manager: ^1.0.0
bro_config_manager: ^1.0.0
flutter_dotenv: ^5.0.0
flutter:
assets:
- assets/configs/
main.dart
import 'package:flutter/material.dart';
import 'package:bro_abstract_manager/abstract_manager.dart';
import 'package:bro_config_manager/config_manager.dart';
import 'package:flutter_dotenv/flutter_dotenv.dart';
void main() async {
// 初始化 dotenv
await dotenv.load(fileName: "assets/configs/.env");
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Bro Config Manager Example'),
),
body: Center(
child: ConfigReader(),
),
),
);
}
}
class ConfigReader extends StatefulWidget {
@override
_ConfigReaderState createState() => _ConfigReaderState();
}
class _ConfigReaderState extends State<ConfigReader> {
Map<String, dynamic> _config = {};
@override
void initState() {
super.initState();
// 初始化配置管理器
ConfigManager().initialize(
configFolderPath: 'assets/configs',
defaultConfigFileName: 'default.yaml',
envConfigFileName: 'dev.yaml', // 可以替换为 staging 或 prod
localConfigFileName: 'local.yaml',
envMappingFileName: 'env_mapping.yaml',
).then((_) {
setState(() {
_config = ConfigManager().getConfig();
});
});
}
@override
Widget build(BuildContext context) {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text('Global Logger Level: ${_config['logger']['globalLevel']}'),
Text('Console Logger Enabled: ${_config['logger']['console']['enabled']}'),
Text('File Logger Enabled: ${_config['logger']['file']['enabled']}'),
],
);
}
}
assets/configs/default.yaml
# 这是存储与日志记录相关的配置变量的主要类别
logger:
globalLevel: debug
console:
level: debug
enabled: true
file:
level: debug
enabled: true
assets/configs/dev.yaml
# 这是存储与日志记录相关的配置变量的主要类别
logger:
globalLevel: info
console:
level: info
enabled: false
file:
level: info
enabled: true
assets/configs/local.yaml
# 这是存储与日志记录相关的配置变量的主要类别
logger:
globalLevel: warning
console:
level: warning
enabled: true
file:
level: warning
enabled: false
assets/configs/env_mapping.yaml
# 这是存储与日志记录相关的配置变量的主要类别
logger:
globalLevel: LOGGER_GLOBAL_LEVEL
console:
level: LOGGER_CONSOLE_LEVEL
enabled:
__name: LOGGER_CONSOLE_ENABLED
__format: bool
file:
level: LOGGER_FILE_LEVEL
enabled:
__name: LOGGER_FILE_ENABLED
__format: bool
assets/configs/.env
LOGGER_GLOBAL_LEVEL=debug
LOGGER_CONSOLE_LEVEL=info
LOGGER_CONSOLE_ENABLED=true
LOGGER_FILE_LEVEL=info
LOGGER_FILE_ENABLED=false
运行项目
确保您的 pubspec.yaml
文件正确配置并安装依赖项。然后运行以下命令来启动应用程序:
flutter run --dart-define APP_ENV=dev
更多关于Flutter配置管理插件bro_config_manager的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter配置管理插件bro_config_manager的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
bro_config_manager
是一个用于 Flutter 的配置管理插件,它允许开发者轻松地管理和访问应用程序的配置参数。以下是如何在 Flutter 项目中使用 bro_config_manager
的基本步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 bro_config_manager
插件的依赖:
dependencies:
flutter:
sdk: flutter
bro_config_manager: ^1.0.0 # 确保使用最新版本
然后运行 flutter pub get
来安装依赖。
2. 导入包
在你的 Dart 文件中导入 bro_config_manager
包:
import 'package:bro_config_manager/bro_config_manager.dart';
3. 初始化配置管理器
在使用配置管理器之前,通常需要对其进行初始化。你可以在 main.dart
文件中的 main
函数中进行初始化:
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 初始化配置管理器
await BroConfigManager.initialize(
configPath: 'assets/config.json', // 配置文件的路径
);
runApp(MyApp());
}
4. 加载配置文件
在 assets
目录下创建一个 config.json
文件,并在 pubspec.yaml
文件中声明:
flutter:
assets:
- assets/config.json
config.json
文件的内容可能如下:
{
"api_url": "https://api.example.com",
"api_key": "your_api_key_here",
"debug_mode": true
}
5. 访问配置参数
你可以通过 BroConfigManager
来访问配置参数:
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
// 访问配置参数
String apiUrl = BroConfigManager.getString('api_url');
String apiKey = BroConfigManager.getString('api_key');
bool debugMode = BroConfigManager.getBool('debug_mode');
print('API URL: $apiUrl');
print('API Key: $apiKey');
print('Debug Mode: $debugMode');
return MaterialApp(
title: 'Flutter Demo',
home: Scaffold(
appBar: AppBar(
title: Text('Flutter Demo Home Page'),
),
body: Center(
child: Text('API URL: $apiUrl'),
),
),
);
}
}
6. 更新配置参数
你可以在运行时更新配置参数:
BroConfigManager.updateConfig({'api_url': 'https://new.api.example.com'});
7. 监听配置变化
你还可以监听配置参数的变化:
BroConfigManager.addListener('api_url', (newValue) {
print('API URL changed to: $newValue');
});
8. 错误处理
在处理配置时,可能会遇到文件不存在或配置项不存在的情况。你可以使用 try-catch
来捕获这些异常:
try {
String apiUrl = BroConfigManager.getString('api_url');
} catch (e) {
print('Failed to get API URL: $e');
}