Mantenha um campo privado
Parte da seção Gerenciamento de estado do Journey de Flutter da Coddy. Lição 7 de 27.
Um termostato nunca deve ultrapassar 26 nem ficar abaixo de 16 graus. Um método warmer pode verificar isso, mas somente se ninguém puder alterar o número de outra maneira. Enquanto o campo for público, qualquer código pode escrever thermostat.degrees = 99.
Um nome que começa com _ é privado: somente o código no mesmo arquivo pode usá-lo. Coloque a classe em seu próprio arquivo, torne o campo privado e forneça ao código externo um getter para lê-lo e métodos para alterá-lo:
// thermostat.dart
class Thermostat {
int _degrees = 20;
int get degrees => _degrees;
void warmer() {
if (_degrees < 26) {
_degrees = _degrees + 1;
}
}
}A página importa o arquivo com import 'thermostat.dart';. Ela pode ler thermostat.degrees, mas thermostat.degrees++ não compila mais: há um getter e nenhuma maneira de definir o valor. A única maneira de alterar os graus é por meio dos métodos, então os limites são sempre respeitados.
Abra thermostat.dart na lista de arquivos para editá-lo.
Desafio
MédioOs botões alteram degrees diretamente na página, sem limites. Em thermostat.dart:
- Renomeie o campo para
_degreese adicione um getterdegreesque o retorne. - Adicione
warmer(), que aumenta o valor em 1 até 26, ecooler(), que diminui o valor em 1 até 16.
Depois, faça os botões em main.dart chamarem thermostat.warmer() e thermostat.cooler().
Experimente você mesmo
import 'package:flutter/material.dart';
import 'thermostat.dart';
void main() {
runApp(const MyApp());
}
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 thermostat = Thermostat();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Thermostat')),
body: Center(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Text('${thermostat.degrees}°C', style: const TextStyle(fontSize: 48)),
const SizedBox(height: 16),
Row(
mainAxisSize: MainAxisSize.min,
children: [
ElevatedButton(
onPressed: () {
setState(() {
thermostat.degrees--;
});
},
child: const Text('Cooler'),
),
const SizedBox(width: 16),
ElevatedButton(
onPressed: () {
setState(() {
thermostat.degrees++;
});
},
child: const Text('Warmer'),
),
],
),
],
),
),
);
}
}
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