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

View File

@@ -105,31 +105,37 @@ private fun SettingOptionItem(
) { ) {
when (option) { when (option) {
is RangeSetting -> { is RangeSetting -> {
val value by viewModel.value(option).collectAsState(initial = option.defaultValue) val value by viewModel.value(option).collectAsState(initial = null)
RangeSettingItem( value?.let {
title = option.title, RangeSettingItem(
value = value, title = option.title,
valueRange = option.valueRange, value = it,
onValueChange = { viewModel.set(option, it) } valueRange = option.valueRange,
) onValueChange = { value -> viewModel.set(option, value) }
)
}
} }
is BooleanSetting -> { is BooleanSetting -> {
val value by viewModel.value(option).collectAsState(initial = option.defaultValue) val value by viewModel.value(option).collectAsState(initial = null)
BooleanSettingItem( value?.let {
title = option.title, BooleanSettingItem(
value = value, title = option.title,
onValueChange = { viewModel.set(option, it) } value = it,
) onValueChange = { value -> viewModel.set(option, value) }
)
}
} }
is StringSetting -> { is StringSetting -> {
val value by viewModel.value(option).collectAsState(initial = option.defaultValue) val value by viewModel.value(option).collectAsState(initial = null)
StringSettingItem( value?.let {
title = option.title, StringSettingItem(
value = value, title = option.title,
onValueChange = { viewModel.set(option, it) } value = it,
) onValueChange = { value -> viewModel.set(option, value) }
)
}
} }
is VoidSetting -> { is VoidSetting -> {
@@ -153,13 +159,15 @@ private fun <T> DropdownSettingOptionItem(
option: DropdownSetting<T>, option: DropdownSetting<T>,
viewModel: SettingsViewModel viewModel: SettingsViewModel
) { ) {
val value by viewModel.value(option).collectAsState(initial = option.defaultValue) val value by viewModel.value(option).collectAsState(initial = null)
DropdownSettingItem( value?.let {
title = option.title, DropdownSettingItem(
value = value, title = option.title,
options = option.options, value = it,
onValueChange = { viewModel.set(option, it) } options = option.options,
) onValueChange = { value -> viewModel.set(option, value) }
)
}
} }
@Composable @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.RangeSetting
import hu.bbara.purefin.core.settings.SettingGroup import hu.bbara.purefin.core.settings.SettingGroup
import hu.bbara.purefin.core.settings.SettingsGroupProvider 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.SettingsOptions
import hu.bbara.purefin.core.settings.SettingsRepository
import hu.bbara.purefin.core.settings.StringSetting import hu.bbara.purefin.core.settings.StringSetting
import hu.bbara.purefin.core.settings.VoidSetting import hu.bbara.purefin.core.settings.VoidSetting
import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.MutableSharedFlow