import 'dart:math'; import '../../application/application.dart'; final class SystemClock implements Clock { const SystemClock(); @override DateTime now() => DateTime.now().toUtc(); } final class UuidV4Generator implements IdGenerator { UuidV4Generator({Random? random}) : _random = random ?? Random.secure(); final Random _random; @override String newId() { final bytes = List.generate(16, (_) => _random.nextInt(256)); bytes[6] = (bytes[6] & 0x0f) | 0x40; bytes[8] = (bytes[8] & 0x3f) | 0x80; final hex = bytes.map((byte) => byte.toRadixString(16).padLeft(2, '0')); final value = hex.join(); return [ value.substring(0, 8), value.substring(8, 12), value.substring(12, 16), value.substring(16, 20), value.substring(20), ].join('-'); } }