Garder un champ privé
Fait partie de la section Gestion d’état du Journey Flutter de Coddy. Leçon 7 sur 27.
Un thermostat ne doit jamais dépasser 26 degrés ni descendre en dessous de 16 degrés. Une méthode warmer peut vérifier cela, mais seulement si personne ne peut modifier le nombre autrement. Tant que le champ est public, n’importe quel code peut écrire thermostat.degrees = 99.
Un nom qui commence par _ est privé : seul le code du même fichier peut l’utiliser. Place la classe dans son propre fichier, rends le champ privé et donne à l’extérieur un accesseur pour le lire ainsi que des méthodes pour le modifier :
// thermostat.dart
class Thermostat {
int _degrees = 20;
int get degrees => _degrees;
void warmer() {
if (_degrees < 26) {
_degrees = _degrees + 1;
}
}
}La page importe le fichier avec import 'thermostat.dart';. Elle peut lire thermostat.degrees, mais thermostat.degrees++ ne compile plus : il y a un accesseur en lecture, mais aucun moyen de définir sa valeur. Le seul moyen de modifier les degrés est de passer par les méthodes, les limites sont donc toujours respectées.
Ouvre thermostat.dart dans la liste des fichiers pour le modifier.
Défi
MoyenLes boutons modifient directement degrees depuis la page, sans aucune limite. Dans thermostat.dart :
- Renomme le champ en
_degreeset ajoute un accesseurdegreesqui le renvoie. - Ajoute
warmer(), qui augmente la valeur de 1 jusqu’à 26, etcooler(), qui la diminue de 1 jusqu’à 16.
Fais ensuite en sorte que les boutons dans main.dart appellent thermostat.warmer() et thermostat.cooler().
Essayez vous-même
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'),
),
],
),
],
),
),
);
}
}
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Gestion d’état
Entraînez-vous par vous-même : Compilateur Flutter en ligne