generateCacheKey static method
Generates a stable SHA-256 cache key from the request URL, selected
headers, and body. Only content-type, accept, and x-* headers
are included so user-agent / auth tokens don't pollute the key.
Implementation
static String generateCacheKey({
required String url,
Map<String, String>? headers,
dynamic body,
}) {
final buffer = StringBuffer(url);
if (headers != null && headers.isNotEmpty) {
final criticalHeaders = <String, String>{};
for (var entry in headers.entries) {
final key = entry.key.toLowerCase();
if (key == 'content-type' || key == 'accept' || key.startsWith('x-')) {
criticalHeaders[key] = entry.value;
}
}
if (criticalHeaders.isNotEmpty) {
final sorted = Map.fromEntries(
criticalHeaders.entries.toList()
..sort((a, b) => a.key.compareTo(b.key)),
);
buffer.write('_h:');
buffer.write(jsonEncode(sorted));
}
}
if (body != null) {
buffer.write('_b:');
if (body is Map) {
final sortedBody = Map.fromEntries(
body.entries.toList()
..sort((a, b) => a.key.toString().compareTo(b.key.toString())),
);
buffer.write(jsonEncode(sortedBody));
} else {
buffer.write(jsonEncode(body));
}
}
return sha256.convert(utf8.encode(buffer.toString())).toString();
}