Bir Alanı Gizli Tutun
Coddy'nin Flutter Journey'sinin Durum Yönetimi bölümünün bir parçası. Ders 7 / 27.
Bir termostat hiçbir zaman 26 derecenin üstüne çıkmamalı veya 16 derecenin altına düşmemelidir. Bir warmer yöntemi bunu denetleyebilir, ancak yalnızca hiç kimse sayıyı başka bir yolla değiştiremiyorsa. Alan herkese açıkken herhangi bir kod thermostat.degrees = 99 yazabilir.
_ ile başlayan bir ad özeldir: yalnızca aynı dosyadaki kod bunu kullanabilir. Sınıfı kendi dosyasına koy, alanı özel yap ve dışarıdan okunabilmesi için bir getter, değiştirilebilmesi için de yöntemler ekle:
// thermostat.dart
class Thermostat {
int _degrees = 20;
int get degrees => _degrees;
void warmer() {
if (_degrees < 26) {
_degrees = _degrees + 1;
}
}
}Sayfa, dosyayı import 'thermostat.dart'; ile içe aktarır. thermostat.degrees değerini okuyabilir, ancak thermostat.degrees++ artık derlenmez: bir getter vardır ama değeri ayarlamanın bir yolu yoktur. Dereceyi değiştirmenin tek yolu yöntemleri kullanmaktır, böylece sınırlar her zaman korunur.
Düzenlemek için dosya listesinden thermostat.dart dosyasını aç.
Görev
OrtaDüğmeler, herhangi bir sınır olmadan degrees değerini doğrudan sayfadan değiştiriyor. thermostat.dart içinde:
- Alanı
_degreesolarak yeniden adlandır ve bu değeri döndüren birdegreesgetter'ı ekle. - 26'ya kadar 1 artıran
warmer()ve 16'ya kadar 1 azaltancooler()ekle.
Ardından main.dart içindeki düğmelerin thermostat.warmer() ve thermostat.cooler() çağırmasını sağla.
Kendin dene
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'),
),
],
),
],
),
),
);
}
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Durum Yönetimi bölümündeki tüm dersler
2Modeller için Dart
Sınıflarınızda MetotlarSınıflarınızda Getter'larBir Alanı Gizli Tutunfold ile Bir Listeyi ToplayınKendi başına pratik yap: Online Flutter derleyicisi