2
respostas

Mesmo com setState a lista não atualiza

mesmo com o setState após clicar no confirmar a lista não é atualizada.

class ListaTransferencias extends StatefulWidget { final List transferencias = [];

@override State createState() { return ListaTransferenciasState();

} }

class ListaTransferenciasState extends State {

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

2 respostas

No console ele retorna o erro Error: Unexpected null value. flutter.

Olá Luciana.

Atualize seu future para deixar mais seguro a recuperação do dados (também ajudará a encontrar o problema):

/// Antes
future.then((transferenciaRecebida) {
    widget.transferencias.add(transferenciaRecebida!);
    setState(() {});
});
/// Depois
future.then((transferenciaRecebida) {
    if (transferenciaRecebida != null) {
        setState(() {
            widget.transferencias.add(transferenciaRecebida!);
        });
    } else {
        debugPrint("Não foi recebido a transferência do FormularioTransferencia");
    }
});

Execute novamente o código, caso seja imprimido no console essa mensagem: Não foi recebido a transferência do FormularioTransferencia, consigo apenas pensar em três possibilidades para isso.

  • O usuário clicou o botão de voltar na tela FormularioTransferencia
  • O método pop foi chamado sem argumento de "resultado" (o argumento de resultado é o dados que você quer retornar para a tela anterior, no seu caso a tela ListaTransferencias):
    Navigator.of(context).pop<Transferencia>(/* esse é o argumento de resultado: */ transferencia);
    /// Ou
    Navigator.pop<Transferencia>(context, /* esse é o argumento de resultado: */ transferencia);
  • O método pop foi chamado com argumento de "resultado" com valor nulo

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software