From 5e735ea14ea160c0208e6b6da56c2387bdc5138a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=ADhuajijam?= Date: Tue, 14 Jan 2025 01:13:25 +0800 Subject: [PATCH] fix: crash when editing int or long values --- .../dev/bluehouse/enablevolte/pages/Editor.kt | 53 ++++++++++++------- 1 file changed, 35 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/dev/bluehouse/enablevolte/pages/Editor.kt b/app/src/main/java/dev/bluehouse/enablevolte/pages/Editor.kt index 3e1008d..16dfa33 100644 --- a/app/src/main/java/dev/bluehouse/enablevolte/pages/Editor.kt +++ b/app/src/main/java/dev/bluehouse/enablevolte/pages/Editor.kt @@ -152,6 +152,8 @@ fun List.removeAt(index: Int): List { @Composable fun SingleValueEditor(data: DataRow, onValueChange: (String) -> Unit) { + var inputValue by remember { mutableStateOf(data.value ?: "") } + when (val typedValue = data.typedValue) { is Boolean -> Row( modifier = Modifier.selectableGroup().fillMaxWidth(), @@ -168,24 +170,39 @@ fun SingleValueEditor(data: DataRow, onValueChange: (String) -> Unit) { ) Text(stringResource(R.string.false_)) } - is Int -> TextField( - value = data.value ?: "", - onValueChange = { onValueChange(it) }, - keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number), - modifier = Modifier.fillMaxWidth(), - ) - is Long -> TextField( - value = data.value ?: "", - onValueChange = { onValueChange(it) }, - keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number), - modifier = Modifier.fillMaxWidth(), - ) - is String, null -> TextField( - value = data.value ?: "", - onValueChange = { onValueChange(it) }, - keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Text), - modifier = Modifier.fillMaxWidth(), - ) + is Int -> { + TextField( + value = inputValue, + onValueChange = { newInput -> + inputValue = newInput + newInput.toIntOrNull()?.let { onValueChange(it.toString()) } + }, + keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number), + modifier = Modifier.fillMaxWidth(), + ) + } + is Long -> { + TextField( + value = inputValue, + onValueChange = { newInput -> + inputValue = newInput + newInput.toLongOrNull()?.let { onValueChange(it.toString()) } + }, + keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number), + modifier = Modifier.fillMaxWidth(), + ) + } + is String, null -> { + TextField( + value = inputValue, + onValueChange = { newInput -> + inputValue = newInput + onValueChange(newInput) + }, + keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Text), + modifier = Modifier.fillMaxWidth(), + ) + } else -> {} } }