import 'dart:math'; import 'package:uuid/uuid.dart'; abstract class PrimitiveUtils { static bool containsTextInBracket(String matcher, String text) { final allMatches = RegExp(r'(?<=\().+?(?=\))').allMatches(matcher); if (allMatches.isEmpty) return false; return allMatches .map((e) => e.group(0)) .every((match) => match?.contains(text) ?? false); } static final Random _random = Random(); static T getRandomElement(List list) { return list[_random.nextInt(list.length)]; } static const uuid = Uuid(); static String toReadableNumber(double num) { if (num > 999 && num < 99999) { return '${(num / 1000).toStringAsFixed(0)}K'; } else if (num > 99999 && num < 999999) { return '${(num / 1000).toStringAsFixed(0)}K'; } else if (num > 999999 && num < 999999999) { return '${(num / 1000000).toStringAsFixed(0)}M'; } else if (num > 999999999) { return '${(num / 1000000000).toStringAsFixed(0)}B'; } else { return num.toStringAsFixed(0); } } static Future raceMultiple( Future Function() inner, { Duration timeout = const Duration(milliseconds: 2500), int retryCount = 4, }) async { return Future.any( List.generate(retryCount, (i) { if (i == 0) return inner(); return Future.delayed( Duration(milliseconds: timeout.inMilliseconds * i), inner, ); }), ); } static String toSafeFileName(String str) { return str.replaceAll(RegExp(r'[/\?%*:|"<>]'), ' '); } }