[05-Designer] #218 UX 다듬기 — RAM 게이트 문구 + 옵트아웃 표현

Round 2 QA PASS 후 user-facing 문구 3건 정리.

1) AC-6 RAM 게이트 안내: "이 단말의 RAM 이 부족합니다 (필요: 4GB 이상)"
   → "이 단말에서는 AI 도움을 사용할 수 없어요 (RAM 4GB 이상 필요)".
   Planner spec 톤과 align. "부족합니다" (비난 어조) → "사용할 수 없어요"
   (정보 제공 톤). 안내문 끝 마침표 제거.

2) ModelAvailability.missing 메시지가 RAM 게이트 active 상태에서 "위
   토글을 켜면" 안내를 표시해 모순 발생. meetsRam=false 분기 추가 →
   "이 단말은 모델을 받을 수 없어요 (RAM 4GB 이상 필요)" 노출.

3) _confirmOptOut 보조 텍스트 "다시 켜면 다시 다운로드해야 합니다"
   → "다시 켜면 처음부터 다운로드합니다". "다시" 중복 제거 + 호흡 정리.

기능 동작 변화 0. analyze clean, 88/88 통과.

Refs #218
This commit is contained in:
2026-06-12 15:58:54 +09:00
parent f71d132fa3
commit 14632e11df

View File

@@ -58,7 +58,7 @@ class _AiSection extends ConsumerWidget {
subtitle: Text( subtitle: Text(
meetsRam meetsRam
? 'Gemma 4 E2B 모델 ≈ 2.4GB. 모든 처리는 단말에서 일어납니다.' ? 'Gemma 4 E2B 모델 ≈ 2.4GB. 모든 처리는 단말에서 일어납니다.'
: '이 단말의 RAM 이 부족합니다 (필요: 4GB 이상).', : '이 단말에서는 AI 도움을 사용할 수 없어요 (RAM 4GB 이상 필요)',
), ),
value: meetsRam && optIn, value: meetsRam && optIn,
onChanged: meetsRam onChanged: meetsRam
@@ -86,7 +86,7 @@ class _AiSection extends ConsumerWidget {
error: (e, _) => ListTile(title: Text('상태 오류: $e')), error: (e, _) => ListTile(title: Text('상태 오류: $e')),
data: (a) => ListTile( data: (a) => ListTile(
title: const Text('모델 상태'), title: const Text('모델 상태'),
subtitle: Text(_describe(a)), subtitle: Text(_describe(a, meetsRam: meetsRam)),
), ),
), ),
if (optIn && download != null) if (optIn && download != null)
@@ -102,12 +102,16 @@ class _AiSection extends ConsumerWidget {
); );
} }
String _describe(ModelAvailability a) { String _describe(ModelAvailability a, {required bool meetsRam}) {
switch (a) { switch (a) {
case ModelAvailability.ready: case ModelAvailability.ready:
return '준비 완료 — 새 습관 만들기에서 ✨ AI 제안을 쓸 수 있어요'; return '준비 완료 — 새 습관 만들기에서 ✨ AI 제안을 쓸 수 있어요';
case ModelAvailability.missing: case ModelAvailability.missing:
return '아직 받지 않았어요 — 위 토글을 켜면 다운로드합니다'; // RAM 게이트로 토글이 비활성인 상태에서 "토글을 켜면" 안내는 모순.
// 단말 미지원 메시지를 그대로 노출해서 사용자가 다음 행동을 알 수 있게.
return meetsRam
? '아직 받지 않았어요 — 위 토글을 켜면 다운로드합니다'
: '이 단말은 모델을 받을 수 없어요 (RAM 4GB 이상 필요)';
case ModelAvailability.corrupt: case ModelAvailability.corrupt:
return '파일이 손상됐어요 — 끄고 다시 켜면 새로 받습니다'; return '파일이 손상됐어요 — 끄고 다시 켜면 새로 받습니다';
case ModelAvailability.downloading: case ModelAvailability.downloading:
@@ -171,7 +175,7 @@ class _AiSection extends ConsumerWidget {
), ),
SizedBox(height: 4), SizedBox(height: 4),
Text( Text(
'다시 켜면 다시 다운로드해야 합니다.', '다시 켜면 처음부터 다운로드합니다.',
style: TextStyle(fontSize: 13, color: Colors.grey), style: TextStyle(fontSize: 13, color: Colors.grey),
), ),
], ],