canonicalJson function
JSON kanonis: sort keys rekursif biar hash stabil.
Implementation
String canonicalJson(Map<String, dynamic> data) {
final sortedKeys = data.keys.toList()..sort();
final out = <String, dynamic>{};
for (final k in sortedKeys) {
final v = data[k];
if (v is Map<String, dynamic>) {
out[k] = jsonDecode(canonicalJson(v));
} else if (v is Map) {
out[k] = jsonDecode(canonicalJson(Map<String, dynamic>.from(v)));
} else if (v is List) {
out[k] = v
.map(
(e) => e is Map<String, dynamic> ? jsonDecode(canonicalJson(e)) : e,
)
.toList();
} else {
out[k] = v;
}
}
return jsonEncode(out);
}