Skip to content

WriteTextField 가 외부 value 변경에 반응하지 않아 호출부 2곳이 key() 로 우회 — resume 실패 침묵도 함께 #1018

Closed

Description

@Sadturtleman

📜 Overview (Required)

WriteTextField 가 외부 value 를 첫 컴포지션 1회만 에디터에 시드한다.

LaunchedEffect(Unit) { if (!value.isNullOrEmpty()) state.setHtml(value) }

그래서 «화면이 먼저 뜨고 값이 나중에 도착하는» 경로 — 임시저장 이어쓰기, 수정 프리필 — 에서 본문이 실리지 않는다. 지금은 호출부 2곳이 각자 key() 로 컴포넌트를 통째로 재생성해 우회한다.

즉 이 컴포넌트의 호출부 2/2 가 같은 우회를 복붙으로 유지하고 있다.

우회의 부작용

재마운트는 rememberCoroutineScope 를 취소하므로

  • 진행 중이던 이미지 업로드가 끊기거나, 끝나도 state.setHtml 이 고아 state 에 쓰인다
  • rememberLauncherForActivityResult 키가 교체돼 피커 pending 결과가 콜백을 못 찾을 수 있다
  • 커서·포커스·한글 IME 조합 상태가 리셋된다

collectAsStateWithLifecycle 이 피커가 떠 있는 동안 flip 반영을 복귀 시점까지 미루므로 «복귀 직후 업로드 시작 → 다음 프레임 재마운트» 로 겹치는 경로가 실재한다.

무엇을 하면 되나

LaunchedEffect(Unit) 시드를 value 변경에 반응하도록 고치면 두 화면이 동시에 해결되고 위 부작용이 원천 소멸한다. 에디터가 이미 들고 있는 값과 같으면 다시 쓰지 않는 가드가 필요하다(사용자 입력을 되돌리면 안 된다).

함께 볼 것 — 데일리질문 resume 실패 침묵

DailyQuestionWriteViewModel.resumeDraft() 가 getList 실패를 getOrNull() 로 삼켜 «draft 없음» 과 구분되지 않는다. 실패 후 저장하면 upsert 로 기존 draft 가 덮인다. 일기 화면은 같은 실패를 draftLoadError 로 표면화해 에러 슬롯에 렌더링하므로(DiaryWriteViewModel · DiaryWriteScreen) 두 화면의 방식이 갈려 있다.

같은 «두 작성 화면의 재시드·실패 처리를 맞춘다» 범위라 함께 둔다.

📌 Child Issue(Optional)

No response

📍 Note (Optional)

Activity

  1. self-assigned this
    on Aug 24, 2026
  2. changed the title [-]refactor(mindrecord): WriteTextField 가 외부 value 변경에 반응하지 않아 호출부 2곳이 key() 로 우회 — resume 실패 침묵도 함께[/-] [+]WriteTextField 가 외부 value 변경에 반응하지 않아 호출부 2곳이 key() 로 우회 — resume 실패 침묵도 함께[/+] on Aug 28, 2026
  3. added
    refactor동작 변경 없이 코드 구조·책임·경계를 개선하는 작업
    area:mindrecord마음의 기록 기능 영역
    on Aug 28, 2026
  4. added a commit that references this issue on Aug 29, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area:mindrecord마음의 기록 기능 영역refactor동작 변경 없이 코드 구조·책임·경계를 개선하는 작업

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions