diff --git a/android-buyer/app/src/main/java/com/roubao/autopilot/ui/screens/ProcurementScreen.kt b/android-buyer/app/src/main/java/com/roubao/autopilot/ui/screens/ProcurementScreen.kt index 636ab6a..ab2f4f5 100644 --- a/android-buyer/app/src/main/java/com/roubao/autopilot/ui/screens/ProcurementScreen.kt +++ b/android-buyer/app/src/main/java/com/roubao/autopilot/ui/screens/ProcurementScreen.kt @@ -142,7 +142,7 @@ fun ProcurementScreen( } when (state.phase) { - ProcurementPhase.SIGNED_OUT -> item { + ProcurementPhase.SIGNED_OUT -> item(key = "procurement-login") { LoginSection( state = state, onLogin = onLogin @@ -157,7 +157,9 @@ fun ProcurementScreen( } ProcurementPhase.CLAIMED -> { if (state.authenticationRequired) { - item { LoginSection(state = state, onLogin = onLogin) } + item(key = "procurement-login") { + LoginSection(state = state, onLogin = onLogin) + } } item { TaskDetails(state) } item { @@ -196,7 +198,9 @@ fun ProcurementScreen( ProcurementPhase.RUNNING, ProcurementPhase.AUTHORIZATION_EXPIRED -> { if (state.authenticationRequired) { - item { LoginSection(state = state, onLogin = onLogin) } + item(key = "procurement-login") { + LoginSection(state = state, onLogin = onLogin) + } } item { TaskDetails(state) } item { @@ -266,14 +270,14 @@ private fun LoginSection( ) { val colors = BaoziTheme.colors val coroutineScope = rememberCoroutineScope() - var backendUrl by remember(state.profile.backendUrl) { + var backendUrl by remember { mutableStateOf(state.profile.backendUrl) } - var username by remember(state.profile.username) { + var username by remember { mutableStateOf(state.profile.username) } var password by remember { mutableStateOf("") } - var deviceId by remember(state.profile.deviceId) { + var deviceId by remember { mutableStateOf(state.profile.deviceId) } var deviceToken by remember { mutableStateOf("") } diff --git a/docs/tasks/T-209.md b/docs/tasks/T-209.md index f109a48..0dbafd8 100644 --- a/docs/tasks/T-209.md +++ b/docs/tasks/T-209.md @@ -52,3 +52,9 @@ write_paths: 防止请求尚未开始时重复点击。 - 2026-07-27:`./gradlew.bat :app:compileDebugKotlin :app:testDebugUnitTest :app:assembleDebug` 通过;最新 Debug APK 已安装并冷启动至 PKG110,无 crash/ANR。 +- 2026-07-27:首次修复后真机复测仍复现。根因是错误信息作为新的 `LazyColumn` 项插在 + 登录表单之前,无 key 的表单项位置变化后被 Compose 重新创建。登录项改用稳定 + `procurement-login` key,并移除会在 profile 发布时重置字段的 remember key。 +- 2026-07-27:PKG110 真机以无效后台地址触发“后台地址必须包含主机”;错误显示后测试 + 的后台地址、账号和设备 ID 仍可见。强制重启 App 后测试值消失,确认表单只在内存中 + 保留,未持久化凭证。