Ein Feld privat halten
Teil des Abschnitts State Management der Flutter-Journey von Coddy. Lektion 7 von 27.
Ein Thermostat sollte niemals über 26 oder unter 16 Grad liegen. Eine Methode warmer kann das überprüfen, aber nur, wenn niemand die Zahl auf anderem Wege ändern kann. Solange das Feld öffentlich ist, kann jeder Code thermostat.degrees = 99 schreiben.
Ein Name, der mit _ beginnt, ist privat: Nur Code in derselben Datei kann ihn verwenden. Lege die Klasse in einer eigenen Datei ab, mache das Feld privat und stelle außen einen Getter zum Auslesen sowie Methoden zum Ändern bereit:
// thermostat.dart
class Thermostat {
int _degrees = 20;
int get degrees => _degrees;
void warmer() {
if (_degrees < 26) {
_degrees = _degrees + 1;
}
}
}Die Seite importiert die Datei mit import 'thermostat.dart';. Sie kann thermostat.degrees auslesen, aber thermostat.degrees++ wird nicht mehr kompiliert: Es gibt einen Getter und keine Möglichkeit, den Wert festzulegen. Die einzige Möglichkeit, die Gradzahl zu ändern, führt über die Methoden, sodass die Grenzwerte immer eingehalten werden.
Öffne thermostat.dart in der Dateiliste, um sie zu bearbeiten.
Aufgabe
MittelDie Schaltflächen ändern degrees direkt auf der Seite, ohne Begrenzung. In thermostat.dart:
- Benennen Sie das Feld in
_degreesum und fügen Sie einen Getterdegreeshinzu, der es zurückgibt. - Fügen Sie
warmer()hinzu, das den Wert bis auf 26 um 1 erhöht, undcooler(), das ihn bis auf 16 um 1 verringert.
Lassen Sie dann die Schaltflächen in main.dart thermostat.warmer() und thermostat.cooler() aufrufen.
Probier es selbst
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'),
),
],
),
],
),
),
);
}
}
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in State Management
2Dart für Modelle
Methoden in Ihren KlassenGetter in Ihren KlassenEin Feld privat haltenEine Liste mit fold aufsummierenÜbe selbstständig: Online-Flutter-Compiler