diff --git a/README.md b/README.md index 6d70ba6..56dcea9 100644 --- a/README.md +++ b/README.md @@ -20,6 +20,7 @@ - [x] XML (XmlAssetLoader, XmlSingleAssetLoader) - [x] Yaml (YamlAssetLoader, YamlSingleAssetLoader) - [x] FILE (FileAssetLoader) +- [x] Combination (CombinationLoader) ### Configuration diff --git a/lib/easy_localization_loader.dart b/lib/easy_localization_loader.dart index 683b29e..0c04919 100644 --- a/lib/easy_localization_loader.dart +++ b/lib/easy_localization_loader.dart @@ -6,3 +6,4 @@ export 'package:easy_localization_loader/src/smart_network_asset_loader.dart'; export 'package:easy_localization_loader/src/tests_asset_loader.dart'; export 'package:easy_localization_loader/src/xml_asset_loader.dart'; export 'package:easy_localization_loader/src/yaml_asset_loader.dart'; +export 'package:easy_localization_loader/src/combination_loader.dart'; diff --git a/lib/src/combination_loader.dart b/lib/src/combination_loader.dart new file mode 100644 index 0000000..4fbc0f3 --- /dev/null +++ b/lib/src/combination_loader.dart @@ -0,0 +1,32 @@ +import 'package:flutter/material.dart'; + +import 'package:easy_localization/easy_localization.dart'; + +class CombinationLoader extends AssetLoader { + const CombinationLoader({required this.loaders}); + + final List loaders; + + @override + Future> load(String path, Locale locale) async { + final resultFutures = loaders.map((loader) async { + try { + return loader.load(path, locale); + } catch (error) { + debugPrint(error.toString()); + return {}; + } + }); + + try { + final results = await Future.wait(resultFutures); + return results.fold>( + {}, + (prev, e) => {...prev, ...(e ?? {})}, + ); + } catch (error) { + debugPrint(error.toString()); + return {}; + } + } +}