import 'dart:convert'; import 'dart:typed_data'; import 'package:crypto/crypto.dart'; import 'print.dart'; extension StringExtension on String { bool get isUrl { return RegExp(r'^(http|https|ftp)://').hasMatch(this); } dynamic get splitByMultipleSeparators { final parts = split( RegExp(r'[, ;]+'), ).where((part) => part.isNotEmpty).toList(); return parts.length > 1 ? parts : this; } int compareToLower(String other) { return toLowerCase().compareTo(other.toLowerCase()); } String safeSubstring(int start, [int? end]) { if (isEmpty) return ''; final safeStart = start.clamp(0, length); if (end == null) { return substring(safeStart); } final safeEnd = end.clamp(safeStart, length); return substring(safeStart, safeEnd); } List get encodeUtf16LeWithBom { final byteData = ByteData(length * 2); final bom = [0xFF, 0xFE]; for (int i = 0; i < length; i++) { int charCode = codeUnitAt(i); byteData.setUint16(i * 2, charCode, Endian.little); } return bom + byteData.buffer.asUint8List(); } Uint8List? get getBase64 { final regExp = RegExp(r'base64,(.*)'); final match = regExp.firstMatch(this); final realValue = match?.group(1) ?? ''; if (realValue.isEmpty) { return null; } try { return base64.decode(realValue); } catch (e) { return null; } } bool get isSvg { return endsWith('.svg'); } bool get isRegex { try { RegExp(this); return true; } catch (e) { commonPrint.log(e.toString()); return false; } } String toMd5() { final bytes = utf8.encode(this); return md5.convert(bytes).toString(); } // bool containsToLower(String target) { // return toLowerCase().contains(target); // } } extension StringExtensionSafe on String? { String getSafeValue(String defaultValue) { if (this == null || this!.isEmpty) { return defaultValue; } return this!; } }