import 'dart:math'; import 'package:shared_preferences/shared_preferences.dart'; /// Identificador estable de este dispositivo. /// /// Nearby Connections asigna un `endpointId` nuevo en cada conexión, así que no /// sirve para reconocer a un móvil que se reconecta. Este id se guarda en disco /// y sobrevive a caídas de conexión, cierres de la app y reinicios. class IdentidadDispositivo { static const _clave = 'dispositivo.id'; static String? _cache; /// Devuelve el id del dispositivo, creándolo la primera vez. static Future obtener() async { final cacheado = _cache; if (cacheado != null) return cacheado; final prefs = await SharedPreferences.getInstance(); final guardado = prefs.getString(_clave); if (guardado != null && guardado.isNotEmpty) { _cache = guardado; return guardado; } final nuevo = _generar(); await prefs.setString(_clave, nuevo); _cache = nuevo; return nuevo; } /// Id ya cargado en memoria, si existe. Útil donde no se puede esperar. static String? get cacheado => _cache; static String _generar() { final rng = Random.secure(); final bytes = List.generate(8, (_) => rng.nextInt(256)); final hex = bytes .map((b) => b.toRadixString(16).padLeft(2, '0')) .join(); return 'dev-$hex'; } /// Solo para pruebas: fija el id en memoria sin tocar disco. static void fijarParaPruebas(String? id) => _cache = id; }