Menu
CoddyTech

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

challenge icon

Görev

Orta

Düğmeler, herhangi bir sınır olmadan degrees değerini doğrudan sayfadan değiştiriyor. thermostat.dart içinde:

  • Alanı _degrees olarak yeniden adlandır ve bu değeri döndüren bir degrees getter'ı ekle.
  • 26'ya kadar 1 artıran warmer() ve 16'ya kadar 1 azaltan cooler() 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'),
                ),
              ],
            ),
          ],
        ),
      ),
    );
  }
}
quiz iconKendini test et

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

Kendi başına pratik yap: Online Flutter derleyicisi