Mantén un campo privado
Parte de la sección Gestión del estado del Journey de Flutter de Coddy. Lección 7 de 27.
Un termostato nunca debería superar los 26 grados ni bajar de los 16. Un método warmer puede comprobarlo, pero solo si nadie puede cambiar el número de otra manera. Mientras el campo sea público, cualquier código puede escribir thermostat.degrees = 99.
Un nombre que empieza por _ es privado: solo el código del mismo archivo puede usarlo. Pon la clase en su propio archivo, haz que el campo sea privado y proporciona un getter para que se pueda leer desde fuera, además de métodos para cambiarlo:
// thermostat.dart
class Thermostat {
int _degrees = 20;
int get degrees => _degrees;
void warmer() {
if (_degrees < 26) {
_degrees = _degrees + 1;
}
}
}La página importa el archivo con import 'thermostat.dart';. Puede leer thermostat.degrees, pero thermostat.degrees++ ya no se compila: hay un getter, pero no hay forma de asignarle un valor. La única manera de cambiar los grados es mediante los métodos, así que siempre se respetan los límites.
Abre thermostat.dart en la lista de archivos para editarlo.
Desafío
IntermedioLos botones cambian degrees directamente desde la página, sin límites. En thermostat.dart:
- Cambia el nombre del campo a
_degreesy añade un getterdegreesque lo devuelva. - Añade
warmer(), que suma 1 hasta llegar a 26, ycooler(), que resta 1 hasta llegar a 16.
Después, haz que los botones de main.dart llamen a thermostat.warmer() y thermostat.cooler().
Pruébalo tú mismo
import 'package:flutter/material.dart';
import 'thermostat.dart';
void main() {
runApp(const MyApp());
}
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 thermostat = Thermostat();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Thermostat')),
body: Center(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Text('${thermostat.degrees}°C', style: const TextStyle(fontSize: 48)),
const SizedBox(height: 16),
Row(
mainAxisSize: MainAxisSize.min,
children: [
ElevatedButton(
onPressed: () {
setState(() {
thermostat.degrees--;
});
},
child: const Text('Cooler'),
),
const SizedBox(width: 16),
ElevatedButton(
onPressed: () {
setState(() {
thermostat.degrees++;
});
},
child: const Text('Warmer'),
),
],
),
],
),
),
);
}
}
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