Fala, galera!
Tentando manter a periodicidade semanal, trouxemos mais uma dica rápida de Xamarin.Forms!
A ideia é ser um artigo bem rápido, e todas as dicas ficarão em um único repositório. Se você perdeu algum, veja os que já saíram:
- Xamarin Rocket – Parte 01: LineBreakMode
- Xamarin Rocket – Parte 02 : alterando o espaço das linhas e colunas do Grid
- Xamarin Rocket – Parte 03 : tela cheia, ocultando a barra de status
- Xamarin Rocket – Parte 04: imagens em botões
Ficar offline não é nada incomum de acontecer em aplicativos (ainda mais se a sua operadora for #8221;{suaOperadora}”). Mas se alguma ação em seu app for dependente de conexão, como saber e como tratar, caso isso aconteça?
Existe uma forma muito simples para obtermos o estado da conexão, e o Xamarin.Essentials vai nos ajudar e muito com esse trabalho!
Se você não está usando o Visual Studio 8 do Mac ou Visual Studio 2019 do Windows, clique aqui e veja como configurar o Xamarin.Essentials.
Adicionaremos a permissão <uses-permission android:name=”android.permission.ACCESS_NETWORK_STATE” /> arquivo AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="br.com.bertuzzi.xamarinrocket">
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="27" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application android:label="XamarinRocket.Android"></application>
</manifest>
Pronto! Agora, em nossa ViewModel só precisamos assinar o evento Connectivity.ConnectivityChanged do Essentials:
public bool IsNotConnected { get; set; }
public MainViewModel()
{
Connectivity.ConnectivityChanged += Connectivity_ConnectivityChanged;
IsNotConnected = Connectivity.NetworkAccess != NetworkAccess.Internet;
}
~MainViewModel()
{
Connectivity.ConnectivityChanged -= Connectivity_ConnectivityChanged;
}
void Connectivity_ConnectivityChanged(object sender, ConnectivityChangedEventArgs e)
{
IsNotConnected = e.NetworkAccess != NetworkAccess.Internet;
}
Pronto! Agora, toda vez que a conexão for perdida, a variável IsNotConnected vai receber True.
Não acredita? Então, em nossa View vamos criar um Label:
<StackLayout Padding="0,30,0,0">
<Label TextColor="Red"
IsVisible="{Binding IsNotConnected}"
FontSize="50"
Text="Conexão perdida"
FontAttributes="Bold"/>
</StackLayout>
A ideia é: quando não tiver conexão, o Label aparecerá.
Vamos rodar?
Legal, né? Mas isso foi à nível de ViewModel, mas e do app inteiro?
Simples. Colocamos o Evento no App.xaml.cs:
using System;
using Xamarin.Essentials;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
[assembly: XamlCompilation(XamlCompilationOptions.Compile)]
namespace XamarinRocket
{
public partial class App : Application
{
public App()
{
InitializeComponent();
Connectivity.ConnectivityChanged += ConnectivityChanged;
MainPage = new MainPage();
}
private void ConnectivityChanged(object sender, ConnectivityChangedEventArgs e)
{
if (e.NetworkAccess != NetworkAccess.Internet)
{
Application.Current.MainPage.DisplayAlert("Atenção", "Estamos sem internet :(", "OK");
}
}
}
}
E então rodamos:
É uma dica bem simples, mas que ajuda muito!
Caso queira baixar o código utilizado no Exemplo, clique aqui. Se quiser ver outros artigos sobre Xamarin, acesse este link.
Espero ter ajudado.
Aquele abraço!