Del curso: .NET MAUI esencial

Detección de conectividad en aplicaciones de .NET MAUI - Tutorial de .NET MAUI

Del curso: .NET MAUI esencial

Detección de conectividad en aplicaciones de .NET MAUI

Para saber si tenemos conectividad o no en las aplicaciones de .NET MAUI usamos la clase 'Connectivity'. Vamos a ver cómo es esto. Nota que en 'VisitDetailsViewModel' ya implementé este comando llamado 'FinishSaleCommand'. Claro, acabo de implementar el método, pero, como lo estoy decorando con este atributo 'RelayCommand', se está creando 'Finish SaleCommand'. Del lado de la vista tengo un botón que dice Finalizar y que está enlazado justamente a este comando. De hecho, también hice algunas otras adecuaciones aquí en la vista para que se vea un poco mejor. Muy bien. Entonces, yo podría escribir 'Connectivity .Current' y luego inspeccionar el valor de 'NetworkAccess' para determinar si tengo acceso a internet o no tengo acceso a internet, etc., pero si hago esto estoy acoplando directamente mi 'ViewModel' a la clase 'Connectivity' y no es muy buena idea. Es mejor que usemos esta abstracción que nos da .NET MAUI que se llama 'IConnectivity'. Gracias a esta interfaz podríamos inyectar esta dependencia en el 'ViewModel' y no tener directamente este acoplamiento con 'Connectivity'. Entonces, lo que hice fue agregar este registro como tipo 'Singleton' de 'Connectivity.Current', este es el valor concreto de 'IConnectivity'. Entonces, del lado del 'ViewModel' podemos inyectar 'IConnectivity' tal y como lo estoy haciendo aquí. Estoy guardando el valor en un campo, estoy manejando su evento 'ConnectivityChanged', que se va a disparar cada vez que cambia la conectividad, ya que, recuerda, puede venir e irse en cualquier momento. Entonces, lo que vamos a hacer aquí es agregar un método llamado 'CanFinishSale' que ya tengo por acá y que me va a regresar un valor booleano que va a estar en función de si el acceso a la red es del valor de internet o no. Es decir, si 'NetworkAccess' del objeto concreto 'Connectivity' que se esté inyectando tiene valor de internet, pues entonces sí va a regresar "true". Caso contrario, no va a regresar "true". ¿Para qué hago esto? Porque quiero configurar el 'Relay Command' indicándole que vaya y ejecute 'CanFinishSale' cada vez que quiera averiguar si el comando está habilitado o no. Por esta razón, también acá en el 'ConnectivityChanged' lo que voy a hacer es solicitarle al comando 'FinishSaleCommand' que se reevalúe. Aquí voy a ejecutar su método 'NotifyCanExecuteChanged'. Hay otras formas de hacer esto, pero, para que se entienda un poco mejor, toma en cuenta que en el evento de cambio de conectividad le estoy solicitando al comando que se reevalúe. Muy bien. Lo último que vamos a hacer para hacer esta prueba es modificar aquí en el "folder" de plataformas específicamente Android, esto es para Android únicamente, en la clase de 'MainApplication' vamos a poner este permiso que requiere esta característica. Este permiso es 'AccessNetworkState'. Muy bien. Entonces, con estos cambios ya estamos listos para probar.

Contenido