Getters nas suas classes
Parte da seção Gerenciamento de estado do Journey de Flutter da Coddy. Lição 6 de 27.
Alguns valores não precisam ser armazenados, porque podem ser deduzidos de outros. A quantidade de copos que restam é a meta menos os copos consumidos até agora. Um getter calcula esse valor cada vez que você pergunta:
class WaterLog {
int glasses = 0;
int goal = 8;
int get left => goal - glasses;
bool get done => glasses >= goal;
}Um getter tem um tipo, a palavra get e um nome, sem parênteses. => significa "o resultado é". Você o acessa como um campo: log.left, nunca log.left().
Um campo manteria o número definido no momento em que foi atribuído. Um getter é recalculado a cada leitura, então nunca fica desatualizado: beba um copo e log.left será um a menos na próxima compilação.
Desafio
FácilA página faz as contas por conta própria e, quando a meta é atingida, a contagem fica abaixo de zero. Mova as regras para WaterLog:
- Adicione um getter
left: a meta menos os copos. - Adicione um getter
done:truequando a quantidade de copos atingir a meta. - Exiba
Goal reached!quandolog.donefor verdadeiro e, caso contrário,8 to go,7 to goe assim por diante, usandolog.left.
Experimente você mesmo
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'),
),
],
),
),
);
}
}
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Gerenciamento de estado
2Dart para Modelos
Métodos nas suas classesGetters nas suas classesMantenha um campo privadoSome os elementos de uma lista com foldPratique por conta própria: Compilador de Flutter online