Files
MWClash/lib/common/string.dart
chen08209 cdfb688e62 Add sqlite store
Optimize android quick action

Optimize backup and restore

Optimize more details
2026-01-25 15:56:22 +08:00

103 lines
2.3 KiB
Dart

import 'dart:convert';
import 'dart:typed_data';
import 'package:crypto/crypto.dart';
import 'package:fl_clash/common/common.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<int> 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);
// }
Future<T> commonToJSON<T>() async {
final thresholdLimit = 51200;
if (length < thresholdLimit) {
return json.decode(this);
} else {
return await decodeJSONTask<T>(this);
}
}
}
extension StringNullExt on String? {
String takeFirstValid(List<String?> others, {String defaultValue = ''}) {
if (this != null && this!.trim().isNotEmpty) return this!.trim();
for (final s in others) {
if (s != null && s.trim().isNotEmpty) {
return s.trim();
}
}
return defaultValue;
}
}