extension StringExtensions on String { String substringAfter(String pattern) { final startIndex = indexOf(pattern); if (startIndex == -1) return substring(0); final start = startIndex + pattern.length; return substring(start); } String substringBefore(String pattern) { final endIndex = indexOf(pattern); if (endIndex == -1) return substring(0); return substring(0, endIndex); } String substringBeforeLast(String pattern) { final endIndex = lastIndexOf(pattern); if (endIndex == -1) return substring(0); return substring(0, endIndex); } } extension LetExtension on T { R let(R Function(T) block) { return block(this); } }