updateCacheRelations method
Future<Result<int, String, List<T> ?> >
updateCacheRelations({
- Set<
String> ? oldRels, - Set<
String> ? newRels, - required String fieldToUpdate,
- required ItemCreator<
T> creator, - String channel = 'main',
- CrudStrategy strategy = const DefaultCrudStrategy(),
override
Implementation
@override
Future<Result<int, String, List<T>?>> updateCacheRelations({
Set<String>? oldRels,
Set<String>? newRels,
required String fieldToUpdate,
required ItemCreator<T> creator,
String channel = 'main',
CrudStrategy strategy = const DefaultCrudStrategy(),
}) async {
final Set<String> relsToAdd = {};
final Set<String> relsToRemove = {};
final allRels = <String>{...?oldRels, ...?newRels};
for (final r in allRels) {
if (newRels?.contains(r) == true) {
relsToAdd.add(r);
}
if (oldRels?.contains(r) == true) {
relsToRemove.add(r);
}
}
final items = _currentList(channel);
final updatedItems = items.map((e) {
final map = e.toJson();
final shouldIncrement = relsToAdd.contains(e.id);
final shouldDecrement = relsToRemove.contains(e.id);
if (shouldIncrement && !shouldDecrement) {
map[fieldToUpdate] = (map[fieldToUpdate] ?? 0) + 1;
} else if (shouldDecrement && !shouldIncrement) {
map[fieldToUpdate] = (map[fieldToUpdate] ?? 1) - 1;
}
return creator(map);
}).toList();
_getItemsStream(channel).add(updatedItems);
return _listResult(updatedItems);
}