3
respostas

Na hora de clicar em "transfer" ele não executa a função.

Boa tarde! Eu estou com um problema na hora do código. Quando eu aperto em "transfer" ele aparece alguns erros sendo que eu fiquei conferindo o código e não achei nada de errado.

══╡ EXCEPTION CAUGHT BY GESTURE ╞═══════════════════════════════════════════════════════════════════
The following _CastError was thrown while handling a gesture:
Null check operator used on a null value

When the exception was thrown, this was the stack:
#0      _TransactionFormState.build.<anonymous closure> (package:bytebankapp/telas/transaction_form.dart:67:44)
#1      _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:989:21)
#2      GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:182:24)
#3      TapGestureRecognizer.handleTapUp (package:flutter/src/gestures/tap.dart:607:11)
#4      BaseTapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:296:5)
#5      BaseTapGestureRecognizer.handlePrimaryPointer (package:flutter/src/gestures/tap.dart:230:7)
#6      PrimaryPointerGestureRecognizer.handleEvent (package:flutter/src/gestures/recognizer.dart:475:9)
#7      PointerRouter._dispatch (package:flutter/src/gestures/pointer_router.dart:93:12)
#8      PointerRouter._dispatchEventToRoutes.<anonymous closure> (package:flutter/src/gestures/pointer_router.dart:138:9)
#9      _LinkedHashMapMixin.forEach (dart:collection-patch/compact_hash.dart:397:8)
#10     PointerRouter._dispatchEventToRoutes (package:flutter/src/gestures/pointer_router.dart:136:18)
#11     PointerRouter.route (package:flutter/src/gestures/pointer_router.dart:122:7)
#12     GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:439:19)
#13     GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:419:22)
  TapGestureRecognizer#21c76
════════════════════════════════════════════════════════════════════════════════════════════════════

Another exception was thrown: Null check operator used on a null value

Another exception was thrown: Null check operator used on a null value

Another exception was thrown: Null check operator used on a null value

Another exception was thrown: Null check operator used on a null value

Foto do código se precisar: Insira aqui a descrição dessa imagem para ajudar na acessibilidade

3 respostas

Olá Vinicius, tudo bom?

O seu código está um pouco diferente com o exposto em aula. Faz o seguinte, retira o operador "?"

 final double value = double.tryParse(_valueController.text);

Qualquer dúvida, estamos a disposição.

Olá Vinicius, tudo bom?

Tive o mesmo problema isso ocorre por causa do null safety, não sei se seria a abordagem correta mas resolvi da seguinte forma.

Adicionei um ? no model transaction.dart assim

class Transaction {
  final double? value;
  final Contact contact;

  Transaction(
    this.value,
    this.contact,
  );

E o onPressed do transaction_form.dart ficou assim

onPressed: () {
                      final double? value =
                          double.tryParse(_valueController.text);
                      final transactionCreated =
                          Transaction(value, widget.contact);
                      showDialog(
                          context: context,
                          builder: (context) {
                            return TransactionAuthDialog();
                          });
                      // _webClient.save(transactionCreated).then((transaction) {
                      //   Navigator.pop(context);
                      // });
                    },

Com isso ele chama o showDialog, pois passa da linha .

final transactionCreated = Transaction(value!, widget.contact);

Espero ter ajudado e se algum instrutor puder verificar se essa é uma abordagem correta.

Não sei se você ainda está com esse problema, mas quando criar um context para o showDialog, ele tem que ter um nome diferente do context original...

showDialog(
                              context: context,
                              builder: (contextDialog) {
                                return TransactionAuthDialog(
                                  onConfirm: (String password) {
                                    _save(
                                        transactionCreated, password, context);
                                  },
                                );
                              });

Não precisa chamar o _save com o webclient, dentro do ElevatedButton, pode fazer direto como fiz acima.

A verificação de if no onConfirm do ElevatedButton tbm pode ser feita dessa maneira aqui abaixo:

onConfirm: (String password) {
                                    if(transactionCreated != null) {
                                      _save(
                                          transactionCreated, password,
                                          context);
                                    }
                                  },