105 lines
3.1 KiB
Dart
105 lines
3.1 KiB
Dart
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<void> 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<void> 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();
|
|
}
|
|
}
|