Clon de Google News en Kotlin con Paging 3 & Hilt | de Divyansh Saraswat | abril 2022

Foto de Obi – @pixel6propix en UnsplashAprenda lo que se necesita para implementar la paginación en una aplicación de noticias de arquitectura limpia. Así es como se verá la implementación final al final:

Contenidos

El ingrediente principal es Paginación 3 por JetPack Biblioteca.

Dependencias de Gradle: a nivel de proyecto build.gradle:

configuración de agarre

No olvide agregar el nombre de la aplicación en el archivo de manifiesto. Ahora definimos la interfaz que contiene métodos de actualización que realizan solicitudes de red.

Inyección de dependencia con módulos Hilt:

Tenga en cuenta que el código de actualización utiliza patrones de Builder.interfaces y clases que utilizan patrón de constructor no se puede inyectar desde el constructor. Por lo tanto, necesitamos crear módulos que sean instrucciones al pie de la letra sobre cómo implementar dichas dependencias.

Ofrecemos instancias de actualización de crear funciones comentarios con @Ofertas.@único delimita esta instancia al contenedor de la aplicación y garantiza que siempre se proporcione la misma instancia. El objeto módulo de aplicación se comenta con @InstallIn(SingletonComponent::class), lo que significa que los enlaces definidos en este módulo están disponibles en el contenedor de la aplicación.

Defina la fuente de los datos de paginación:

Esta clase también contiene la lógica para llamar a los métodos en NewsApiInterface según los parámetros de consulta declarados en el constructor.

Si el parámetro de consulta es nulo, queremos obtener los principales titulares según el país, el idioma y la categoría. mientras que una «consulta» distinta de cero indica una búsqueda en la API de mensajes.

De esta forma, abstraemos la lógica de consulta de la red en función de los parámetros de consulta de la capa del repositorio.

En la capa ViewModel, transformamos la salida de datos de Pager.flow en función de las consultas recibidas de la capa de la interfaz de usuario.

El flujo es una secuencia asíncrona de valores.Los valores son expedido por Buscapersonas.flow, convertido por intermediarios declarado en el ViewModel y finalmente consumado en el fragmento.

La parte de ViewModel es así:

  • Combine el flujo de consulta y el flujo sortParams con el combinar Operador.
  • Salva el últimos valores de estos flujos en una clase de datos y devolverlos desde el lambda.
  • Cambiar de la fluir arriba a los depósitos Buscapersonas.flow Uso de planoMapaÚltimo Operador.
  • Almacene en caché el flujo de datos en viewModelScope con el operador cachedIn de la biblioteca de paginación

Hasta ahora hemos definido el flujo de datos a la capa ViewModel, ahora definimos cómo se consumen estos datos en la capa de la interfaz de usuario.Este paso actualiza la vista del reciclador del fragmento en función del flujo observable. Definamos una clase que amplíe PagingDataAdapter.

La hora en que se publicó un artículo de noticias en particular se resta de la fecha y hora del sistema actual (dispositivo Android) para obtener «x no». hace horas’, ‘hace x minutos’ y así sucesivamente.

La implementación se ve así: lea este artículo de Jonathan Darwin para obtener más información.

recoger el flujo en el fragmento.

  • Crea una instancia de la clase de adaptador y asígnala a una variable
  • Establezca esta variable en el adaptador de vista del reciclador del fragmento
  • Recopile el flujo de ViewModel y envíe el flujo de datos al adaptador.

Eso es todo, definimos todos los componentes necesarios de la biblioteca de paginación e implementamos funciones de búsqueda como Google News. Se deben seguir pasos similares al implementar fragmentos para los principales titulares (consulte la implementación de la fuente de paginación anterior).La biblioteca Paging 3 nos ayuda a cargar datos de una fuente de datos remota/local en pequeños fragmentos llamados páginas, lo que permite que la aplicación use el ancho de banda de la red y los recursos del sistema de manera más eficiente. Sin embargo, este enfoque requiere una gran cantidad de código repetitivo.

Debe haber notado que el enfoque anterior a menudo complica las cosas, por ejemplo, cuando la clave de la página es de tipo cadena y no un int (token de página, como en la API de datos de YouTube), que ahora es parte de la respuesta de la red.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.