Menu
CoddyTech

Uczyń pole prywatnym

Część sekcji Zarządzanie stanem ścieżki Flutter w Coddy. Lekcja 7 z 27.

Termostat nigdy nie powinien wskazywać więcej niż 26 ani mniej niż 16 stopni. Metoda warmer może to sprawdzać, ale tylko wtedy, gdy nikt nie może zmienić tej liczby w inny sposób. Gdy pole jest publiczne, dowolny kod może wykonać zapis thermostat.degrees = 99.

Nazwa zaczynająca się od _ jest prywatna: może jej używać tylko kod w tym samym pliku. Umieść klasę we własnym pliku, ustaw pole jako prywatne i udostępnij na zewnątrz getter do odczytu oraz metody do wprowadzania zmian:

// thermostat.dart
class Thermostat {
  int _degrees = 20;

  int get degrees => _degrees;

  void warmer() {
    if (_degrees < 26) {
      _degrees = _degrees + 1;
    }
  }
}

Strona importuje plik za pomocą import 'thermostat.dart';. Może odczytać thermostat.degrees, ale thermostat.degrees++ nie kompiluje się już: istnieje getter, ale nie ma możliwości ustawienia wartości. Jedynym sposobem zmiany temperatury jest użycie metod, dzięki czemu podane limity są zawsze zachowane.

Otwórz thermostat.dart na liście plików, aby go edytować.

challenge icon

Wyzwanie

Średni

Przyciski zmieniają degrees bezpośrednio na stronie, bez żadnych ograniczeń. W pliku thermostat.dart:

  • Zmień nazwę pola na _degrees i dodaj getter degrees, który je zwraca.
  • Dodaj warmer(), które zwiększa wartość o 1, aż do 26, oraz cooler(), które zmniejsza ją o 1, aż do 16.

Następnie spraw, aby przyciski w pliku main.dart wywoływały thermostat.warmer() i thermostat.cooler().

Spróbuj swoich sił

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 iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Zarządzanie stanem

Poćwicz samodzielnie: Kompilator Flutter online