No post anterior, eu fiz uma lista dos pacotes e plugins que eu considero úteis para projetos de aplicativos em Flutter. Inserido nessa lista está o plugin Connectivity. Através dele é possível detectar qual conexão de rede (Wi-Fi ou 3G) esta sendo utilizada no Android e iOS. Além disso, ele também dá acesso à dados como o nome da rede e o IP.
Neste post, eu irei demonstrar como utilizar o plugin Connectivity para capturar os dados da rede que o dispositivo está conectado e seu respectivo status.
Vamos lá!
Primeiramente, iremos importar o plugin Connectivity no arquivo pubspec.xaml
:
Em seguida, criamos uma classe em Dart na qual importaremos o pacote Connectivity. No método initState
dessa classe, devemos inserir o seguinte trecho de código:
O trecho de código acima realiza a verificação sobre qual o tipo de conexão está sendo utilizada no momento: Wi-Fi ou 3G. É importante ressaltar que a checagem feita nesse trecho de código não garante que a rede em uso não apresentará erros de conexão (o dispositivo pode estar conectado em uma rede sem Internet, por exemplo) ou de timeout. Além disso, esse código é executado apenas na inicialização da tela, ou seja, com ele não é possível verificar a mudança de uma rede para a outra, por exemplo.
Para conseguir capturar a mudança de rede durante a utilização do app, é preciso fazer uso do seguinte trecho de código:
No código acima, utilizamos um stream para capturar as mudanças de rede. Quando a Wi-Fi for desligada e a 3G substituí-la, o texto na tela do app será atualizado. Lembrando que o stream dever ser cancelado no método dispose
da classe.
O gif abaixo mostra como funciona o app implementado neste post:
Uma observação é que não consegui extrair o nome da rede Wi-Fi, por isso aparece null no gif. Pesquisei sobre, mas não encontrei o motivo. Se alguém conseguir achar o motivo, deixa a solução nos comentários. =)
Para visualizar o código fonte do projeto desenvolvido neste post acesse: https://github.com/luizmarcus/Flutter/tree/master/exemplo_connectivity
Bom, é isso.
Qualquer dúvida, deixa um comentário.