Gettery w Twoich klasach
Część sekcji Zarządzanie stanem ścieżki Flutter w Coddy. Lekcja 6 z 27.
Niektórych wartości nie trzeba przechowywać, ponieważ wynikają z innych. Liczba pozostałych szklanek to cel minus liczba wypitych do tej pory szklanek. Getter oblicza ją za każdym razem, gdy o nią pytasz:
class WaterLog {
int glasses = 0;
int goal = 8;
int get left => goal - glasses;
bool get done => glasses >= goal;
}Getter ma typ, słowo get i nazwę, bez nawiasów. => oznacza „wynik to”. Odczytujesz go jak pole: log.left, nigdy log.left().
Pole przechowywałoby liczbę z momentu, w którym została ustawiona. Getter jest obliczany ponownie przy każdym odczycie, więc nigdy nie jest nieaktualny: wypij szklankę, a przy następnym przebudowaniu log.left będzie mniejsze o jeden.
Wyzwanie
ŁatwyStrona sama wykonuje obliczenia, a po osiągnięciu celu wynik spada poniżej zera. Przenieś reguły do WaterLog:
- Dodaj getter
left: cel minus liczba szklanek. - Dodaj getter
done:true, gdy liczba szklanek osiągnie cel. - Wyświetl
Goal reached!, gdylog.donema wartość true, a w przeciwnym razie8 to go,7 to goi tak dalej, korzystając zlog.left.
Spróbuj swoich sił
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class WaterLog {
int glasses = 0;
int goal = 8;
void drink() {
glasses = glasses + 1;
}
}
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 log = WaterLog();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Water')),
body: Center(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Text(
'${log.goal - log.glasses} to go',
style: const TextStyle(fontSize: 32),
),
const SizedBox(height: 16),
ElevatedButton(
onPressed: () {
setState(() {
log.drink();
});
},
child: const Text('Drink a glass'),
),
],
),
),
);
}
}
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Zarządzanie stanem
2Dart dla modeli
Metody w Twoich klasachGettery w Twoich klasachUczyń pole prywatnymSumowanie listy za pomocą foldPoćwicz samodzielnie: Kompilator Flutter online