Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

[Dúvida] Null safety

Boa noite Flutteradores socorro com Null Safety (eu acho). Insira aqui a descrição dessa imagem para ajudar na acessibilidadenão compila de jeito nenhum vou deixar o código das duas class aqui :

class ListaTransferencias extends StatefulWidget {

  final List<Transferencia?> _transferencias = List();

  @override
  State<StatefulWidget> createState() {
    return ListaTrasnferenciasState();
  }
}

class ListaTrasnferenciasState extends State<ListaTransferencias> {

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Transferências'),
      ),
      body: ListView.builder(
        itemCount: widget._transferencias.length,
        itemBuilder: (context, indice) {
          final transferencia = widget._transferencias[indice];
          return ItemTransferencia(transferencia!);
        },
      ),
      floatingActionButton: FloatingActionButton(
        child: Icon(Icons.add),
        onPressed: () {
          final Future <Transferencia?> future =
          Navigator.push(context, MaterialPageRoute(builder: (context) {
            return FormularioTransferencias();
          }));
          future.then((transferenciaRecebida) {
            debugPrint('chegou no then do future');
            debugPrint('$transferenciaRecebida');
            if(transferenciaRecebida!=null) {
              setState(() {
                widget._transferencias.add(transferenciaRecebida);
              });

            }
          });
        },
      ),
    );
  }
}
4 respostas

Olá Roberto.

Tudo bem?

Parece que você está enfrentando um problema com o Null Safety no Flutter. O Null Safety é uma nova funcionalidade do Dart que ajuda a evitar erros relacionados a valores nulos. No seu código, você está usando a sintaxe Transferencia?, que indica que a variável pode ser nula.

No entanto, o problema ocorre quando você tenta acessar a variável transferencia no ItemTransferencia. Como você está usando o operador ! para forçar o acesso a um valor não nulo, o compilador está gerando um erro.

Uma solução para esse problema é verificar se a variável transferencia é nula antes de utilizá-la. Você pode fazer isso usando o operador de condicional if ou o operador de coalescência nula ??. Aqui está um exemplo de como você pode fazer isso:

itemBuilder: (context, indice) {
  final transferencia = widget._transferencias[indice];
  return transferencia != null ? ItemTransferencia(transferencia) : Container();
},

Nesse exemplo, estamos verificando se a variável transferencia é diferente de nula antes de criar o ItemTransferencia. Se ela for nula, retornamos um Container vazio.

Espero que essa solução ajude a resolver o seu problema com o Null Safety. Se tiver mais alguma dúvida, é só me dizer. Boa sorte com o seu app em Flutter!

Uma dica é você clicar no botão verde no final de algumas aulas escrito "Ver opinião do instrutor", lá vai ter um link escrito: "Conferir o código deste exercício a partir deste commit", assim você pega onde foi feito o código do curso na parte correspondente e com detalhes de atualização caso tenha sido atualizado algo no dart do Flutter:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Espero ter ajudado e bons estudos!

Obrigado Renan pela ajuda, mais o erro persiste, tentei os 2 exemplos que você sugeriu conferi o codigo no github tambem e não achei mt coisa pra solução. seria pela versão do Flutter? estou usando a 3.0 e oque seria esse erro que a IDE apresenta no codigo?

class ListaTransferencias extends StatefulWidget {
  final List<Transferencia> _transferencias = List();

  @override
  State<StatefulWidget> createState() {
    return ListaTrasnferenciasState();
  }
}

class ListaTrasnferenciasState extends State<ListaTransferencias> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Transferências'),
      ),
      body: ListView.builder(
        itemCount: widget._transferencias.length,
        itemBuilder: (context, indice) {
          final transferencia = widget._transferencias[indice];
          if (transferencia != null) {
            ItemTransferencia(transferencia);
          } else {Container();}
          // return transferencia != null
          //  ? ItemTransferencia(transferencia)
          //  : Container();
        },
      ),
      floatingActionButton: FloatingActionButton(
        child: Icon(Icons.add),
        onPressed: () {
          final Future<Transferencia?> future =
              Navigator.push(context, MaterialPageRoute(builder: (context) {
            return FormularioTransferencias();
          }));
          future.then((transferenciaRecebida) {
            debugPrint('chegou no then do future');
            debugPrint('$transferenciaRecebida');
            if (transferenciaRecebida != null) {
              setState(() {
                widget._transferencias.add(transferenciaRecebida);
              });
            }
          });
        },
      ),
    );
  }
}

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

to travado nisso tem mais de uma semana kkkkk pfv não me abandone kkkk

solução!

Tenta iniciar a lista com "[]" ao invés de "List()".

Dessa forma:

final List<Transferencia> _transferencias = [];

Essa é a nova forma com o Flutter acima da versão 2.0 fica assim o bloco todo:

class ListaTransferencias extends StatefulWidget {
  final List<Transferencia> _transferencias = [];

  @override
  State<StatefulWidget> createState() {
    return ListaTransferenciasState();
  }
}