Menu
CoddyTech

Sınıflarınızda Metotlar

Coddy'nin Flutter Journey'sinin Durum Yönetimi bölümünün bir parçası. Ders 5 / 27.

Şimdiye kadar sınıflarınızda veri vardı: bir ad, bir fiyat. Bir sınıf, bu veriyi değiştiren kodu da içerebilir. Bir sınıfın içindeki işleve yöntem denir:

class Wallet {
  int coins = 10;

  void earn(int amount) {
    coins = coins + amount;
  }
}

Bir alan gibi, nokta kullanarak yöntem çağırın: wallet.earn(3). Yöntemin içinde coins, çağrıldığı cüzdanın alanıdır.

Sayfa wallet.coins = wallet.coins + 3 işlemini kendisi yapabilecekken neden uğraşalım? Çünkü kurallar böylece tek bir yerde bulunur. Bir cüzdanın bakiyesi asla sıfırın altına düşmemeliyse, spend yöntemi bunu denetler ve harcama yapan her düğme bu denetimden geçer.

Ekranın yeni sayıyı göstermesi için bileşen, çağrının etrafında setState çağırmaya devam eder.

challenge icon

Görev

Kolay

Şu anda Spend 5 alanındaki paraları doğrudan alıyor ve cüzdanın bakiyesi sıfırın altına düşüyor.

  • Yeterli miktar olduğunda paraları düşüren bir void spend(int amount) yöntemini Wallet sınıfına ekle.
  • Spend 5 düğmesinin, setState içinde wallet.spend(5) çağırmasını sağla.

Kendin dene

import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

class Wallet {
  int coins = 10;

  void earn(int amount) {
    coins = coins + amount;
  }
}

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 wallet = Wallet();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('Wallet')),
      body: Center(
        child: Column(
          mainAxisSize: MainAxisSize.min,
          children: [
            Text('${wallet.coins} coins', style: const TextStyle(fontSize: 32)),
            const SizedBox(height: 16),
            ElevatedButton(
              onPressed: () {
                setState(() {
                  wallet.earn(3);
                });
              },
              child: const Text('Earn 3'),
            ),
            ElevatedButton(
              onPressed: () {
                setState(() {
                  wallet.coins = wallet.coins - 5;
                });
              },
              child: const Text('Spend 5'),
            ),
          ],
        ),
      ),
    );
  }
}
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