feat: 重构会话管理与提醒通知系统
This commit is contained in:
+29
-4
@@ -32,7 +32,10 @@ abstract class CachedRepository<T> {
|
||||
bool Function(T loaded)? shouldWriteLoaded,
|
||||
bool forceRefresh = false,
|
||||
}) async {
|
||||
final scopeToken = CacheScope.token();
|
||||
final scopeToken = CacheScope.maybeToken();
|
||||
if (scopeToken == null) {
|
||||
return loadFromRemote();
|
||||
}
|
||||
final scopedKey = CacheScope.scopedKey(key, scopeToken: scopeToken);
|
||||
|
||||
if (forceRefresh) {
|
||||
@@ -71,12 +74,22 @@ abstract class CachedRepository<T> {
|
||||
}
|
||||
|
||||
Future<CacheEntry<T>?> readCacheEntry(String key, {String? scopeToken}) {
|
||||
return _readDecodedEntry(CacheScope.scopedKey(key, scopeToken: scopeToken));
|
||||
final resolvedScope = _resolveScopeToken(scopeToken);
|
||||
if (resolvedScope == null) {
|
||||
return Future<CacheEntry<T>?>.value(null);
|
||||
}
|
||||
return _readDecodedEntry(
|
||||
CacheScope.scopedKey(key, scopeToken: resolvedScope),
|
||||
);
|
||||
}
|
||||
|
||||
Future<void> writeCacheEntry(String key, T value, {String? scopeToken}) {
|
||||
final resolvedScope = _resolveScopeToken(scopeToken);
|
||||
if (resolvedScope == null) {
|
||||
return Future<void>.value();
|
||||
}
|
||||
return store.write<CacheEntry<Object?>>(
|
||||
_scopedKey(key, scopeToken: scopeToken),
|
||||
_scopedKey(key, scopeToken: resolvedScope),
|
||||
CacheEntry<Object?>(value: encodeValue(value), fetchedAt: now()),
|
||||
);
|
||||
}
|
||||
@@ -98,7 +111,11 @@ abstract class CachedRepository<T> {
|
||||
}
|
||||
|
||||
Future<void> removeCacheKey(String key, {String? scopeToken}) {
|
||||
return store.remove(CacheScope.scopedKey(key, scopeToken: scopeToken));
|
||||
final resolvedScope = _resolveScopeToken(scopeToken);
|
||||
if (resolvedScope == null) {
|
||||
return Future<void>.value();
|
||||
}
|
||||
return store.remove(CacheScope.scopedKey(key, scopeToken: resolvedScope));
|
||||
}
|
||||
|
||||
void refreshInBackground({
|
||||
@@ -140,4 +157,12 @@ abstract class CachedRepository<T> {
|
||||
String _scopedKey(String key, {String? scopeToken}) {
|
||||
return CacheScope.scopedKey(key, scopeToken: scopeToken);
|
||||
}
|
||||
|
||||
String? _resolveScopeToken(String? scopeToken) {
|
||||
final scoped = scopeToken?.trim();
|
||||
if (scoped != null && scoped.isNotEmpty) {
|
||||
return scoped;
|
||||
}
|
||||
return CacheScope.maybeToken();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user