Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Como usar o int.parse e o int.tryParse

Tive que fazer o código um pouco diferente da video aula para dar certo, mas se eu deixar os campos nulos ele retonar uma exception:

FormatException (FormatException: Invalid double
)
ElevatedButton(
            onPressed: () {
              final double valor = double.parse(controladorCampoValor.text);
              final int numeroConta = int.parse(controladorCampoNumeroConta.text);

              debugPrint('Numero da conta: $numeroConta');
              debugPrint('Valor: $valor');

              if (numeroConta != null && valor != null) {
                Transferencia(valor, numeroConta);
              }
            },

Estou usando o int.parse porque não consigo utilizar o int.tryParse fica dando erro!

Código da aula está assim:

RaisedButton(
     child: Text('Confirmar'),
     onPressed: () {
         debugPrint('clicou no confirmar');
         final int numeroConta = int.tryParse(_controladorCampoNumeroConta);
         final double valor = double.tryParse(_controladorCampoValor);
         if(numeroConta != null && valor != null){
            Transferencia(valor, numeroConta);
         }
     },
 ) 

Alguém poderia me explicar quan a diferença entre o int.parse e int.tryparse e por que não estou conseguindo ussar o int.tryParse?

Aqui está o código completo da classe:

import 'package:bytebank/transferencia.dart';
import 'package:flutter/material.dart';

class FormularioTransferencia extends StatelessWidget {
  final controladorCampoNumeroConta = TextEditingController();
  final controladorCampoValor = TextEditingController();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Criando Transferência'),
      ),
      body: Column(
        children: [
          Padding(
            padding: const EdgeInsets.all(8.0),
            child: TextField(
              controller: controladorCampoNumeroConta,
              decoration: const InputDecoration(
                label: Text('Número da conta'),
                hintText: '0000',
              ),
            ),
          ),
          Padding(
            padding: const EdgeInsets.all(8.0),
            child: TextField(
              controller: controladorCampoValor,
              keyboardType: TextInputType.number,
              decoration: const InputDecoration(
                label: Text('Valor'),
                hintText: '0.00',
                icon: Icon(Icons.monetization_on_outlined),
              ),
            ),
          ),
          ElevatedButton(
            onPressed: () {
              final double valor = double.parse(controladorCampoValor.text);
              final int numeroConta =
                  int.parse(controladorCampoNumeroConta.text);

              debugPrint('Numero da conta: $numeroConta');
              debugPrint('Valor: $valor');

              if (numeroConta != null && valor != null) {
                Transferencia(valor, numeroConta);
              }
            },
            child: const Text('Confirmar'),
          ),
        ],
      ),
    );
  }
}
1 resposta
solução!

Pessoal, conseguir resolver passando a variável pra nulable, assim:

final int? numeroConta = int.tryParse(controladorCampoNumeroConta.text);
final double? valor = double.tryParse(controladorCampoValor.text);

passei "?" no tipo da variável, e deu tdo certinho!

Dei uma olhada na documentação e descubri que o "tryParse" vai retornar um null caso o valor da variavel seja nulo, já no "parse" se o valor da variável no null vai retonar um FormatError.