Ein di-kontrolliertes Repository in ein untergeordnetes ViewModel in Android bekommenAndroid

Forum für diejenigen, die für Android programmieren
Anonymous
 Ein di-kontrolliertes Repository in ein untergeordnetes ViewModel in Android bekommen

Post by Anonymous »

Die Hintergrundgeschichte
Ich arbeite an einer Seite in meiner Android -App, die diese Liste von ApplistItemViews enthält, die ihre eigenen ApplistItemViewModel s.

Code: Select all

import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import androidx.lifecycle.ViewModel
import com.mikewarren.speakify.data.UserAppModel

class AppListItemViewModel(val model: UserAppModel,
): ViewModel() {
var isSelected by mutableStateOf(false)

fun toggleSelected() {
this.isSelected = !this.isSelected
}
}
Jetzt habe ich zum ApplistItemView ein Einstellungs -Widget hinzugefügt, das beim Klicken eine AppStingsView modal erzeugen sollte. AppStingsViewModel :

Code: Select all

package com.mikewarren.speakify.viewsAndViewModels.pages.importantApps

import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.mikewarren.speakify.data.AppSettingsModel
import com.mikewarren.speakify.data.SettingsRepository
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.launch

@HiltViewModel
class AppSettingsViewModel(
initialSettings: AppSettingsModel,
private val settingsRepository: SettingsRepository // Replace with your actual repository
) : ViewModel() {
private val _settings = MutableStateFlow(initialSettings)
val settings: StateFlow = _settings

fun updateAnnouncerVoice(voice: String?) {
viewModelScope.launch {
val updatedSettings = _settings.value.copy(announcerVoice = voice)
_settings.value = updatedSettings
settingsRepository.saveAppSettings(updatedSettings)
}
}

fun addNotificationSource(source: String) {
viewModelScope.launch {
val updatedSources = _settings.value.notificationSources + source
val updatedSettings = _settings.value.copy(notificationSources = updatedSources)
_settings.value = updatedSettings
settingsRepository.saveAppSettings(updatedSettings)
}
}

fun removeNotificationSource(source: String) {
viewModelScope.launch {
val updatedSources = _settings.value.notificationSources - source
val updatedSettings = _settings.value.copy(notificationSources = updatedSources)
_settings.value = updatedSettings
settingsRepository.saveAppSettings(updatedSettings)
}
}
}

but immediately face some issue:

[*]the SettingsRepositoryImpl is dependency-injected in, and because of that
[*]I have no idea how to instantiate this childViewModel with the initialSettings (the parent AppListItemViewModel could Erstellen Sie diesen Ausgangszustand mit dem Modell , aber dann müssten wir diese Einstellungen zur Verfügung stellen.

Code: Select all

package com.mikewarren.speakify

import android.content.Context
import com.mikewarren.speakify.data.AppsRepository
import com.mikewarren.speakify.data.AppsRepositoryImpl
import com.mikewarren.speakify.data.SettingsRepository
import com.mikewarren.speakify.data.SettingsRepositoryImpl
import dagger.Binds
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.android.qualifiers.ApplicationContext
import dagger.hilt.components.SingletonComponent
import javax.inject.Singleton

@Module
@InstallIn(SingletonComponent::class)
abstract class AppModule {
@Binds
@Singleton
abstract fun bindSettingsRepository(
settingsRepositoryImpl: SettingsRepositoryImpl
): SettingsRepository

@Binds
@Singleton // If you want a single instance
abstract fun bindAppsRepository(
appsRepositoryImpl: AppsRepositoryImpl
// If the repository has dependencies, list them as parameters here
// e.g., database: YourDatabase
): AppsRepository

companion object {
@Provides
@Singleton
fun provideSettingsRepositoryImpl(
@ApplicationContext context: Context
): SettingsRepositoryImpl = SettingsRepositoryImpl(context)

@Provides
@Singleton
fun provideAppsRepository(): AppsRepositoryImpl = AppsRepositoryImpl()
}
}
Und soweit ich weiß, leben diese Repositories ausschließlich in HiltViewModel s (das ist, soweit ich sie kenne oder sie verwendet habe). Ich weiß, dass HiltViewModel () Ihnen keine Möglichkeit bietet, Modelle zu übergeben, und muss in der Ansicht aufgerufen werden. Im Hauptmodell (Bildschirm)) oder
irgendwie die bald implementierten AppsetingSview eigene AppsetingsViewModel erstellen. Geschätzt! Ich werde versuchen, die Einstellungen auf diese Weise zu instanziieren, und dann melden Sie mich dann zurück.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post