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
}
}
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)
}
}
}
[*]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()
}
}
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.