Menu
CoddyTech

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.

challenge icon

Sfida

Medio

I pulsanti modificano degrees direttamente dalla pagina, senza limiti. In thermostat.dart:

  • Rinomina il campo in _degrees e aggiungi un getter degrees che lo restituisce.
  • Aggiungi warmer(), che aggiunge 1 fino a 26, e cooler(), 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'),
                ),
              ],
            ),
          ],
        ),
      ),
    );
  }
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Gestione dello stato

Esercitati da solo: Compilatore Flutter online