From 82c8112575dcf63dbed3854a3f22a1808c851e20 Mon Sep 17 00:00:00 2001 From: QIU Date: Fri, 14 Aug 2026 09:33:53 +0000 Subject: [PATCH] =?UTF-8?q?fix(settings):=20RadioControlDialog=20=E7=BB=84?= =?UTF-8?q?=E5=90=88=E6=9C=9F=E9=97=B4=E5=86=99=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 问题:Compose 运行时警告两次 'State write during composition' (split mode 重置 + baud rate 调整)。 根因:splitMode/baudRate 的条件写操作在组合 body 内直接执行 (if 块)。 修复:用 LaunchedEffect 隔离副作用,避免组合期间修改状态。 影响:消除运行时警告,避免潜在的组合跳帧或死循环。 --- .../rtbishop/look4sat/feature/settings/SettingsDialog.kt | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/feature/settings/src/main/java/com/rtbishop/look4sat/feature/settings/SettingsDialog.kt b/feature/settings/src/main/java/com/rtbishop/look4sat/feature/settings/SettingsDialog.kt index 8779c271..d377add1 100644 --- a/feature/settings/src/main/java/com/rtbishop/look4sat/feature/settings/SettingsDialog.kt +++ b/feature/settings/src/main/java/com/rtbishop/look4sat/feature/settings/SettingsDialog.kt @@ -36,6 +36,7 @@ import androidx.compose.material3.OutlinedTextField import androidx.compose.material3.Switch import androidx.compose.material3.Text import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember @@ -519,13 +520,17 @@ fun RadioControlDialog( val isSingleRadio = isIcom && splitMode.value // Reset split mode when switching away from IC-705 - if (!isIcom && splitMode.value) splitMode.value = false + LaunchedEffect(isIcom) { + if (!isIcom && splitMode.value) splitMode.value = false + } val baudRates = if (isIcom) RadioControlSettings.BAUD_RATES_ICOM else RadioControlSettings.BAUD_RATES_YAESU // If current baud rate is not in the new list, default to the first available - if (baudRate.intValue !in baudRates) baudRate.intValue = baudRates.first() + LaunchedEffect(baudRates) { + if (baudRate.intValue !in baudRates) baudRate.intValue = baudRates.first() + } val pairedDevices: List> = remember { buildList {