Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Para entender um pouco mais

Olá,

Seguindo o conteúdo dos vídeos meu SnackBar executou corretamente, porém tenho uma dúvida de uma alternativa que tentei aqui e gostaria que alguém me ajudasse a entender porque não funcionou.

O código:

IconButton(
            onPressed: () {
              registerJournal(context);
            },

Eu substituí por:

IconButton(
            onPressed: () {
              registerJournal();
              Navigator.pop(context);
            },

E o código:

  registerJournal(BuildContext context) async {
    String content = _contentController.text;

    journal.content = content;
    JournalService service = JournalService();
    bool result = await service.register(journal);
    Navigator.pop(context, result);
  }

Eu substituí por:

registerJournal() async {
    String content = _contentController.text;

    journal.content = content;
    JournalService service = JournalService();
    bool result = await service.register(journal);
    return result;
  }

O result retorna true em ambos os casos, mas o value fica null, acredito que tenha a ver com a chamada da tela para passagem de parâmetros mas não entendi ainda porque isso ocorre?

1 resposta
solução!

Oii Alvaro, tudo bem?

Pelo que entendi, no seu código modificado, você tentou separar essas duas ações, chamando registerJournal e Navigator.pop separadamente no onPressed do IconButton. E na função registerJournal, você mudou para retornar o resultado, em vez de passá-lo com Navigator.pop.

O problema aqui é que o Navigator.pop é usado para retornar à tela anterior e também passar um valor de volta para essa tela. No seu código modificado, quando você chama Navigator.pop(context);, você está retornando à tela anterior, mas não está passando nenhum valor de volta. E quando registerJournal é chamado, ele retorna um valor, mas esse valor não está sendo passado para a tela anterior.

Então, quando você tenta acessar o valor na tela anterior (por exemplo, com Navigator.of(context).pop().then((value) {...})), o valor é null porque nenhum valor foi passado com Navigator.pop.

Um abraço e bons estudos.

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