Created
July 23, 2019 05:42
-
-
Save sergeytsivin/33b9c7fbbe38d1560c0b30889e6db006 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
typedef DataItemTransformer = Object Function(Map<String, dynamic> item); | |
class HasNext<T extends Object> { | |
const HasNext({ | |
this.hasNext, | |
this.data, | |
}); | |
HasNext.fromMap( | |
Map<String, dynamic> map, DataItemTransformer dataItemTransformer) | |
: hasNext = map['has_next'], | |
data = List.from(map['data']) | |
.fold<List<T>>(<T>[], _buildItemsFilter<T>(dataItemTransformer)) | |
.cast<T>() | |
.toList(); | |
final bool hasNext; | |
final List<T> data; | |
static List<T> Function(List<T> acc, Map<String, dynamic> item) | |
_buildItemsFilter<T extends Object>( | |
DataItemTransformer dataItemTransformer) => | |
(List<T> acc, dynamic item) { | |
try { | |
acc.add(dataItemTransformer(item)); | |
} catch (_) {} | |
return acc; | |
}; | |
} | |
void main() { | |
const response = { | |
"has_next": false, | |
"data": [ | |
{ | |
"name": "Эксперт", | |
"periodicity": "weekly", | |
"is_collected": false, | |
"latest_issue": { | |
"timestamp": 1563148800, | |
"cover": | |
"https://lib.public.ru/media/v2/issues/14489/pages/1.jpg/resize/120x-?1563142993", | |
"id": 14489 | |
}, | |
"type": "magazine", | |
"id": 2 | |
}, | |
{ | |
"name": "Forbes", | |
"periodicity": "monthly", | |
"is_collected": false, | |
"latest_issue": { | |
"timestamp": 1561939200, | |
"cover": | |
"https://lib.public.ru/media/v2/issues/14100/pages/1.jpg/resize/120x-?1562676207", | |
"id": 14100 | |
}, | |
"type": "magazine", | |
"id": 45 | |
} | |
] | |
}; | |
final h = HasNext.fromMap(response, (x) => x); | |
print(h); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment