loadState method

Future<Map<String, dynamic>> loadState(
  1. String atSign
)

Implementation

Future<Map<String, dynamic>> loadState(String atSign) async {
  await ensureReady();

  final normalized = normalizeAtSign(atSign);
  final file = _fileForAtSign(normalized);
  if (!await file.exists()) {
    final legacyFile = _legacyFileForAtSign(normalized);
    if (await legacyFile.exists()) {
      try {
        final legacyContents = await legacyFile.readAsString();
        await file.writeAsString(legacyContents);
      } catch (_) {
        // Fall back to the default empty state below.
      }
    }
  }
  if (!await file.exists()) {
    return {
      'atSign': normalized,
      'otpHistory': <Map<String, dynamic>>[],
      'autoApprovalServices': <Map<String, dynamic>>[],
      'history': <Map<String, dynamic>>[],
    };
  }

  try {
    final raw = await file.readAsString();
    if (raw.trim().isEmpty) {
      return {'atSign': normalized, 'otpHistory': <Map<String, dynamic>>[]};
    }

    final decoded = jsonDecode(raw);
    if (decoded is Map<String, dynamic>) {
      return {
        'atSign': normalized,
        'otpHistory': _normalizeOtpHistory(decoded['otpHistory']),
        'autoApprovalServices': _normalizeAutoApprovalServices(
          decoded['autoApprovalServices'],
        ),
        'history': _normalizeHistory(decoded['history']),
        ...decoded,
      };
    }
    if (decoded is Map) {
      final casted = decoded.cast<String, dynamic>();
      return {
        'atSign': normalized,
        'otpHistory': _normalizeOtpHistory(casted['otpHistory']),
        'autoApprovalServices': _normalizeAutoApprovalServices(
          casted['autoApprovalServices'],
        ),
        'history': _normalizeHistory(casted['history']),
        ...casted,
      };
    }
  } catch (_) {
    // Fall back to an empty state.
  }

  return {
    'atSign': normalized,
    'otpHistory': <Map<String, dynamic>>[],
    'autoApprovalServices': <Map<String, dynamic>>[],
    'history': <Map<String, dynamic>>[],
  };
}