1
resposta

Erro no Flutter / Validator / Aula 5 atividade 3

Ola programadores. Estou com uma dúvida. Ao seguir o passo a passo do instrutor Kako na Aula 5 Atividade 3 , me deparei com um erro. (que já até foi solucionado e respondido pelo mesmo aqui: https://cursos.alura.com.br/forum/topico-duvida-difficultyvalidator-255269

no caso da aula em questao, para evitar ficar fazendo validacoes repetitivas, foi criada uma função booleana.

bool valueValidator(String? value) {
    if (value != null && value.isEmpty) {
      return true;
    }
    return false;
  }

Sem problemas aqui. Porém na hora de fazer o difficultyValidator, o mesmo continha um erro.

bool difficultyValidator(String? value) {
    if(value != null && value.isEmpty){
      if (int.parse(value) < 1 || int.parse(value) > 5) {
        return true;
      }
    }
    return false;
  }

e o próprio KAKO resolveu em sequencia

bool difficultyValidator(String? value){
    if(value!.isEmpty || int.parse(value) > 5 ||
        int.parse(value) < 1){
        return true;
    }
    return false;
  }

Acontece que, mesmo somente tendo erro no difficultyValidator, quando eu rodava meu app no emulador, e deixava tudo em branco e apartava o botao do formulário, somente o campo nome acusava o erro. O validator da URL não acusava erro algum.

ao alterar o código do difficultyValidator, o validador da URL voltou a funcionar normalmente, mesmo não utilizando a funcao defeituosa, e sim a mesma do nome mesmo. Eu nao entendo o motivo. algum colega poderia me ajudar?

1 resposta

Oi Bruno, tudo bem?

Desculpe a demora em retornar.

Entendo sua dúvida e posso te ajudar a entender o motivo desse comportamento.

No código original do difficultyValidator, o erro estava na condição int.parse(value) < 1 || int.parse(value) > 5. Essa condição verifica se o valor é menor que 1 ou maior que 5, e caso seja verdadeira, retorna true. Porém, se o valor for nulo ou vazio, essa condição não é avaliada, pois está dentro do if(value != null && value.isEmpty). Isso significa que, se o campo estiver vazio, a condição int.parse(value) < 1 || int.parse(value) > 5 não será executada e o valor retornado será false.

Ao corrigir o código para if(value!.isEmpty || int.parse(value) > 5 || int.parse(value) < 1), a condição value!.isEmpty é avaliada primeiro. Se o campo estiver vazio, a função retorna true imediatamente, sem avaliar as outras condições. Isso faz com que o validador da URL também seja acionado corretamente quando o campo está vazio.

Portanto, ao utilizar a função corrigida do difficultyValidator, o validador da URL volta a funcionar normalmente porque agora a condição de campo vazio é verificada corretamente.

Espero ter ajudado a esclarecer sua dúvida!

Um abraço e bons estudos.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software