Menu
CoddyTech

Jaga field tetap privat

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

Termostat tidak boleh melebihi 26 derajat atau kurang dari 16 derajat. Method warmer dapat memeriksa batas itu, tetapi hanya jika tidak ada yang bisa mengubah angkanya dengan cara lain. Selama field tersebut bersifat publik, kode apa pun dapat menulis thermostat.degrees = 99.

Nama yang diawali dengan _ bersifat private: hanya kode dalam file yang sama yang dapat menggunakannya. Letakkan class di filenya sendiri, buat field tersebut private, dan sediakan getter agar bagian luar bisa membacanya serta method untuk mengubahnya:

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

  int get degrees => _degrees;

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

Halaman tersebut mengimpor file dengan import 'thermostat.dart';. Halaman itu dapat membaca thermostat.degrees, tetapi thermostat.degrees++ tidak lagi bisa dikompilasi: ada getter, tetapi tidak ada cara untuk menetapkan nilainya. Satu-satunya cara untuk mengubah derajat adalah melalui method, sehingga batasnya selalu terpenuhi.

Buka thermostat.dart di daftar file untuk mengeditnya.

challenge icon

Tantangan

Sedang

Tombol mengubah degrees langsung dari halaman, tanpa batas. Di thermostat.dart:

  • Ganti nama field menjadi _degrees dan tambahkan getter degrees yang mengembalikannya.
  • Tambahkan warmer(), yang menambahkan 1 hingga 26, dan cooler(), yang mengurangi 1 hingga 16.

Lalu buat tombol di main.dart memanggil thermostat.warmer() dan thermostat.cooler().

Coba sendiri

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