Getters en tus clases
Parte de la sección Gestión del estado del Journey de Flutter de Coddy. Lección 6 de 27.
Algunos valores no necesitan almacenarse, porque se derivan de otros. La cantidad de vasos que quedan es la meta menos los vasos que llevas. Un getter lo calcula cada vez que lo consultas:
class WaterLog {
int glasses = 0;
int goal = 8;
int get left => goal - glasses;
bool get done => glasses >= goal;
}Un getter tiene un tipo, la palabra get y un nombre, sin paréntesis. => significa «el resultado es». Se lee como un campo: log.left, nunca log.left().
Un campo conservaría el número desde el momento en que se asignó. Un getter se vuelve a calcular en cada lectura, así que nunca queda desactualizado: bebe un vaso y log.left será uno menos en la siguiente compilación.
Desafío
FácilLa página hace los cálculos por sí sola y, una vez alcanzada la meta, el contador queda por debajo de cero. Traslada las reglas a WaterLog:
- Añade un getter
left: la meta menos los vasos. - Añade un getter
done:trueuna vez que los vasos alcanzan la meta. - Muestra
Goal reached!cuandolog.donesea verdadero y, de lo contrario,8 to go,7 to go, y así sucesivamente, a partir delog.left.
Pruébalo tú mismo
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class WaterLog {
int glasses = 0;
int goal = 8;
void drink() {
glasses = glasses + 1;
}
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return const MaterialApp(
debugShowCheckedModeBanner: false,
home: HomePage(),
);
}
}
class HomePage extends StatefulWidget {
const HomePage({super.key});
@override
State<HomePage> createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
final log = WaterLog();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Water')),
body: Center(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Text(
'${log.goal - log.glasses} to go',
style: const TextStyle(fontSize: 32),
),
const SizedBox(height: 16),
ElevatedButton(
onPressed: () {
setState(() {
log.drink();
});
},
child: const Text('Drink a glass'),
),
],
),
),
);
}
}
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Gestión del estado
2Dart para modelos
Métodos en tus clasesGetters en tus clasesMantén un campo privadoSuma una lista con foldPractica por tu cuenta: Compilador de Flutter online