Flutter: Pop Scope não funciona?
Com a notícia do fim do WillPopScope, PopScope é a solução… mas nem sempre funciona. Pelo menos na API 34 do Android, não.
Hoje me deparei com uma missão corriqueira no meu projeto: precisava fazer uma notificação aparecer quando alguém tentasse sair do cadastro sem salvar. Tudo certo! Já tinha o fluxo pronto, a caixa de diálogo configurada… só faltava uma coisa:
Tanto o botão “voltar” lá na AppBar quanto o botão de voltar do Android precisavam acionar essa notificação. Ou seja, a caixinha deveria dar as caras e só deixar voltar mesmo após a confirmação, usando o Navigator.pop(context)
.
Fácil! Interceptar usando o WillPopScope como já fiz tantas vezes antes!
Mas aí, minha IDE me mandou uma mensagem meio séria: “‘WillPopScope’ está desatualizado e não deve ser usado. Use PopScope no lugar. Essa função foi depreciada após a versão v3.12.0–1.0.pre. Tenta trocar a função antiga pela nova.”
Beleza, então segui a documentação oficial e troquei pelo PopScope. Só que não foi bem como eu esperava! Nada de caixa de diálogo aparecendo, e parece que o PopScope estava sendo completamente ignorado. E o pior de tudo, quando eu usava o botão de voltar do Android, o aplicativo simplesmente fechava!
Passei um tempão pesquisando, tentando encontrar uma solução. Nem mesmo o antigo e já depreciado WillPopScope funcionava no meu Android API 34, só na API 30.
Até que finalmente, depois de muitas tentativas, uma solução surgiu na minha cabeça. Tá aí o que funcionou comigo:
- Abra AndroidManifest.xml
- Adicione: android:enableOnBackInvokedCallback=”false”
- Adicione PopScope ou WillPopScope:
PopScope(
canPop: false,
onPopInvoked: (didPop) {
// faça o que precisar...
}
)
WillPopScope(
onWillPop: () async {
// faça o que precisar...
return false;
}
)
— Eita, acabou assim do nada? Um fim repentino, mas esse texto tá saindo durante a madrugada (já são 02:07 no Brasil) pra dar uma força pra galera que tá precisando.
Faça o rebuild da sua aplicação e vá dormir em paz!
→ Siga o nosso blog pelo Medium e fique por dentro de tudo o que acontece no Ateliê de Software.
Dê um alô pra gente! E nos acompanhe nas redes sociais:
→ E-mail: contato@atelie.software
→ Site
→ Facebook
→ Instagram
→ LinkedIn
→ Discord
→ Podcast: Spotfy | Deezer