Safe substring (won't throw if string is too short)
String safeSubstring(int start, [int? end]) { if (start >= length) return ''; return substring(start, end?.clamp(0, length) ?? length); }