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,32 +116,38 @@ 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)
value?.let {
TvNumberSettingItem( TvNumberSettingItem(
title = option.title, title = option.title,
value = value, value = it,
valueRange = option.valueRange, valueRange = option.valueRange,
onValueChange = { viewModel.set(option, it) } 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)
value?.let {
TvBooleanSettingItem( TvBooleanSettingItem(
title = option.title, title = option.title,
value = value, value = it,
onValueChange = { viewModel.set(option, 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)
value?.let {
TvStringSettingItem( TvStringSettingItem(
title = option.title, title = option.title,
value = value, value = it,
onValueChange = { viewModel.set(option, it) } onValueChange = { value -> viewModel.set(option, value) }
) )
} }
}
is VoidSetting -> { is VoidSetting -> {
TvVoidSettingItem( TvVoidSettingItem(
@@ -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)
value?.let {
TvDropdownSettingItem( TvDropdownSettingItem(
title = option.title, title = option.title,
value = value, value = it,
options = option.options, options = option.options,
onValueChange = { viewModel.set(option, it) } onValueChange = { value -> viewModel.set(option, value) }
) )
}
} }
@Composable @Composable

View File

@@ -105,32 +105,38 @@ 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)
value?.let {
RangeSettingItem( RangeSettingItem(
title = option.title, title = option.title,
value = value, value = it,
valueRange = option.valueRange, valueRange = option.valueRange,
onValueChange = { viewModel.set(option, it) } 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)
value?.let {
BooleanSettingItem( BooleanSettingItem(
title = option.title, title = option.title,
value = value, value = it,
onValueChange = { viewModel.set(option, 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)
value?.let {
StringSettingItem( StringSettingItem(
title = option.title, title = option.title,
value = value, value = it,
onValueChange = { viewModel.set(option, it) } onValueChange = { value -> viewModel.set(option, value) }
) )
} }
}
is VoidSetting -> { is VoidSetting -> {
VoidSettingItem( VoidSettingItem(
@@ -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)
value?.let {
DropdownSettingItem( DropdownSettingItem(
title = option.title, title = option.title,
value = value, value = it,
options = option.options, options = option.options,
onValueChange = { viewModel.set(option, it) } 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