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

a task não é adicionada ao clicar no botão, apenas após dar o refresh

 floatingActionButton: FloatingActionButton(
          onPressed: () {
            // Chama a tela de formulário e aguarda a nova tarefa criada
            Navigator.push(
              context,
              MaterialPageRoute(
                builder: (contextNew) => FormScreen(
                  taskcontext: context,
                ),
              ),
            ).then((value) => {
                  setState(
                    () {
                      
                    },
                  )
                });
          },
          child: const Icon(Icons.add),
        ));
 ElevatedButton(
                    onPressed: () {
                      ScaffoldMessenger.of(context).showSnackBar(
                        const SnackBar(
                          content: Text('Criando uma nova Tarefa'),
                        ),
                      );

                      TaskDao().save(Task(
                          nameController.text,
                          imageController.text,
                          int.parse(difficultyController.text)));
                      Navigator.pop(context);
                    },
                    child: const Text('Adicionar!'),
                  ),
3 respostas

Boa tarde João!

Aparece alguma mensagem de erro quando você tenta salvar? Veja se no seu console aparece alguma informação. Se não existir nenhuma mensagem de erro, pode me passar o seu repositório para eu olhar o projeto por completo?

Boa! não aparece nenhum erro no console. segue o link do repositório: https://github.com/JTmarcos/TestFlutter

solução!

Então, eu vou dar a solução primeiro e depois vou explicar o que eu entendi (baseado nas minhas pesquisas e testes).

Solução:

Trocar:

then((value) => {
                  setState( () {},)});
          },

Por:

then((value) => setState(() => {}));

Explicação:

Esse problema é algo muito específico do Navigator. A impressão que eu tenho (infelizmente não consigo dar 100% de certeza) é que a função then precisa "sentir" que executou alguma coisa. Ou melhor dizendo, a função precisa de algum callback por ser uma função assíncrona. A arrow function tem esse papel, então eu só troquei o setState de: "Execute esse código vazio" para: "Devolva isso (nada)". Executar código vazio numa função assíncrona aparentemente é ignorado/ deixado para mais tarde.

Eu reparei nisso porque colocando dentro do seu setState um print igual ao que o Kako fez no curso, a lista atualizava. Tirando o print nada acontecia. Então já que ele precisa executar alguma coisa ou devolver alguma coisa pra funcionar eu falei pra ele devolver nada.

Espero ter ajudado!