1
resposta

Dúvida sobre navigator.pus e pop

Nos projetos de flutter ( Flutter com web API: integrando sua app mobile e Persistência com Flutter: Crie um app com armazenamento interno) o professor ensinou a usar o navigator.pop(context) no onPressed de um botao criar para voltar a um futureBuilder de uma screen stateless e atualizar automaticamente, porém ele colocou essa notificação:

" Atualização no projeto Revisamos o projeto e realizamos um ajuste, pois, no momento da gravação, a atualização da lista de contatos era feita com o FutureBuilder dentro de um StatelessWidget, porém, atualmente (Fevereiro de 2021), a atualização não acontece mais...

Para a atualização funcionar, é necessário modificar a lista de contatos para StatefulWidget e chamar o setState() após retornar do formulário de contato. Sendo assim, atualizamos o projeto deste curso e agora a lista de contatos atualiza sem problemas. "

    **porém é só trocar o NAVIGATOR.POP por NAVIGATOR.PUSH**  

que funciona normalmente.

Minha dúvida é : nessa semanticamenta há prejuízo para perfomance ?

1 resposta

Olá, Geibison! Tudo bem?

Primeiro, quero te pedir desculpas pela demora em te responder.

Quando usamos o navigator seja para fazer pop ou push, estamos trabalhando com uma estrutura semelhante a uma pilha, e isso quer dizer que as telas são empilhadas, ou seja, inseridas, na ordem a qual você chama, e que são retiradas da última para a primeira.

De forma mais simples, podemos dizer que a última tela a ser aberta é a primeira a ser fechada.

Então, se você chama contacts_list, em seguida chama contacts_form e depois, ao invés de retirar contacts_form do topo da pilha, você chama contacts_list novamente, isso pode trazer problemas para o usuário no uso da sua aplicação, pois a navegação não vai estar correta.

Sugiro que faça como o instrutor recomendou, usando o setState, e trocando StatelessWidget por StatefulWidget mesmo.

Espero muito que isso tenha te ajudado. Bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado. ✓