config_manager 0.1.0
config_manager: ^0.1.0 copied to clipboard
A JSON-based configuration manager with dot-notation access to nested values, singleton pattern, and mixin support.
example/main.dart
import 'package:config_manager/config_manager.dart';
class AppService with ConfigExtension {
void printInfo() {
print('--- Via ConfigExtension mixin ---');
print('appName: ${getConfig('appName')}');
print('db host: ${getConfig('database.host')}');
print('db user: ${getConfig('database.credentials.user')}');
print('first feature: ${getConfig('features.0')}');
final servers = getConfig('servers') as List? ?? [];
for (final server in servers) {
print('server via mixin: ${server['name']} (${server['region']})');
}
}
}
void main() {
final config = ConfigManagerSingleton();
config.loadFromJson('example/config.json');
print('--- Via ConfigManagerSingleton ---');
print('appName: ${config.get('appName')}');
print('db port: ${config.get('database.port')}');
print('db user: ${config['database.credentials.user']}');
print('--- Lists via casting ---');
final features =
(config.get('features') as List?)?.cast<String>() ?? [];
print('features: $features');
print('feature count: ${features.length}');
for (final feature in features) {
print('feature: $feature');
}
final servers = config.get('servers') as List? ?? [];
for (final server in servers) {
final map = server as Map<String, dynamic>;
print('server: ${map['name']} -> ${map['region']}');
}
config.set('ports', [8080, 8081, 8082]);
final ports = (config.get('ports') as List?)?.cast<int>() ?? [];
print('ports: $ports');
config.set('database.replicas', ['replica-1', 'replica-2']);
print('nested list: ${config.get('database.replicas')}');
print('--- Lists + dot notation ---');
print('second feature: ${config.get('features.1')}');
print('first server name: ${config.get('servers.0.name')}');
print('second server region: ${config.get('servers.1.region')}');
print('first replica: ${config.get('database.replicas.0')}');
print('--- Writes and edge cases ---');
config.set('database.credentials.password', 's3cret');
print('written nested value: ${config.get('database.credentials.password')}');
print('missing key: ${config.get('does.not.exist')}');
print('index out of range: ${config.get('features.99')}');
print('missing list: ${config.get('noSuchList') as List? ?? []}');
AppService().printInfo();
}