feat(settings): update settings items to handle null values for improved stability

This commit is contained in:
2026-05-08 22:35:36 +02:00
parent 80f5454afb
commit 26a134869e
3 changed files with 69 additions and 53 deletions

View File

@@ -116,31 +116,37 @@ private fun TvSettingOptionItem(
) {
when (option) {
is RangeSetting -> {
val value by viewModel.value(option).collectAsState(initial = option.defaultValue)
TvNumberSettingItem(
title = option.title,
value = value,
valueRange = option.valueRange,
onValueChange = { viewModel.set(option, it) }
)
val value by viewModel.value(option).collectAsState(initial = null)
value?.let {
TvNumberSettingItem(
title = option.title,
value = it,
valueRange = option.valueRange,
onValueChange = { value -> viewModel.set(option, value) }
)
}
}
is BooleanSetting -> {
val value by viewModel.value(option).collectAsState(initial = option.defaultValue)
TvBooleanSettingItem(
title = option.title,
value = value,
onValueChange = { viewModel.set(option, it) }
)
val value by viewModel.value(option).collectAsState(initial = null)
value?.let {
TvBooleanSettingItem(
title = option.title,
value = it,
onValueChange = { value -> viewModel.set(option, value) }
)
}
}
is StringSetting -> {
val value by viewModel.value(option).collectAsState(initial = option.defaultValue)
TvStringSettingItem(
title = option.title,
value = value,
onValueChange = { viewModel.set(option, it) }
)
val value by viewModel.value(option).collectAsState(initial = null)
value?.let {
TvStringSettingItem(
title = option.title,
value = it,
onValueChange = { value -> viewModel.set(option, value) }
)
}
}
is VoidSetting -> {
@@ -164,13 +170,15 @@ private fun <T> TvDropdownSettingOptionItem(
option: DropdownSetting<T>,
viewModel: SettingsViewModel
) {
val value by viewModel.value(option).collectAsState(initial = option.defaultValue)
TvDropdownSettingItem(
title = option.title,
value = value,
options = option.options,
onValueChange = { viewModel.set(option, it) }
)
val value by viewModel.value(option).collectAsState(initial = null)
value?.let {
TvDropdownSettingItem(
title = option.title,
value = it,
options = option.options,
onValueChange = { value -> viewModel.set(option, value) }
)
}
}
@Composable

View File

@@ -105,31 +105,37 @@ private fun SettingOptionItem(
) {
when (option) {
is RangeSetting -> {
val value by viewModel.value(option).collectAsState(initial = option.defaultValue)
RangeSettingItem(
title = option.title,
value = value,
valueRange = option.valueRange,
onValueChange = { viewModel.set(option, it) }
)
val value by viewModel.value(option).collectAsState(initial = null)
value?.let {
RangeSettingItem(
title = option.title,
value = it,
valueRange = option.valueRange,
onValueChange = { value -> viewModel.set(option, value) }
)
}
}
is BooleanSetting -> {
val value by viewModel.value(option).collectAsState(initial = option.defaultValue)
BooleanSettingItem(
title = option.title,
value = value,
onValueChange = { viewModel.set(option, it) }
)
val value by viewModel.value(option).collectAsState(initial = null)
value?.let {
BooleanSettingItem(
title = option.title,
value = it,
onValueChange = { value -> viewModel.set(option, value) }
)
}
}
is StringSetting -> {
val value by viewModel.value(option).collectAsState(initial = option.defaultValue)
StringSettingItem(
title = option.title,
value = value,
onValueChange = { viewModel.set(option, it) }
)
val value by viewModel.value(option).collectAsState(initial = null)
value?.let {
StringSettingItem(
title = option.title,
value = it,
onValueChange = { value -> viewModel.set(option, value) }
)
}
}
is VoidSetting -> {
@@ -153,13 +159,15 @@ private fun <T> DropdownSettingOptionItem(
option: DropdownSetting<T>,
viewModel: SettingsViewModel
) {
val value by viewModel.value(option).collectAsState(initial = option.defaultValue)
DropdownSettingItem(
title = option.title,
value = value,
options = option.options,
onValueChange = { viewModel.set(option, it) }
)
val value by viewModel.value(option).collectAsState(initial = null)
value?.let {
DropdownSettingItem(
title = option.title,
value = it,
options = option.options,
onValueChange = { value -> viewModel.set(option, value) }
)
}
}
@Composable

View File

@@ -9,8 +9,8 @@ import hu.bbara.purefin.core.settings.DropdownSetting
import hu.bbara.purefin.core.settings.RangeSetting
import hu.bbara.purefin.core.settings.SettingGroup
import hu.bbara.purefin.core.settings.SettingsGroupProvider
import hu.bbara.purefin.core.settings.SettingsRepository
import hu.bbara.purefin.core.settings.SettingsOptions
import hu.bbara.purefin.core.settings.SettingsRepository
import hu.bbara.purefin.core.settings.StringSetting
import hu.bbara.purefin.core.settings.VoidSetting
import kotlinx.coroutines.flow.MutableSharedFlow