Menu
CoddyTech

fold ile Bir Listeyi Toplayın

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

Gider listesinin toplamına ihtiyaç var. Bir döngü kurup değerleri toplayabilirsin, ancak bir listenin bunu tam olarak yapan bir metodu vardır: fold. Liste boyunca ilerler ve bir değeri öğeden öğeye taşır:

double total = expenses.fold(0.0, (sum, e) => sum + e.amount);

Şöyle oku: 0.0 ile başla. Her gider için e, yeni sum eski sum ile e.amount değerinin toplamıdır. Liste tamamlandığında, son sum sonuçtur. 3.5 ve 12 için bu değerler sırasıyla 0.0, ardından 3.5, ardından 15.5 olur.

Fonksiyon yeni toplamı döndürmelidir. Yalnızca e.amount değerini döndürürse her adım bir öncekini unutur ve "toplam" son fiyat olur.

Listenin kendisi değişebilir: setState içindeki expenses.add(...) bir öğe daha ekler ve sonraki derlemede yeni listenin toplamı hesaplanır.

challenge icon

Görev

Kolay

Toplam satırında her zaman $0.00 yazıyor. Bunun yerine hesapla:

  • Her giderin amount değerini ekleyerek expenses.fold ile total değerini ayarla.

Satır zaten değeri 2 ondalık basamakla gösteriyor; bu nedenle Total: $15.50 yazmalı ve bir atıştırmalık eklediğinde artmalı.

Kendin dene

import 'package:flutter/material.dart';

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

class Expense {
  Expense({required this.name, required this.amount});

  final String name;
  final double 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 List<Expense> expenses = [
    Expense(name: 'Coffee', amount: 3.5),
    Expense(name: 'Lunch', amount: 12),
  ];

  @override
  Widget build(BuildContext context) {
    double total = 0;
    return Scaffold(
      appBar: AppBar(title: const Text('Expenses')),
      body: Center(
        child: Column(
          mainAxisSize: MainAxisSize.min,
          children: [
            for (final e in expenses) Text('${e.name}: \$${e.amount.toStringAsFixed(2)}'),
            const SizedBox(height: 16),
            Text('Total: \$${total.toStringAsFixed(2)}', style: const TextStyle(fontSize: 28)),
            const SizedBox(height: 16),
            ElevatedButton(
              onPressed: () {
                setState(() {
                  expenses.add(Expense(name: 'Snack', amount: 2.25));
                });
              },
              child: const Text('Add a snack'),
            ),
          ],
        ),
      ),
    );
  }
}
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