1
resposta

Validator só funciona no nome da tarefa

Desde que foi criado o inheritedWidget o meu validator parou de funcionar. aqui estáo código com o emulador a direita

Segue o código das funções de validação e depois dos TextFormField

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

  bool DifficultyValidator(String? value){
    if(value != null && value.isEmpty){
      if(int.parse(value) > 5 ||
          int.parse(value) < 1){
        return true;
      }
    }
    return false;
  }
child: Column(
              children: [
                Padding(
                  padding: const EdgeInsets.all(8.0),
                  child: TextFormField(
                    validator: (String? value) {
                      if (ValueValidator(value)) {
                        return 'Insira o nome da tarefa';
                      }
                      return null;
                    },
                    textAlign: TextAlign.center,
                    controller: nameController,
                    decoration: InputDecoration(
                      hintText: 'Nome da Tarefa',
                      fillColor: Colors.white70,
                      border: OutlineInputBorder(),
                      filled: true,
                    ),
                  ),
                ),
                Padding(
                  padding: const EdgeInsets.all(8.0),
                  child: TextFormField(
                    validator: (String? value) {
                      if (DifficultyValidator(value)) {
                        return 'Insira uma dificuldade entre 1 e 5';
                      }
                      return null;
                    },
                    keyboardType: TextInputType.number,
                    textAlign: TextAlign.center,
                    controller: difficultyController,
                    decoration: InputDecoration(
                      hintText: 'Dificuldade',
                      fillColor: Colors.white70,
                      border: OutlineInputBorder(),
                      filled: true,
                    ),
                  ),
                ),
                Padding(
                  padding: const EdgeInsets.all(8.0),
                  child: TextFormField(
                    validator: (String? value) {
                      if (ValueValidator(value)) {
                        return 'Insira uma URL válida';
                      }
                      return null;
                    },
                    keyboardType: TextInputType.url,
                    onChanged: (text) {
                      setState(() {});
                    },
                    textAlign: TextAlign.center,
                    controller: imageController,
                    decoration: InputDecoration(
                      hintText: 'URL da imagem',
                      fillColor: Colors.white70,
                      border: OutlineInputBorder(),
                      filled: true,
                    ),
                  ),
                ),
1 resposta

Olá Otávio!

Pelo que pude observar no código das funções de validação, parece haver um pequeno problema com a lógica implementada na função DifficultyValidator. O trecho de código que verifica se o valor está entre 1 e 5 está dentro de um bloco condicional que só é executado se o valor for nulo ou vazio, o que não faz sentido para a validação que você deseja realizar. Além disso, o método ValueValidator está retornando true quando o valor é nulo ou vazio, o que indica que o valor é válido, quando na verdade deveria indicar o contrário.

Aqui está uma sugestão de como você poderia reescrever as funções de validação para corrigir esses problemas:

bool ValueValidator(String? value){
  // Retorna true se o valor for nulo ou vazio, indicando que não é válido.
  return value == null || value.isEmpty;
}

bool DifficultyValidator(String? value){
  // Primeiro, verifica se o valor é nulo ou vazio.
  if(value == null || value.isEmpty){
    return true; // Não é válido.
  }
  // Depois, tenta converter o valor para um número e verifica se está no intervalo correto.
  try {
    final int difficulty = int.parse(value);
    return difficulty < 1 || difficulty > 5;
  } catch (e) {
    return true; // Não é válido se não for um número.
  }
}

Com essas alterações, a função ValueValidator agora retorna true se o valor não for válido (ou seja, se for nulo ou vazio), e a função DifficultyValidator verifica corretamente se o valor está entre 1 e 5, retornando true se não for válido.

Lembre-se de que o validator nos TextFormField deve retornar uma mensagem de erro quando o valor não for válido, e null quando for válido. Portanto, certifique-se de que as funções de validação estejam sendo usadas corretamente dentro do validator de cada TextFormField.

Espero ter ajudado e bons estudos!