Menu
CoddyTech

getter pada class-mu

Termasuk bagian Pengelolaan State dalam perjalanan Flutter di Coddy. Pelajaran 6 dari 27.

Beberapa nilai tidak perlu disimpan karena nilainya berasal dari nilai lain. Jumlah gelas yang tersisa adalah target dikurangi jumlah gelas yang sudah diminum. Getter menghitungnya setiap kali kamu memintanya:

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

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

Getter memiliki tipe, kata get, dan nama, tanpa tanda kurung. => berarti "hasilnya adalah". Kamu membacanya seperti field: log.left, bukan log.left().

Field akan menyimpan angka sejak angka itu ditetapkan. Getter dihitung ulang setiap kali dibaca, jadi nilainya tidak pernah kedaluwarsa: minum satu gelas dan log.left berkurang satu pada build berikutnya.

challenge icon

Tantangan

Mudah

Halaman ini menghitung sendiri, dan setelah target tercapai, jumlahnya menjadi kurang dari nol. Pindahkan aturan ke WaterLog:

  • Tambahkan getter left: target dikurangi jumlah gelas.
  • Tambahkan getter done: bernilai true setelah jumlah gelas mencapai target.
  • Tampilkan Goal reached! saat log.done bernilai benar, dan jika tidak, tampilkan 8 to go, 7 to go, dan seterusnya berdasarkan log.left.

Coba sendiri

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 iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pengelolaan State

Latihan sendiri: Compiler Flutter online