From 14632e11dff35e03d3ddefb7c73cf7d6a58ea8a5 Mon Sep 17 00:00:00 2001 From: joungmin Date: Fri, 12 Jun 2026 15:58:54 +0900 Subject: [PATCH] =?UTF-8?q?[05-Designer]=20#218=20UX=20=EB=8B=A4=EB=93=AC?= =?UTF-8?q?=EA=B8=B0=20=E2=80=94=20RAM=20=EA=B2=8C=EC=9D=B4=ED=8A=B8=20?= =?UTF-8?q?=EB=AC=B8=EA=B5=AC=20+=20=EC=98=B5=ED=8A=B8=EC=95=84=EC=9B=83?= =?UTF-8?q?=20=ED=91=9C=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- app/lib/ui/screens/settings_screen.dart | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/app/lib/ui/screens/settings_screen.dart b/app/lib/ui/screens/settings_screen.dart index ea5b2fd..54030b9 100644 --- a/app/lib/ui/screens/settings_screen.dart +++ b/app/lib/ui/screens/settings_screen.dart @@ -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), ), ],