import 'package:flutter/foundation.dart'; import 'package:shared_preferences/shared_preferences.dart'; class PerfilUsuario { final String nombre; final String nick; final String avatarAsset; const PerfilUsuario({ required this.nombre, required this.nick, required this.avatarAsset, }); PerfilUsuario copiar({String? nombre, String? nick, String? avatarAsset}) { return PerfilUsuario( nombre: nombre ?? this.nombre, nick: nick ?? this.nick, avatarAsset: avatarAsset ?? this.avatarAsset, ); } } class ServicioPerfilUsuario extends ChangeNotifier { static const _claveNombre = 'perfil.nombre'; static const _claveNick = 'perfil.nick'; static const _claveAvatar = 'perfil.avatar'; static const avatares = [ 'assets/avatars/avatar_01.png', 'assets/avatars/avatar_02.png', 'assets/avatars/avatar_03.png', 'assets/avatars/avatar_04.png', 'assets/avatars/avatar_05.png', 'assets/avatars/avatar_06.png', 'assets/avatars/avatar_07.png', 'assets/avatars/avatar_08.png', 'assets/avatars/avatar_09.png', 'assets/avatars/avatar_10.png', 'assets/avatars/avatar_11.png', 'assets/avatars/avatar_12.png', 'assets/avatars/avatar_13.png', 'assets/avatars/avatar_14.png', 'assets/avatars/avatar_15.png', 'assets/avatars/avatar_16.png', 'assets/avatars/avatar_17.png', 'assets/avatars/avatar_18.png', 'assets/avatars/avatar_19.png', 'assets/avatars/avatar_20.png', 'assets/avatars/avatar_21.png', 'assets/avatars/avatar_22.png', 'assets/avatars/avatar_23.png', 'assets/avatars/avatar_24.png', 'assets/avatars/avatar_25.png', 'assets/avatars/avatar_26.png', 'assets/avatars/avatar_27.png', 'assets/avatars/avatar_28.png', 'assets/avatars/avatar_29.png', 'assets/avatars/avatar_30.png', ]; PerfilUsuario _perfil = const PerfilUsuario( nombre: 'Jugador', nick: 'farolero', avatarAsset: 'assets/avatars/avatar_01.png', ); bool _cargado = false; PerfilUsuario get perfil => _perfil; bool get cargado => _cargado; Future cargar() async { final prefs = await SharedPreferences.getInstance(); _perfil = PerfilUsuario( nombre: prefs.getString(_claveNombre) ?? _perfil.nombre, nick: prefs.getString(_claveNick) ?? _perfil.nick, avatarAsset: prefs.getString(_claveAvatar) ?? _perfil.avatarAsset, ); _cargado = true; notifyListeners(); } Future guardar({ required String nombre, required String nick, required String avatarAsset, }) async { final nombreLimpio = nombre.trim().isEmpty ? 'Jugador' : nombre.trim(); final nickLimpio = nick.trim().isEmpty ? 'farolero' : nick.trim(); final avatarSeguro = avatares.contains(avatarAsset) ? avatarAsset : avatares.first; _perfil = PerfilUsuario( nombre: nombreLimpio, nick: nickLimpio, avatarAsset: avatarSeguro, ); final prefs = await SharedPreferences.getInstance(); await prefs.setString(_claveNombre, _perfil.nombre); await prefs.setString(_claveNick, _perfil.nick); await prefs.setString(_claveAvatar, _perfil.avatarAsset); notifyListeners(); } }