Bom dia Renato, vamos lá:
Um Exemplo de classe com propriedade privada, mas que precisamos inserir valores nessa classe via construtor ( em que precisamos fazer uma validação para poder usar)
Classe:
Fiz uma classe de Fruta diferente, o Tomate
class Tomate{}
Parâmetro Privado
Ele tem alguns parâmetros, e um deles é privado: as sementes
class Tomate{
String? cor;
int? quantidade;
String gosto = 'Delicioso';
bool? _sementes; // variável privada.
}
Construtor
Alguns dos parâmetros são obtidos via construtor:
class Tomate{
String? cor;
int? quantidade;
String gosto = 'Delicioso';
bool? _sementes;
Tomate(this.cor,this.quantidade,this._sementes);
}
Validação
Existe uma função que usa o valor de sementes, e se esse valor true, devemos retirar as sementes, se for false, segue para comer.
eat(){
if (_sementes > 0) {
// aqui o valor _sementes pode ser nulo, o que quebra o código
print('Removendo $_sementes sementes ');
}
print('Comendo Tomate $cor');
}
para impedir de quebrar o código devemos implementar a exception:
Exception
eat() {
if (_sementes != null) { // validação do valor de sementes
if (_sementes! > 0) { // garanti que o _sementes é diferente de nulo usando Null Safety
// aqui o valor _sementes pode ser nulo, o que quebra o código
print('Removendo $_sementes sementes ');
}
print('Comendo Tomate $cor');
}else{
throw Exception('O valor das sementes é nulo');
}
}
Agora vamos testar!
Criando e usando Tomates:
void main(){
final tomate1 = Tomate('Vermelho', 1,15);
final tomate2 = Tomate('Verde', 1,0);
final tomate3 = Tomate('Preto', 1); // ta estragado
tomate1.eat();
tomate2.eat();
tomate3.eat();
}
Resultado:
Não precisamos usar o Setter, pois ninguém fora da nossa classe está alterando o valor de Sementes (e o ideal é que não tenha mesmo, lembre-se do principio de responsabilidade única das Boas práticas), quem valida é nossa própria função interna!
Se tivesse uma função externa para validar a gente usaria Setter e Getter, fica um desafio pra você Renato: como você implementaria isso? (Dica: cria uma classe Validator() com um método de validação que precisa verificar se a variavel que ele recebe não é nula [com getter] e depois retornar um novo valor pra ela [com Setter])