Menu
CoddyTech

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.

challenge icon

Aufgabe

Mittel

Die Schaltflächen ändern degrees direkt auf der Seite, ohne Begrenzung. In thermostat.dart:

  • Benennen Sie das Feld in _degrees um und fügen Sie einen Getter degrees hinzu, der es zurückgibt.
  • Fügen Sie warmer() hinzu, das den Wert bis auf 26 um 1 erhöht, und cooler(), 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'),
                ),
              ],
            ),
          ],
        ),
      ),
    );
  }
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in State Management

Übe selbstständig: Online-Flutter-Compiler