1
resposta

erro no tryParse

ElevatedButton(
            onPressed: () {
              debugPrint('clicou no confirmar');
              final int numeroConta = int.tryParse(_textControllerNumConta.text);
              final double valor = double.tryParse(_textControllerValor.text);
              Transferencia(valor, numeroConta);
            }

erro

final int numeroConta = int.tryParse(_textControllerNumConta.text);
 final double valor = double.tryParse(_textControllerValor.text);

o erro esta aparendo nos duas linhas onde faço a conversão de String para int/double sendo que esta igual ao do instrutror e ja tentei usar o toString() não funciona.

O tryParsenão esta funcionando mas o parse esta

1 resposta

Fala Sandro, tudo certo?

Na verdade faz sentido o erro, e tá na diferença no que faz o parse e tryParse.

O tryParse ele TENTA converter. O que quer dizer que ele assume que pode retornar ou um número de fato, caso a string seja numérica, ou um null caso ele não consiga converter.

Então, o problema é que desde de Fevereiro de 2021 (com o Flutter 2), Flutter passou a ter Segurança Contra Nulos, o que quer dizer que que um double não pode receber um null. Para isso existe agora o double? que é um tipo igual ao double, mas que permite nulos. (Isso se aplica a TODOS os tipos).


Então, em resumo, para resolver seu problema basta trocar os double por double?:

final int? numeroConta = int.tryParse(_textControllerNumConta.text);
final double? valor = double.tryParse(_textControllerValor.text);

Lembre-se que é bom testar depois, quando for usar, se o valor na variável é diferente de nulo. E usar ! para chamar pedir a ele o valor, se você já souber que não é nulo. Tipo isso:

if (valor != null){
        valor = valor! + 1; //valor = valor + 1, sem a exclamação, não funciona.
}

OUUUU, você usa o parse mesmo, se você garantir que nenhuma string não numéria será passada.

Pois o parse ele SEMPRE converterá para double, pois você garante que passará uma string numérica. Caso não passe, ao invés de retornar um nulo, ele levantará um erro!


No resumo é isso, espero ter sido claro, e qualquer coisa estamos aê!