Gestión de usuarios y avatares en la aplicación. Gestión de traducciones de las palabras.
This commit is contained in:
104
lib/servicios/servicio_perfil_usuario.dart
Normal file
104
lib/servicios/servicio_perfil_usuario.dart
Normal file
@@ -0,0 +1,104 @@
|
||||
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();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user