Menu
CoddyTech

Gettery w Twoich klasach

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

Niektórych wartości nie trzeba przechowywać, ponieważ wynikają z innych. Liczba pozostałych szklanek to cel minus liczba wypitych do tej pory szklanek. Getter oblicza ją za każdym razem, gdy o nią pytasz:

class WaterLog {
  int glasses = 0;
  int goal = 8;

  int get left => goal - glasses;
  bool get done => glasses >= goal;
}

Getter ma typ, słowo get i nazwę, bez nawiasów. => oznacza „wynik to”. Odczytujesz go jak pole: log.left, nigdy log.left().

Pole przechowywałoby liczbę z momentu, w którym została ustawiona. Getter jest obliczany ponownie przy każdym odczycie, więc nigdy nie jest nieaktualny: wypij szklankę, a przy następnym przebudowaniu log.left będzie mniejsze o jeden.

challenge icon

Wyzwanie

Łatwy

Strona sama wykonuje obliczenia, a po osiągnięciu celu wynik spada poniżej zera. Przenieś reguły do WaterLog:

  • Dodaj getter left: cel minus liczba szklanek.
  • Dodaj getter done: true, gdy liczba szklanek osiągnie cel.
  • Wyświetl Goal reached!, gdy log.done ma wartość true, a w przeciwnym razie 8 to go, 7 to go i tak dalej, korzystając z log.left.

Spróbuj swoich sił

import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

class WaterLog {
  int glasses = 0;
  int goal = 8;

  void drink() {
    glasses = glasses + 1;
  }
}

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 log = WaterLog();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('Water')),
      body: Center(
        child: Column(
          mainAxisSize: MainAxisSize.min,
          children: [
            Text(
              '${log.goal - log.glasses} to go',
              style: const TextStyle(fontSize: 32),
            ),
            const SizedBox(height: 16),
            ElevatedButton(
              onPressed: () {
                setState(() {
                  log.drink();
                });
              },
              child: const Text('Drink a glass'),
            ),
          ],
        ),
      ),
    );
  }
}
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