问题描述
现在我正在使用它来为我的应用加载我的配置,
await GlobalConfiguration().loadFromAsset("app_settings");
...
GlobalConfiguration().getString("app-setting-1");
GlobalConfiguration().getString("app-setting-2");
...
到目前为止效果很好。
但是现在我的配置文件已经增加了一点。 我想将配置文件分成多个部分。
例如:
app_settings_general
app_settings_reports
app_settings_payments
这使参数的管理更易于处理, 以及对一个配置文件的替换或更改,而无需打开或关心其他配置文件。
例如,我在应用程序的不同方面, 付款模块配置 报告配置 订购模块配置 等等
我浏览了不同的页面,但是所有人都在谈论针对不同环境使用不同的配置文件,而不是在同一应用程序中使用多个配置文件。
解决方法
如果您确定键在所有配置文件中都是唯一的,则可以使用
await GlobalConfiguration().loadFromAsset("app_settings_general");
await GlobalConfiguration().loadFromAsset("app_settings_report");
这会将两个文件中的所有配置仅加载到单个变量。
否则:(如果文件具有重复的密钥)
我们可以编写自己的帮助程序类。您可以参考以下示例。
import 'dart:convert';
import 'package:flutter/services.dart';
class AppConfiguration {
AppConfiguration._internal();
static final _globConfig = "globConfig";
static final _singleton = AppConfiguration._internal();
factory AppConfiguration() {
return _singleton;
}
final _configs = Map<String,dynamic>();
Future<AppConfiguration> loadConfigs(String name,{String category}) async {
final configJsonString =
await rootBundle.loadString("assets/configs/$name");
Map<String,dynamic> configJson = json.decode(configJsonString);
if (category == null || category.isEmpty) category = _globConfig;
if (_configs[category] == null) _configs[category] = Map<String,dynamic>();
_configs[category].addAll(configJson);
return _singleton;
}
T getConfig<T>(String key,{String category}) {
if (category == null || category.isEmpty) category = _globConfig;
return _configs[category][key] as T;
}
}
用法:
- 将所有json配置文件放置到“ assets / configs /”文件夹中
- 在
pubspec.yaml
中指定配置文件夹
flutter:
assets:
- assets/configs/
- 要在应用启动时加载配置
void main() async{
await AppConfiguration().loadConfigs("app_settings_general",category: "general");
await AppConfiguration().loadConfigs("app_settings_report",category: "report");
runApp(MyApp());
}
- 访问应用程序内部的配置值
AppConfiguration().getConfig("key1",category: "general");
AppConfiguration().getConfig<String>("key2",category: "report");