Haciendo la página para elegir y añadir dificultades

parent a51d34d9
...@@ -14,27 +14,32 @@ class Dificultad { ...@@ -14,27 +14,32 @@ class Dificultad {
final int limiteInferior; final int limiteInferior;
final int limiteSuperior; final int limiteSuperior;
final int intentos; final int intentos;
final String nombre;
const Dificultad({ const Dificultad({
required this.limiteInferior, required this.limiteInferior,
required this.limiteSuperior, required this.limiteSuperior,
required this.intentos required this.intentos,
required this.nombre
}); });
static final Dificultad facil = const Dificultad( static final Dificultad facil = const Dificultad(
limiteInferior: 1, limiteInferior: 1,
limiteSuperior: 100, limiteSuperior: 100,
intentos: 20 intentos: 20,
nombre: "Fácil",
); );
static final Dificultad normal = const Dificultad( static final Dificultad normal = const Dificultad(
limiteInferior: 1, limiteInferior: 1,
limiteSuperior: 500, limiteSuperior: 500,
intentos: 35, intentos: 35,
nombre: "Normal",
); );
static final Dificultad dificil = const Dificultad( static final Dificultad dificil = const Dificultad(
limiteInferior: 1, limiteInferior: 1,
limiteSuperior: 1000, limiteSuperior: 1000,
intentos: 50 intentos: 50,
nombre: "Difícil",
); );
int generarNumero() => Random().nextInt(limiteSuperior) + limiteInferior; int generarNumero() => Random().nextInt(limiteSuperior) + limiteInferior;
......
import 'package:flutter/material.dart';
import 'package:peponator/modelo/dificultad.dart';
// TODO: CARGAR LAS DIFICULTADES CARGADAS EN MEMORIA
class ListaDificultad extends ChangeNotifier {
final _dificultades = <Dificultad>[
Dificultad.facil,
Dificultad.normal,
Dificultad.dificil
];
List<Dificultad> get dificultades => List.unmodifiable(_dificultades);
int get length => _dificultades.length;
Dificultad get(int index) {
return _dificultades[index];
}
void add(Dificultad dificultad) {
_dificultades.add(dificultad);
notifyListeners();
}
void delete(int indice) {
_dificultades.removeAt(indice);
notifyListeners();
}
void update(int indice, Dificultad nuevo) {
_dificultades[indice] = nuevo;
notifyListeners();
}
}
\ No newline at end of file
export 'pista.dart'; export 'pista.dart';
export 'peponator_record.dart'; export 'peponator_record.dart';
export 'dificultad.dart'; export 'dificultad.dart';
export 'partida.dart'; export 'partida.dart';
\ No newline at end of file export 'listaDificultad.dart';
\ No newline at end of file
export 'pantalla_juego.dart'; export 'pantalla_juego.dart';
export 'pantalla_records.dart'; export 'pantalla_records.dart';
\ No newline at end of file export 'pantalla_dificultad.dart';
\ No newline at end of file
import 'package:flutter/material.dart';
import 'package:peponator/modelo/modelo.dart';
import 'package:peponator/widgets/widgets.dart';
import 'package:provider/provider.dart';
class PantallaDificultad extends StatelessWidget {
const PantallaDificultad({super.key});
Widget construirListaDificultad() {
return Consumer<ListaDificultad>(
builder: (context, manager, child) {
return SafeArea(
child: ListView.separated(
itemBuilder: (context, index) {
return DificultadWidget(dificultad: manager.get(index));
},
separatorBuilder: (context, index) => const SizedBox(height: 8),
itemCount: manager.length)
);
}
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text("Selecciona dificultad"),
),
body: construirListaDificultad(),
floatingActionButton: FloatingActionButton(
child: const Icon(Icons.add),
onPressed: () {
Navigator.push(
context,
// TODO: MIRAR COMO MOSTRAR DIÁLOGO
MaterialPageRoute(
builder: (context) {
return DificultadDialog(
crearDificultad: (dificultad) {Navigator.pop(context);},
editarDificultad: (_) {},
);
}
)
);
}
),
);
}
}
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:peponator/modelo/listaDificultad.dart';
import 'package:provider/provider.dart';
import 'package:peponator/paginas/paginas.dart'; import 'package:peponator/paginas/paginas.dart';
import 'package:peponator/paginas/pantalla_dificultad.dart';
import 'package:peponator/paginas/pantalla_juego.dart'; import 'package:peponator/paginas/pantalla_juego.dart';
class PeponatorApp extends StatelessWidget { class PeponatorApp extends StatelessWidget {
...@@ -17,7 +20,13 @@ class PeponatorApp extends StatelessWidget { ...@@ -17,7 +20,13 @@ class PeponatorApp extends StatelessWidget {
), ),
darkTheme: ThemeData.dark(), darkTheme: ThemeData.dark(),
themeMode: ThemeMode.system, themeMode: ThemeMode.system,
home: PantallaJuego(fromHome: true) home: MultiProvider(
// TODO: Al implementar los preferencias habrá que leer de memoria
providers: [
ChangeNotifierProvider(create: (context) => ListaDificultad()),
],
child: PantallaDificultad(),
)
); );
} }
} }
import 'package:flutter/material.dart';
import 'package:peponator/modelo/dificultad.dart';
class DificultadDialog extends StatefulWidget {
final Dificultad? dificultad;
final Function(Dificultad) crearDificultad;
final Function(Dificultad) editarDificultad;
final bool actualizando;
const DificultadDialog({super.key, this.dificultad,
required this.crearDificultad, required this.editarDificultad}):
actualizando = (dificultad != null);
@override
State<DificultadDialog> createState() => _DificultadDialogState();
}
class _DificultadDialogState extends State<DificultadDialog> {
@override
Widget build(BuildContext context) {
return SimpleDialog(
title: Text(
widget.actualizando
? "Editar dificultad"
: "Añadir dificultad"
),
children: [
TextField(
),
TextField(
),
TextField(
),
IconButton(
onPressed: widget.actualizando
? widget.editarDificultad(widget.dificultad!)
: widget.crearDificultad(Dificultad(
limiteInferior: 1,
limiteSuperior: 69,
intentos: 10,
nombre: "Test"
)
),
icon: const Icon(Icons.check),
)
],
);
}
}
import 'package:flutter/material.dart';
import 'package:peponator/modelo/dificultad.dart';
class DificultadWidget extends StatelessWidget {
final Dificultad dificultad;
const DificultadWidget({super.key, required this.dificultad});
@override
Widget build(BuildContext context) {
return Row(
children: [
Expanded(
child: Text(dificultad.nombre)
)
],
);
}
}
...@@ -2,4 +2,6 @@ export 'tu_mensaje.dart'; ...@@ -2,4 +2,6 @@ export 'tu_mensaje.dart';
export 'peponator_mensaje.dart'; export 'peponator_mensaje.dart';
export 'pista_widget.dart'; export 'pista_widget.dart';
export 'teclado_numerico.dart'; export 'teclado_numerico.dart';
export 'pantalla_pausa.dart'; export 'pantalla_pausa.dart';
\ No newline at end of file export 'dificultad_dialog.dart';
export 'widget_dificultad.dart';
\ No newline at end of file
...@@ -36,6 +36,8 @@ dependencies: ...@@ -36,6 +36,8 @@ dependencies:
cupertino_icons: ^1.0.8 cupertino_icons: ^1.0.8
shared_preferences: ^2.5.3 shared_preferences: ^2.5.3
path_provider: ^2.1.5 path_provider: ^2.1.5
provider: ^6.1.5
uuid: ^4.5.1
dev_dependencies: dev_dependencies:
flutter_test: flutter_test:
......
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