• HOME
  • CÓDIGO
    • HTML
    • CSS
    • jQuery
    • Javascript
    • MGPanel
    • Firebase
    • Flutter
    • NodeJS
    • PHP
    • Servidores
    • MongoDB
    • #TutoExpress
  • MÁSTER WEB
  • SOBRE MI
  • CONTACTAME
  • HOME
  • CÓDIGO
  • MASTER EN PROGRAMACIÓN
  • SOBRE MI
  • CONTACTAME

flutter app android ios code

Eloy Chacon | 25 de febrero de 2020

Comprobar conexión a internet en tu aplicación de Flutter

¿Cómo saber si mi aplicación perdió la conexión a Internet?

Holaaaa... Programador, hoy me levanté con la misión de avanzar en un proyecto en el que estoy trabajando, entonces abrí Visual Studio Code e inicialice mi simulador de IOS para comenzar a trabajar, y por alguna razón la aplicación no respondía, es decir solo me mostraba los appbar pero donde debería salir los datos (en este caso las fotos) no salia nada estaba en blanco, por un momento me asuste, me coloque a revisar el código y cuando tenía como unos 5 min viendo porque estaba pasando esto me di cuenta de lo que pasaba... tenía el internet CORTADO, que rabía habia perdido 5 min buscando algún error y todo era por culpa del internet, así que me dije tengo que hacer algo que me avise que mi aplicacion no tiene acceso a internet y de esta forma avisarle al usuario si hay algun problema.

Bueno investigando un poco encontré una solución así que aquí te la comparto:

1.- Instalamos la dependencia en nuestro archivo pubspec.yaml, este es el sitio oficial: https://pub.dev/packages/connectivity#-installing-tab-

dependencies: 
      connectivity: ^0.4.8+1

 

2.- Creamos un archivo nuevo, en mi caso lo cree dentro de mi carpeta de providers, y en mi caso le coloque conex_provider.dart y copiamos el siguiente código:

import 'dart:io'; //InternetAddress utility
import 'dart:async'; //For StreamController/Stream
import 'package:connectivity/connectivity.dart';

class ConnectionStatusSingleton {
//This creates the single instance by calling the `_internal` constructor specified below
staticfinalConnectionStatusSingleton _singleton =newConnectionStatusSingleton._internal();
ConnectionStatusSingleton._internal();
//This is what's used to retrieve the instance through the app
staticConnectionStatusSingletongetInstance() => _singleton;
//This tracks the current connection status
bool hasConnection =false;
//This is how we'll allow subscribing to connection changes
StreamController connectionChangeController =newStreamController.broadcast();
//flutter_connectivity
finalConnectivity _connectivity =Connectivity();
//Hook into flutter_connectivity's Stream to listen for changes
//And check the connection status out of the gate
voidinitialize() {
_connectivity.onConnectivityChanged.listen(_connectionChange);
checkConnection();
}
StreamgetconnectionChange => connectionChangeController.stream;
//A clean up method to close our StreamController
// Because this is meant to exist through the entire application life cycle this isn't
// really an issue
voiddispose() {
connectionChangeController.close();
}
//flutter_connectivity's listener
void_connectionChange(ConnectivityResult result) {
checkConnection();
}
//The test to actually see if there is a connection
FuturecheckConnection() async {
bool previousConnection = hasConnection;
try {
final result =awaitInternetAddress.lookup('google.com');
if (result.isNotEmpty && result[0].rawAddress.isNotEmpty) {
hasConnection = true;
} else {
hasConnection = false;
}
} on SocketException catch(_) {
hasConnection = false;
}
//The connection status changed send out an update to all listeners
if (previousConnection != hasConnection) {
connectionChangeController.add(hasConnection);
}
return hasConnection;
}
}

3.- Editamos nuestro archivo main.dart y agregamos las siguientes líneas:

ConnectionStatusSingleton connectionStatus = ConnectionStatusSingleton.getInstance();
connectionStatus.initialize();

Si te llega a dar un error de inicialización debes agregar antes que eso esta linea:

WidgetsFlutterBinding.ensureInitialized();

Recuerda importar el paquete de conex_provider.dart igual Visual Studio Code te va a avisar que falta si no lo has hecho. Te debería quedar algo como esto:

void main() async {
WidgetsFlutterBinding.ensureInitialized();
    ConnectionStatusSingleton connectionStatus = ConnectionStatusSingleton.getInstance();
        connectionStatus.initialize();
runApp(MyApp());
}

 

