Skip to content

Commit 24b576a

Browse files
committed
🎨 refactor getAll method to use Set for allowList and improve empty list handling
1 parent 5eb8d2b commit 24b576a

File tree

9 files changed

+21
-27
lines changed

9 files changed

+21
-27
lines changed

packages/hyper_secure_storage/lib/src/backend.dart

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@
55
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
66
import 'package:hyper_storage/hyper_storage.dart';
77

8-
import 'utils.dart';
9-
108
/// A secure storage backend implementation that leverages platform-specific
119
/// secure storage mechanisms to protect sensitive data.
1210
class SecureStorageBackend extends StorageBackend {
@@ -59,14 +57,12 @@ class SecureStorageBackend extends StorageBackend {
5957
Future<int?> getInt(String key) async => int.tryParse(await storage.read(key: key) ?? '');
6058

6159
@override
62-
Future<Map<String, dynamic>> getAll([Iterable<String>? allowList]) async {
63-
// decoded keys associated with this container.
60+
Future<Map<String, dynamic>> getAll(Set<String> allowList) async {
6461
final Map<String, String> all = await storage.readAll();
6562
final Map<String, dynamic> data = {};
63+
if (allowList.isEmpty) return {};
6664
for (final MapEntry(:key, :value) in all.entries) {
67-
if (allowList != null && allowList.isNotEmpty && !allowList.contains(key)) {
68-
continue;
69-
}
65+
if (!allowList.contains(key)) continue;
7066
data[key] = _parseValue(value);
7167
}
7268
return data;
@@ -89,8 +85,7 @@ class SecureStorageBackend extends StorageBackend {
8985
///
9086
/// This is an internal utility method used by [getAll] for automatic type
9187
/// inference.
92-
Object? _parseValue(String value) =>
93-
bool.tryParse(value) ?? int.tryParse(value) ?? double.tryParse(value) ?? tryJsonDecode(value) ?? value;
88+
Object? _parseValue(String value) => bool.tryParse(value) ?? int.tryParse(value) ?? double.tryParse(value) ?? value;
9489

9590
@override
9691
Future<Set<String>> getKeys() async {

packages/hyper_storage/lib/src/api/api.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -495,7 +495,7 @@ abstract interface class StorageOperationsApi {
495495
///
496496
/// Throws:
497497
/// * [ArgumentError] if any key in the allow list is invalid.
498-
Future<Map<String, dynamic>> getAll([Iterable<String>? allowList]);
498+
Future<Map<String, dynamic>> getAll(Set<String> allowList);
499499

500500
/// Saves multiple key-value pairs from a [Map] in a single operation.
501501
///

packages/hyper_storage/lib/src/api/serializable_container.dart

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -497,7 +497,9 @@ abstract class SerializableStorageContainer<E> extends StorageContainer implemen
497497
@override
498498
Future<Map<String, E>> getAll([Iterable<String>? allowList]) async {
499499
validateKeys(allowList);
500-
final Map<String, dynamic> allData = await backend.getAll(allowList?.map(encodeKey) ?? await getEncodedKeys());
500+
final keys = allowList?.map(encodeKey) ?? await getEncodedKeys();
501+
if (keys.isEmpty) return {};
502+
final Map<String, dynamic> allData = await backend.getAll(keys.toSet());
501503
return <String, E>{
502504
for (final MapEntry(:key, :value) in allData.entries) decodeKey(key): deserialize(value.toString()),
503505
};

packages/hyper_storage/lib/src/hyper_storage_container.dart

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,9 @@ final class HyperStorageContainer extends StorageContainer with ItemHolderMixin,
118118
@override
119119
Future<Map<String, dynamic>> getAll([Iterable<String>? allowList]) async {
120120
validateKeys(allowList);
121-
final map = await backend.getAll(allowList?.map(encodeKey) ?? await getEncodedKeys());
121+
allowList ??= await getEncodedKeys();
122+
if (allowList.isEmpty) return {};
123+
final map = await backend.getAll(allowList.map(encodeKey).toSet());
122124
return {for (final entry in map.entries) decodeKey(entry.key): entry.value};
123125
}
124126

packages/hyper_storage/lib/src/storage_base.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,8 @@ abstract class _HyperStorageImpl extends BaseStorage
9292
@override
9393
Future<Map<String, dynamic>> getAll([Iterable<String>? allowList]) {
9494
_validateKeys(allowList);
95-
return backend.getAll(allowList);
95+
if (allowList == null || allowList.isEmpty) return Future.value(<String, dynamic>{});
96+
return backend.getAll(allowList.toSet());
9697
}
9798

9899
@override

packages/hyper_storage_hive/lib/src/backend.dart

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -77,12 +77,10 @@ class HiveBackend extends StorageBackend {
7777
Future<int?> getInt(String key) async => await box.get(key);
7878

7979
@override
80-
Future<Map<String, dynamic>> getAll([Iterable<String>? allowList]) async {
80+
Future<Map<String, dynamic>> getAll(Set<String> allowList) async {
8181
final data = <String, dynamic>{...box.toMap()};
82-
if (allowList != null && allowList.isNotEmpty) {
83-
data.removeWhere((key, value) => !allowList.contains(key));
84-
}
85-
return data;
82+
if (allowList.isEmpty) return {};
83+
return data..removeWhere((key, value) => !allowList.contains(key));
8684
}
8785

8886
@override

packages/hyper_storage_hive/lib/src/lazy_backend.dart

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -78,14 +78,12 @@ class LazyHiveBackend extends StorageBackend {
7878
Future<int?> getInt(String key) async => await box.get(key);
7979

8080
@override
81-
Future<Map<String, dynamic>> getAll([Iterable<String>? allowList]) async {
81+
Future<Map<String, dynamic>> getAll(Set<String> allowList) async {
8282
final data = <String, dynamic>{
8383
for (final key in box.keys) key.toString(): await box.get(key),
8484
};
85-
if (allowList != null && allowList.isNotEmpty) {
86-
data.removeWhere((key, value) => !allowList.contains(key));
87-
}
88-
return data;
85+
if (allowList.isEmpty) return {};
86+
return data..removeWhere((key, value) => !allowList.contains(key));
8987
}
9088

9189
@override

packages/hyper_storage_hive/test/test_helpers.dart

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import 'dart:io';
22

33
import 'package:hive_ce/hive.dart';
4-
import 'package:path/path.dart' as path;
54

65
/// Sets up Hive with a temporary directory for testing.
76
Future<Directory> setupHive() async {

packages/hyper_storage_shared_preferences/lib/src/backend.dart

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,8 @@ class SharedPreferencesBackend extends StorageBackend {
5151
Future<int?> getInt(String key) => prefs.getInt(key);
5252

5353
@override
54-
Future<Map<String, dynamic>> getAll([Iterable<String>? allowList]) async {
55-
final allKeys = await getKeys();
56-
if (allowList == null || allowList.isEmpty) allowList = allKeys;
54+
Future<Map<String, dynamic>> getAll(Set<String> allowList) async {
55+
if (allowList.isEmpty) return {};
5756
final data = await prefs.getAll(allowList: allowList.toSet());
5857
return data.map((key, value) => MapEntry(key, value));
5958
}

0 commit comments

Comments
 (0)