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.
Görev
KolayToplam satırında her zaman $0.00 yazıyor. Bunun yerine hesapla:
- Her giderin
amountdeğerini ekleyerekexpenses.foldiletotaldeğ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'),
),
],
),
),
);
}
}
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