loadConfig function
Reads the TOML configuration file from the cross-platform user config directory.
Implementation
Future<AppConfig> loadConfig() async {
// Note: Return type is now AppConfig (non-nullable)
try {
// 1. Determine the Config Directory using the pure Dart helper
final String baseConfigPath = configDir;
if (baseConfigPath.isEmpty) {
throw Exception(
"Could not determine configuration directory for the current OS.",
);
}
// 2. Locate the File
// Note: We use baseConfigPath directly, NOT Directory(baseConfigPath)
final String configPath = p.join(baseConfigPath, appName, configFileName);
// 2.5. Create the config file with default values if it doesn't exist
final File configFile = File(configPath);
if (!configFile.existsSync()) {
await _createDefaultConfigFile(configPath);
}
// 3. Read and Parse the TOML
final TomlDocument document = await TomlDocument.load(configPath);
final Map<String, dynamic> rootMap = document.toMap();
// 4. Convert to Strongly-Typed Class
final AppConfig config = AppConfig.fromMap(rootMap);
print('✅ Config file loaded and parsed successfully from: $configPath');
return config;
} on TomlParserException catch (e) {
print('❌ ERROR: Failed to parse TOML configuration file. Check syntax.');
print('Returning default configuration due to parsing error.');
print(e.message);
return defaultAppConfig; // Return default on parsing failure
} on FileSystemException catch (e) {
print('❌ ERROR: File system error while accessing config file.');
print('Returning default configuration due to file error.');
print(e.message);
return defaultAppConfig; // Return default on file access failure
} catch (e) {
print('❌ An unexpected error occurred: $e');
print('Returning default configuration.');
return defaultAppConfig; // Return default for any other error
}
}