pickup<T> static method
pickup target attributes for Map, List
Implementation
static List<T> pickup<T>(dynamic target, String keywordsStr) {
if (isEmpty(keywordsStr) ||
isEmpty(target) ||
(target is! Map && target is! List)) {
return List.empty();
}
List<String> keywords = keywordsStr.split("-");
List<T> cherries = [];
if (target is List && target.isNotEmpty) {
for (var element in target) {
List<T> tmp = pickup(element, keywordsStr);
cherries.addAll(tmp);
}
return unique(cherries);
}
target.keys.forEach((element) {
dynamic value = target[element];
if (keywords.contains(element)) {
cherries.add(value);
}
if (value is Map) {
List<T> tmp = pickup(
value.map((key, value) => MapEntry(key.toString(), value)),
keywordsStr);
cherries.addAll(tmp);
}
if (value is List) {
List<T> tmp = pickup(value, keywordsStr);
cherries.addAll(tmp);
}
});
return unique<T>(cherries);
}