Uso del JetPack de Android PreferenceStorage con Dagger Hilt | de Shubham Gupta | Octubre de 2020

Como ya sabrá, el repositorio de preferencias Jetpack DataStore es la solución de almacenamiento recomendada para SharedPreferences. Se basa en Kotlin Coroutines y Flow. Si no lo sabe, léalo aquí.

Nota Este artículo no se aplica al DataStore.

Esta publicación cubre la integración de Preference Storage con Dagger Hilt. Entonces empecemos.

  1. Incluya dependencias en el archivo gradle de nivel de aplicación, es decir app / build.gradle. En la última versión, busque Preference Data Store aquí y daga aquí.
...
apply plugin: 'kotlin-kapt'
apply plugin: 'dagger.hilt.android.plugin'

android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}

dependencies {

// dagger hilt
implementation "com.google.dagger:hilt-android:2.28-alpha"
kapt "com.google.dagger:hilt-android-compiler:2.28-alpha"
// Preferences DataStore
implementation "androidx.datastore:datastore-preferences:1.0.0- alpha02"
}

2. Agregar hilt-android-gradle-plugin complemento al directorio raíz de su proyecto build.gradle archivo:

buildscript {
...
dependencies {
...
classpath 'com.google.dagger:hilt-android-gradle-plugin:2.28-alpha'
}
}

3. Cree una clase de almacenamiento de preferencias

4. Utilice Dagger Hilt para proporcionar instancias de la clase Preference Storage

@Module
@InstallIn(ApplicationComponent::class)
abstract class StorageModule {

@Binds
abstract fun providesPreferenceStorage(
appPreferenceStorage: AppPrefsStorage
): PreferenceStorage
}

5. Crear clase de aplicación para la inicialización de Dagger Hilt. Asegúrese de agregar esta clase al archivo AndroidManifest.xml.

@HiltAndroidApp
class MainApplication : Application()

6. Utilice la clase Preference Storage recién creada.

@AndroidEntryPoint
class PrefsTestActivity : AppCompatActivity() {

@Inject
lateinit var prefStorage: PreferenceStorage

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

lifecycleScope.launchWhenCreated {

// get value from Flow using the firstOrNull() operator
val isDarkTheme = prefStorage.isDarkTheme.firstOrNull()
isDarkTheme?.let {
Timber.e("isDarkTheme: $it")
}

// set dark theme
prefStorage.setIsDarkTheme(true)
}
}
}

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *