Picker
Como añadir el modulo
Primero añades la librería a tu build.gradle
Después añades a tu base injector lo siguiente:
override fun getInjector(): BaseInjector = object : BaseInjectorGms() { override fun getKoinModules(): MutableList{ return mutableListOf ().apply { add(appModule) addAll(DownloadManagerInjector.getKoinModules().toMutableList()) //Esta es la parte que importa los módulos de Koin. addAll(PickerServiceInjector.getKoinModules().toMutableList()) } } } Content copied to clipboard
Para que funcione correctamente, el application debe estar inyectado como si fuera un contexto, pues el modulo hace un tracking de las activities de la aplicacion, seteando un event listener al Application.
Como usar el modulo
Existen distintas formas de usar los Pickers de Zapp, la primera es envolviéndolo en un result.
A continuación se muestran algunos ejemplos.
fun getOnePhoto(context: Context) = toResultLiveData {
picker.getOneImage {
Compress.with(context, it)
.concrete {
withIgnoreIfSmaller(true)
}
}}
fun getMultiplePhotos(context: Context) = toResultLiveData {
picker.getMultipleImages(8) {
Compress.with(context, it)
.concrete {
withIgnoreIfSmaller(true)
}
}}
fun getPhotoFromCamera(context: Context) = toResultLiveData {
picker.getFromCamera {
Compress.with(context, it)
.concrete {
withIgnoreIfSmaller(true)
}
}.apply {
userPhoto.value = this
}
}
fun getFiles() = toResultLiveData {
picker.getMultipleFiles()
}
fun getFile() = toResultLiveData {
picker.getOneFile()
}En algunas ocasiones con ese uso de arriba puede ocurrir un bug, el bug es que si el móvil del usuario, esta girado y entra en modo giro, se perderá el callback de vuelta en la escucha del LiveData. Esto, no es un bug de la librería tal cual, si no el comportamiento natural del live data.
Para evitar este bug, podemos guardar el estado en un modelo que se observara siempre en el onCreate, de esta forma el objeto cambiara, pero al observar nuevamente con la nueva instancia de la actividad recuperara el valor sin problemas.
Ejemplo:
fun getPhotoFromCamera(context: Context) = toResultLiveData {
picker.getFromCamera {
Compress.with(context, it)
.concrete {
withIgnoreIfSmaller(true)
}
}.apply {
//Aqui guardamos el estado en una variable/modelo, la escucharemos en el onCreate
userPhoto.value = this
}
}