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