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.
Tantangan
SedangTombol mengubah degrees langsung dari halaman, tanpa batas. Di thermostat.dart:
- Ganti nama field menjadi
_degreesdan tambahkan getterdegreesyang mengembalikannya. - Tambahkan
warmer(), yang menambahkan 1 hingga 26, dancooler(), 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'),
),
],
),
],
),
),
);
}
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pengelolaan State
2Dart untuk Model
method pada class-mugetter pada class-muJaga field tetap privatJumlahkan list dengan foldLatihan sendiri: Compiler Flutter online