Ahora se guarda la dificultad en las preferencias

parent 85fe25b0
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 {
......@@ -8,13 +9,30 @@ class ListaDificultad extends ChangeNotifier {
Dificultad.normal,
Dificultad.dificil
];
int _indiceSeleccionado = 0;
bool _cargando = true;
ListaDificultad() {
_getDificultadPreferencias();
}
List<Dificultad> get dificultades => List.unmodifiable(_dificultades);
int get length => _dificultades.length;
int get indiceSeleccionado => _indiceSeleccionado;
Dificultad get seleccionada => _dificultades[_indiceSeleccionado];
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];
}
......@@ -34,8 +52,11 @@ class ListaDificultad extends ChangeNotifier {
notifyListeners();
}
void select(int indice) {
void select(int indice) async {
_indiceSeleccionado = indice;
notifyListeners();
final prefs = await SharedPreferences.getInstance();
prefs.setInt("dificultad", _indiceSeleccionado);
}
}
\ No newline at end of file
......@@ -10,12 +10,15 @@ class PantallaDificultad extends StatelessWidget {
return Consumer<ListaDificultad>(
builder: (context, manager, child) {
return SafeArea(
child: ListView.separated(
child: manager.listo
? ListView.separated(
itemBuilder: (context, index) {
return DificultadWidget(indice: index,);
},
separatorBuilder: (context, index) => const SizedBox(height: 8),
itemCount: manager.length)
itemCount: manager.length
)
: CircularProgressIndicator()
);
}
);
......
......@@ -10,7 +10,6 @@ import 'package:peponator/modelo/pista.dart';
import 'package:peponator/paginas/paginas.dart';
import 'package:peponator/widgets/pantalla_pausa.dart';
import 'package:peponator/widgets/peponator_mensaje.dart';
import 'dart:math';
import 'package:peponator/widgets/teclado_numerico.dart';
import 'package:peponator/widgets/tu_mensaje.dart';
......@@ -37,6 +36,7 @@ class _PantallaJuegoState extends State<PantallaJuego>
double animatedValue = 0.0;
bool _updateMaximum = false;
late Dificultad dificultad;
late int limiteInferior;
late int limiteSuperior;
......@@ -50,8 +50,8 @@ class _PantallaJuegoState extends State<PantallaJuego>
late bool manoDerecha = true;
List<Pista> pistas = [];
late bool mostrarPistas;
late bool todasPistasBien;
bool mostrarPistas = false;
late bool todasPistasBien ;
late bool porDesbloquear;
late bool algunaDesbloqueada;
......@@ -71,9 +71,6 @@ class _PantallaJuegoState extends State<PantallaJuego>
super.initState();
_loadRecords();
ListaDificultad dificultades = context.read<ListaDificultad>();
dificultad = dificultades.seleccionada;
recordTextController.addListener(() =>
setState(() {
jugador = recordTextController.text;
......@@ -89,12 +86,9 @@ class _PantallaJuegoState extends State<PantallaJuego>
animatedValue = _controller.value;
});
});
_nuevaPartida();
}
void _nuevaPartida(){
setState(() {
textController.clear();
mensajes.clear();
pistas.clear();
......@@ -125,7 +119,8 @@ class _PantallaJuegoState extends State<PantallaJuego>
));
}
mensajes.add(PeponatorMensaje(message: "¡Hola! Estoy pensando en un número del $limiteInferior al $limiteSuperior. ¿Te crees capaz de adivinarlo?"));
mensajes.add(PeponatorMensaje(message: "¡Hola! Estoy pensando en un número "
"del $limiteInferior al $limiteSuperior. ¿Te crees capaz de adivinarlo?"));
mostrarPistas = false;
todasPistasBien = false;
......@@ -139,7 +134,6 @@ class _PantallaJuegoState extends State<PantallaJuego>
puntuacion = 0;
posicion = PantallaRecords.maxRecords;
jugador = "";
});
}
void _cambiarDificultadPausa() async {
......@@ -166,13 +160,10 @@ class _PantallaJuegoState extends State<PantallaJuego>
super.dispose();
}
@override
Widget build(BuildContext context) {
return OrientationBuilder(
builder: (context, orientation) {
return Scaffold(
backgroundColor: (mostrarPistas)? Theme.of(context).colorScheme.surfaceDim : null,
body: SafeArea(
Widget _buildPaginaJuego(BuildContext context, Orientation orientation) {
dificultad = context.read<ListaDificultad>().seleccionada;
_nuevaPartida();
return SafeArea(
child: Stack(
children: [
Positioned(
......@@ -212,7 +203,7 @@ class _PantallaJuegoState extends State<PantallaJuego>
});
break;
case OpcionPausa.nuevaPartida:
_nuevaPartida();
setState(() {_nuevaPartida();});
break;
case OpcionPausa.cambiarDificultad:
_cambiarDificultadPausa();
......@@ -267,10 +258,21 @@ class _PantallaJuegoState extends State<PantallaJuego>
)
],
)
),
);
}
@override
Widget build(BuildContext context) {
return Consumer<ListaDificultad>(builder: (context, manager, child) {
return OrientationBuilder(builder: (context, orientation) {
return Scaffold(
backgroundColor: (mostrarPistas)? Theme.of(context).colorScheme.surfaceDim : null,
body: manager.listo
? _buildPaginaJuego(context, orientation)
: CircularProgressIndicator()
);
});
});
}
void _scrollDown() {
......
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