4.- Ya casí terminamos.. ahora vamos a editar la pagina donde quieres comprobar la conexión y agregamos las siguientes líneas:

- Importamos el async si no lo tenemos y el conex_provider.dart

import 'dart:async';
import 'package:NOMBREDETUAPP/src/providers/conex_provider.dart';

- Dentro de la clase de primero colocamos:

StreamSubscription _connectionChangeStream;
bool isOffline = false;
@override
   initState() {
     super.initState();
   ConnectionStatusSingleton connectionStatus = ConnectionStatusSingleton.getInstance();
   _connectionChangeStream = connectionStatus.connectionChange.listen(connectionChanged);
   }
void connectionChanged(dynamic hasConnection) {
     setState(() {
     isOffline = !hasConnection;
   });
}

 

- En mi caso cree un Widget con el mensaje de que no hay conexión:

_sinConexion(){

   return Center(
      child: Container(
         child: Text('No hay Conexión a Internet...')
       )
     );
}

 

- Y llamamos ese widget en el container principal, en mi caso lo hice así, en el child hice una condición que valide si isOffline es igual a verdadero me muestra el Widget que cree con el nombre de _sinConexion() de lo contrario me muestra el Widget donde tengo los datos:

return Scaffold(
    appBar: AppBarSpotPrincipal(),
    body: Container(
        child: isOffline == true ? new Container(
            child: _sinConexion(),
        ) : _fotosPrincipal()
    ),
    bottomNavigationBar: NavBar()
);

5.- y eso sería todo, el resultado en mi caso fue así:

 

Tags: flutter, programación app, android, ios,
Una línea de Código <3 a la vez - Flutter - MongoDB - NodeJS - PHP
Una línea de Código <3 a la vez - Flutter - MongoDB - NodeJS - PHP

unalineadecodigo.com/post/comprobar-conexion-a-internet-en-tu-aplicacion-de-flutter

Lo más visto

Comprobar conexión a internet en tu aplicación de Flutter

flutter app android ios code 25 de febrero de 2020

¿Cómo saber si mi aplicación perdió la conexión a Internet?...
Seguir Leyendo

imagen-p

Comprobar conexión a internet en tu aplicación de Flutter

flutter app android ios code 25 de febrero de 2020

¿Cómo saber si mi aplicación perdió la conexión a Internet?...
Seguir Leyendo

Crear y creer, una sin la otra no son nada

lovecode code 26 de Febrero de 2020

Cada mañana me despierto pensando que voy a inventar hoy, o como puedo hacer mejor hoy lo que estaba haciendo ayer......
Seguir Leyendo

imagen-p

Crear y creer, una sin la otra no son nada

lovecode code 26 de Febrero de 2020

Cada mañana me despierto pensando que voy a inventar hoy, o como puedo hacer mejor hoy lo que estaba haciendo ayer......
Seguir Leyendo

Instalar certificado SSL en un servidor Linux con NodeJS

nodejs servidores code 29 de Septiembre de 2018

Aquí te dejo los pasos para instalar un certificado de seguridad SSL en un servidor Linux con NodeJS...
Seguir Leyendo

imagen-p

Instalar certificado SSL en un servidor Linux con NodeJS

nodejs servidores code 29 de Septiembre de 2018

Aquí te dejo los pasos para instalar un certificado de seguridad SSL en un servidor Linux con NodeJS...
Seguir Leyendo

El amor por el código sí existe!

lovecode code 23 de Febrero de 2020

No se trata de cosas vanales o simplemente enamoramiento pasajero, el código te hace......
Seguir Leyendo

imagen-p

El amor por el código sí existe!

lovecode code 23 de Febrero de 2020

No se trata de cosas vanales o simplemente enamoramiento pasajero, el código te hace......
Seguir Leyendo

Sobre Mi

  • ¿Quién soy?
  • Noticias

Academia

  • Master en Programación
  • MGPanel desde Cero
  • Desarrollo de Proyectos
  • Master en Ventas Web

Código

  • Firebase
  • NodeJS
  • PHP
  • Servidores
  • MGPanel
  • MongoDB
  • Javascript
  • jQuery
  • CSS
  • HTML5
  • Flutter

Sígueme

© Todos los derechos reservados 2022. Hecho con por Eloy Manuel con MGPanel