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

parent a51d34d9
......@@ -14,27 +14,32 @@ class Dificultad {
final int limiteInferior;
final int limiteSuperior;
final int intentos;
final String nombre;
const Dificultad({
required this.limiteInferior,
required this.limiteSuperior,
required this.intentos
required this.intentos,
required this.nombre
});
static final Dificultad facil = const Dificultad(
limiteInferior: 1,
limiteSuperior: 100,
intentos: 20
intentos: 20,
nombre: "Fácil",
);
static final Dificultad normal = const Dificultad(
limiteInferior: 1,
limiteSuperior: 500,
intentos: 35,
nombre: "Normal",
);
static final Dificultad dificil = const Dificultad(
limiteInferior: 1,
limiteSuperior: 1000,
intentos: 50
intentos: 50,
nombre: "Difícil",
);
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 'peponator_record.dart';
export 'dificultad.dart';
export 'partida.dart';
\ No newline at end of file
export 'partida.dart';
export 'listaDificultad.dart';
\ No newline at end of file
export 'pantalla_juego.dart';
export 'pantalla_records.dart';
\ No newline at end of file
export 'pantalla_records.dart';
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:peponator/modelo/listaDificultad.dart';
import 'package:provider/provider.dart';
import 'package:peponator/paginas/paginas.dart';
import 'package:peponator/paginas/pantalla_dificultad.dart';
import 'package:peponator/paginas/pantalla_juego.dart';
class PeponatorApp extends StatelessWidget {
......@@ -17,7 +20,13 @@ class PeponatorApp extends StatelessWidget {
),
darkTheme: ThemeData.dark(),
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';
export 'peponator_mensaje.dart';
export 'pista_widget.dart';
export 'teclado_numerico.dart';
export 'pantalla_pausa.dart';
\ No newline at end of file
export 'pantalla_pausa.dart';
export 'dificultad_dialog.dart';
export 'widget_dificultad.dart';
\ No newline at end of file
......@@ -36,6 +36,8 @@ dependencies:
cupertino_icons: ^1.0.8
shared_preferences: ^2.5.3
path_provider: ^2.1.5
provider: ^6.1.5
uuid: ^4.5.1
dev_dependencies:
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