Mantieni privato un campo
Fa parte della sezione Gestione dello stato del percorso Flutter di Coddy. Lezione 7 di 27.
Un termostato non dovrebbe mai superare i 26 gradi né scendere sotto i 16. Un metodo warmer può verificarlo, ma solo se nessuno può cambiare il numero in un altro modo. Finché il campo è pubblico, qualsiasi codice può scrivere thermostat.degrees = 99.
Un nome che inizia con _ è privato: solo il codice nello stesso file può usarlo. Metti la classe in un file a parte, rendi privato il campo e fornisci all'esterno un getter per leggerlo e dei metodi per modificarlo:
// thermostat.dart
class Thermostat {
int _degrees = 20;
int get degrees => _degrees;
void warmer() {
if (_degrees < 26) {
_degrees = _degrees + 1;
}
}
}La pagina importa il file con import 'thermostat.dart';. Può leggere thermostat.degrees, ma thermostat.degrees++ non viene più compilato: c'è un getter e non c'è modo di impostare il valore. L'unico modo per modificare i gradi è tramite i metodi, così i limiti vengono sempre rispettati.
Apri thermostat.dart nell'elenco dei file per modificarlo.
Sfida
MedioI pulsanti modificano degrees direttamente dalla pagina, senza limiti. In thermostat.dart:
- Rinomina il campo in
_degreese aggiungi un getterdegreesche lo restituisce. - Aggiungi
warmer(), che aggiunge 1 fino a 26, ecooler(), che sottrae 1 fino a 16.
Poi fai in modo che i pulsanti in main.dart chiamino thermostat.warmer() e thermostat.cooler().
Provalo tu
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'),
),
],
),
],
),
),
);
}
}
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Gestione dello stato
2Dart per i modelli
Metodi nelle tue classiGetter nelle tue classiMantieni privato un campoSomma una lista con foldEsercitati da solo: Compilatore Flutter online