DEV Community

Nathan Silva
Nathan Silva

Posted on

Como manter o estado de uma tela ao chamar deeplink no xamarin C#

O que é deeplink?

De forma resumida, o deeplink são chamadas de aplicativos para outros aplicativos para a realização de ações especificas.
Exemplo: No ifood, quando terminamos de selecionar os nossos produtos e finalizamos com a forma de pagamento Cartao Nubank e finalizamos o aplicativo do banco é aberto já mostrando os valores e informações. Ao fazer o pagamento, o app da nubank retorna ao ifood finalizando assim o pedido.

Problema

Nesse contexto, ao fazer essa chamada para um app externo, pode ser o que o app de origem seja "destruído" e juntamente com ele todas as informações armazenadas em memória. Abaixo eu vou mostrar como podemos manter o estado do aplicativo de origem e retornar ao ponto em que paramos.

Solução 1

Primeiramente vamos ter certeza que de que toda a informação vinda do Bundle está sendo perdida. No método OnCreate na Intent, verifique se o valor do parâmetro está vazio.

Image description

Se estiver nulo, vá para a solução 2, caso contrário siga o passo abaixo!

Como ainda estamos com algumas informações do Bundle armazenadas, basta a gente salvar o estado do que quisermos e posteriormente restaurar o estado. Vamos usar o metodo para salvar o estado.

protected override void OnSaveInstanceState(Bundle outState)
{
base.OnSaveInstanceState(outState);
// Salvar os dados da tela no Bundle
outState.PutString("MeuValor", meuValor);
}

Em seguida, basta chamar o metodo para restaurar esse estado

protected override void OnRestoreInstanceState(Bundle savedInstanceState)
{
base.OnRestoreInstanceState(savedInstanceState);
teste = savedInstanceState.GetString("MeuValor");
}

Solução 2

Se o Bundle está vindo zerado(null) então esta é a solução: Usaremos um artifício de persistência de dados temporárias no dispositivo para armazenar as informações que julgamos importantes.

Adicione o bloco de código abaixo:

protected override void OnSaveInstanceState(Bundle outState)
{
base.OnSaveInstanceState(outState);
// Salvar o valor de "MinhaVariavel" no SharedPreferences
GetPreferences(FileCreationMode.Private).Edit().PutString("TextoQualquer", MinhaVariavel).Apply();
}

Neste caso, não será necessário sobrescrever o método OnRestoreInstanceState, mas sim inserir um trecho dentro do OnCreate

MinhaVariavel= GetPreferences(FileCreationMode.Private).GetString("TextoQualquer", "");

Entendendo o que foi feito

O método GetPreferences o Android cria automaticamente um arquivo de preferências compartilhadas para você, associado à atividade atual, ou seja, ele persiste os dados temporariamente. Além disso, caso queira tornar essas informações visíveis a nivel global da aplicação, você pode utilizar o GetSharedPreferences.

Usando o GetSharedPreferences

A sintaxe muda um pouco, o sentido principal ainda é o mesmo.

protected override void OnSaveInstanceState(Bundle outState)
{
base.OnSaveInstanceState(outState);
// Salvar o valor de "MinhaVariavel" no SharedPreferences
ISharedPreferencesEditor editor = GetSharedPreferences("MeusEstados", FileCreationMode.Private).Edit();
editor.PutString("stringVariavel", MinhaVariavel);
editor.Apply();
}

Agora é só ir no onCreate!

MinhaVariavel = GetSharedPreferences("MeusEstados", FileCreationMode.Private).GetString("stringVariavel", "");

Caso queira saber mais sobre essas diferenças Clique aqui!

Até a próxima! :D

AWS Q Developer image

Your AI Code Assistant

Ask anything about your entire project, code and get answers and even architecture diagrams. Built to handle large projects, Amazon Q Developer works alongside you from idea to production code.

Start free in your IDE

Top comments (0)

Qodo Takeover

Introducing Qodo Gen 1.0: Transform Your Workflow with Agentic AI

Rather than just generating snippets, our agents understand your entire project context, can make decisions, use tools, and carry out tasks autonomously.

Read full post

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay