Guardamos las dificultades custom

parent a12724e8
......@@ -23,6 +23,24 @@ class Dificultad {
int get maxIntentos => _maxIntentos;
String get nombre => _nombre;
factory Dificultad.desdeJson(Map<String, dynamic> json) {
return Dificultad(
limite: int.parse(json['limite']),
maxIntentos: int.parse(json['maxIntentos']),
nombre: json['nombre']
);
}
String toJson() {
return '''
{
"limite": "$limite",
"maxIntentos": "$maxIntentos",
"nombre": "$nombre"
}
''';
}
static final Dificultad facil = Dificultad(
limite: 100,
maxIntentos: 7+1,
......
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:peponator/modelo/dificultad.dart';
import 'package:shared_preferences/shared_preferences.dart';
// TODO: CARGAR LAS DIFICULTADES CARGADAS EN MEMORIA
class ListaDificultad extends ChangeNotifier {
final _dificultades = <Dificultad>[
Dificultad.facil,
......@@ -13,8 +14,9 @@ class ListaDificultad extends ChangeNotifier {
int _indiceSeleccionado = 0;
bool _cargando = true;
ListaDificultad() {
_getDificultadPreferencias();
_cargarDificultades();
}
List<Dificultad> get dificultades => List.unmodifiable(_dificultades);
......@@ -26,37 +28,75 @@ class ListaDificultad extends ChangeNotifier {
bool get cargando => _cargando;
bool get listo => !_cargando;
void _getDificultadPreferencias() async {
final prefs = await SharedPreferences.getInstance();
_indiceSeleccionado = prefs.getInt("dificultad") ?? 0;
_cargando = false;
notifyListeners();
}
Dificultad get(int index) {
return _dificultades[index];
}
void add(Dificultad dificultad) {
void add(Dificultad dificultad) async {
_dificultades.add(dificultad);
notifyListeners();
_actualizarPreferenciaLista();
}
void delete(int indice) {
void delete(int indice) async {
_dificultades.removeAt(indice);
if (indice <= _indiceSeleccionado) {
_indiceSeleccionado--;
}
notifyListeners();
_actualizarPreferenciaLista();
_actualizarPreferenciaSeleccionado();
}
void update(int indice, Dificultad nuevo) {
_dificultades[indice] = nuevo;
notifyListeners();
_actualizarPreferenciaLista();
}
void select(int indice) async {
_indiceSeleccionado = indice;
notifyListeners();
_actualizarPreferenciaSeleccionado();
}
void _cargarDificultades() async {
final prefs = await SharedPreferences.getInstance();
String listaDificultad = prefs.getString("listaDificultad") ?? "[]";
final List<dynamic> dificultadesJson = jsonDecode(listaDificultad);
for (var dificultadJson in dificultadesJson) {
_dificultades.add(Dificultad.desdeJson(dificultadJson));
}
_indiceSeleccionado = prefs.getInt("dificultad") ?? 0;
_cargando = false;
notifyListeners();
}
// Podría mirar el tema de usar un cache para no acceder tanto
void _actualizarPreferenciaLista() async {
final prefs = await SharedPreferences.getInstance();
await prefs.setString("listaDificultad", _listaToJson());
}
void _actualizarPreferenciaSeleccionado() async {
final prefs = await SharedPreferences.getInstance();
await prefs.setInt("dificultad", _indiceSeleccionado);
}
String _listaToJson() {
final sb = StringBuffer('[\n');
for(int i = 3; i<_dificultades.length; i++) {
sb.write(_dificultades[i].toJson());
if (i < _dificultades.length-1) {
sb.write(',\n');
} else {
sb.write('\n');
}
}
sb.write(']');
return sb.toString();
}
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment