3
respostas

Dúvida: Versão atual Flutter

Quando executo o código:

            ElevatedButton(
                //Recuperando o conteúdo do campo TextField no click
                child: const Text('Confirmar'),
              onPressed: () {
                  debugPrint('clicou no confirmar');
                  final int numeroConta = int.tryParse(_conCampoNumeroConta.toString());
                  final double  valor = double.tryParse(_conCampoValor.toString());
                  debugPrint('$valor');
                  debugPrint('$numeroConta');
                  if(valor != null && numeroConta != null){
                    final transferenciaCriada  = transferencia(numeroConta, valor);
                  } else {
                    debugPrint('Valor das variáveis nulo');
                  }
                }
            ),

Estou recebendo o seguinte erro:

Performing hot reload... Syncing files to device Android SDK built for x86... lib/main.dart:66:47: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't. final int numeroConta = int.tryParse(conCampoNumeroConta.toString()); ^ lib/main.dart:67:48: Error: A value of type 'double?' can't be assigned to a variable of type 'double' because 'double?' is nullable and 'double' isn't. final double valor = double.tryParse(conCampoValor.toString());

Já pesquisei na internet e até o momento não encontrei uma solução. Gostaria da ajuda de vocês.

3 respostas

Jefferson, boa noite!

O que você colocou me parece ser a questão de null safety do flutter, ou seja, para poder usar um valor nulo você tem que usar o '?'.

Para ficar mais fácil o entendimento, vou colocar meu código desta parte para você ver:

//código omitido

ElevatedButton(
                child: Text('Confirmar'),
                onPressed: () {
                  _createTransfer(context);
                })

//código omitido


  void _createTransfer(BuildContext context) {
    final double? value = double.tryParse(_controllerValue.text);
    final int? accountNumber = int.tryParse(_controllerAccountNumber.text);

    if (_controllerAccountNumber != null && _controllerValue != null) {
      final createdTransfer = Transfer(value!, accountNumber!);
      Navigator.pop(context, createdTransfer);
    }
  }
}

Espero ter ajudado. Bons estudos!

Além da ideia da Aline, você também pode fazer um downgrade no seu flutter, basta achar pasta ( no meu pc fica em /opt/flutter), e executar no seu terminal:

git restore . 
git checkout 1.22.6

O primeiro comando limpa e restaura o repositorio para que seja possivel fazer o checkout, enquanto o segunto te leva para versão em si, assim você conseguirá trabalhar com os exercicios do curso e poderá deixar para ver as features do null safety para depois. Esse esqueminha é necessario pois o flutter gerencia suas versões com base no git, e da versão 2.x.x não tem como voltar para a versão 1.x.x se não usando o git diretamente. Bons estudos

Outra opção além das apresentadas, por conta do null safety do Flutter, seria deixar os parâmetros como obrigatórios na classe. Segue exemplo:

class ItemTransferencia extends StatelessWidget {
    final double valor;
    final int numeroConta ;

    const ItemTransferencia({
            Key? key,
            required this.valor,
            required this.numeroConta,
    }) : super(key: key);
}