read method

  1. @override
Future<CachedScreenEntry?> read({
  1. required String miniProgramId,
  2. required String version,
  3. required String screenId,
})
override

Implementation

@override
Future<CachedScreenEntry?> read({
  required String miniProgramId,
  required String version,
  required String screenId,
}) async {
  final cacheKey = buildScreenCacheKey(
    miniProgramId: miniProgramId,
    version: version,
    screenId: screenId,
  );
  if (_loadedKeys.contains(cacheKey)) {
    return _entries[cacheKey];
  }

  _loadedKeys.add(cacheKey);
  final file = _fileFor(cacheKey);
  if (!await file.exists()) {
    return null;
  }

  try {
    final decoded = jsonDecode(await file.readAsString());
    if (decoded is! Map) {
      await _safeDelete(file);
      return null;
    }

    final entry = CachedScreenEntry.fromJson(
      decoded.map((key, value) => MapEntry(key.toString(), value)),
    );
    _entries[cacheKey] = entry;
    return entry;
  } catch (_) {
    await _safeDelete(file);
    return null;
  }
}