From a443eccd6c8b0f4551d15ee60a8ad6510ed68275 Mon Sep 17 00:00:00 2001 From: Dat PHAM HOANG Date: Sat, 15 Oct 2022 00:09:33 +0700 Subject: [PATCH] TF-1018 Add abstract Config loader and parser --- core/lib/core.dart | 3 ++ core/lib/utils/config/app_config_loader.dart | 34 ++++++++++++++++++++ core/lib/utils/config/app_config_parser.dart | 8 +++++ core/lib/utils/config/errors.dart | 7 ++++ 4 files changed, 52 insertions(+) create mode 100644 core/lib/utils/config/app_config_loader.dart create mode 100644 core/lib/utils/config/app_config_parser.dart create mode 100644 core/lib/utils/config/errors.dart diff --git a/core/lib/core.dart b/core/lib/core.dart index 4fb0481fa..2c90072fb 100644 --- a/core/lib/core.dart +++ b/core/lib/core.dart @@ -36,6 +36,9 @@ export 'utils/benchmark.dart'; export 'utils/fps_manager.dart'; export 'utils/build_utils.dart'; export 'utils/string_convert.dart'; +export 'utils/config/app_config_loader.dart'; +export 'utils/config/app_config_parser.dart'; +export 'utils/config/errors.dart'; export 'data/utils/compress_file_utils.dart'; // Views diff --git a/core/lib/utils/config/app_config_loader.dart b/core/lib/utils/config/app_config_loader.dart new file mode 100644 index 000000000..b82117645 --- /dev/null +++ b/core/lib/utils/config/app_config_loader.dart @@ -0,0 +1,34 @@ +import 'package:core/utils/config/app_config_parser.dart'; +import 'package:core/utils/config/errors.dart'; +import 'package:flutter/widgets.dart'; +import 'package:flutter/services.dart' show rootBundle; + +class AppConfigLoader { + Future load(String fileName, AppConfigParser parser) async { + try { + WidgetsFlutterBinding.ensureInitialized(); + var envString = await rootBundle.loadString(fileName); + if (envString.isEmpty) { + throw EmptyConfiguration(); + } + + return await parser.parse(envString); + } on FlutterError { + throw ConfigurationNotFoundError(); + } + } + + Future loadData(String fileName, AppConfigParser parser) async { + try { + WidgetsFlutterBinding.ensureInitialized(); + var envData = await rootBundle.load(fileName); + if (envData.lengthInBytes == 0) { + throw EmptyConfiguration(); + } + + return await parser.parseData(envData); + } on FlutterError { + throw ConfigurationNotFoundError(); + } + } +} \ No newline at end of file diff --git a/core/lib/utils/config/app_config_parser.dart b/core/lib/utils/config/app_config_parser.dart new file mode 100644 index 000000000..d86b5f4a6 --- /dev/null +++ b/core/lib/utils/config/app_config_parser.dart @@ -0,0 +1,8 @@ +import 'dart:async'; + +import 'package:flutter/services.dart'; + +abstract class AppConfigParser { + Future parse(String value); + Future parseData(ByteData data); +} \ No newline at end of file diff --git a/core/lib/utils/config/errors.dart b/core/lib/utils/config/errors.dart new file mode 100644 index 000000000..60f30a2e7 --- /dev/null +++ b/core/lib/utils/config/errors.dart @@ -0,0 +1,7 @@ +class NotInitializedError implements Exception {} + +class ConfigurationNotFoundError implements Exception {} + +class EmptyConfiguration implements Exception {} + +class InvalidConfigurationParser implements Exception {} \ No newline at end of file