Saves and caches the item. On error throws.
@override Future<E> save(E item) async { _cachedItem = await _inner.save(item); _isItemFetched = true; return _cachedItem!; }