Skip to content

feat: 홈을 오늘·공지·바로가기 중심으로 재구성 - #307

Merged
rdyjun merged 48 commits into
feat/campus-tabfrom
feat/home-redesign
Sep 6, 2026
Merged

feat: 홈을 오늘·공지·바로가기 중심으로 재구성#307
rdyjun merged 48 commits into
feat/campus-tabfrom
feat/home-redesign

Conversation

@rdyjun

@rdyjun rdyjun commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

Stacked on #306. base는 feat/campus-tab이며 #306을 먼저 병합합니다.

홈을 인사말·수업과 학식·새로운 공지·바로가기 중심으로 재배치했습니다. 기존 홈·학식 API와 ViewModel의 데이터를 그대로 사용합니다.

  • 회원에게 수업 수를 표시하고 수업이 없으면 "오늘은 수업이 없어요"로 안내합니다. 비회원에게는 "오늘의 캠퍼스 소식"을 표시하며 시간표 카드는 기존처럼 숨깁니다.
  • 수업과 주간 학식을 좌우로 넘길 수 있습니다. 학식의 로딩·조회 실패·메뉴 없음 상태를 구분하고, 날짜와 요일을 함께 표시합니다.
  • 공지 목록 아래의 학과 구독 설정 진입점을 유지합니다. 기존 API에 없는 읽음 상태나 공지 수 집계는 추가하지 않습니다.
  • 맛집·도서관은 기존 named route로, 챗봇은 기존 로그인 검사와 LoginRequiredDialog를 거쳐 이동합니다.
  • 광고는 기존 AdmobNativeAd와 기존 광고 ID를 그대로 사용하고 TemplateType.small, 높이 100으로 배치합니다. 새로운 배너 광고 API나 환경 변수는 필요하지 않습니다.
  • 홈의 인기 모집과 사용하지 않는 이전 홈 UI 위젯을 제거합니다.

변경 파일은 lib/presentation/home 내부에만 있습니다. 공통 컴포넌트·시간 포맷 유틸 추출, API·Repository·UseCase·ViewModel 변경, 새 광고 컴포넌트, CI 및 의존성 변경은 포함하지 않습니다.

검증: 커밋 e8a461eiOS release 빌드가 성공했고 분석 로그의 error는 0개입니다. git diff --check와 변경 Dart 파일의 프로젝트 내부 import 검사도 통과했습니다. #306 대비 home presentation 외의 변경이 없음을 확인했습니다. 로컬 Flutter SDK가 없어 기기에서 화면 동작을 실행해 확인하지는 못했습니다.

목록을 읽기 전에 오늘 상태부터 알리도록 첫 문장을 둔다. 0 인 항목은 문장에서
빼고 둘 다 없으면 "오늘은 일정이 없어요" 로 바꾼다 —
"수업 0개, 공지 0개" 는 읽는 사람에게 아무것도 알려주지 않는다.

오늘 카드
- `오늘` 제목과 `시간표 ›` 헤더를 없앴다. 수업 칸 자체가 시간표로 가는 링크이고
  우측 셰브런만 그 사실을 알린다. 제목 줄이 빠져 카드가 한 뼘 짧아진다
- 수업과 학식을 좌우로 넘긴다. BouncingScrollPhysics 라 넘길 게 하나뿐이어도
  끌리고 튕겨 돌아온다. 넘길 곳이라는 것과 넘길 게 없다는 것을 함께 알려주므로
  안내 문구를 따로 두지 않았다
- 학식 제목은 넘긴 날짜를 따라간다. 서버가 dayOfWeek 를 주므로 요일을 계산하지 않는다
- 대표 메뉴를 뽑지 않고 전부 같은 무게로 나열한다. 어떤 메뉴가 앞에 올지
  데이터가 보장하지 않아 밥이나 김치가 대표로 보일 수 있다

광고를 세로 250 네이티브에서 가로 배너로 바꿨다. 공지와 바로가기 사이를
크게 가르던 것이 목록 흐름을 끊었다. 광고가 안 붙으면 아무것도 그리지 않는다.

인기 모집은 게시판과 함께 홈에서 뺐다. 안 쓰이게 된 home_today,
home_new_notice, home_popular_recruits 를 지웠다.

공지 앞의 점은 읽음 여부 자리다. HomeNotice 응답에 공지 id 가 없어 로컬 읽음
기록과 대조할 수 없으므로 지금은 전부 안 읽음으로 둔다. 백엔드에서 id 가
내려오면 isUnread 만 채우면 된다.
고정 AdSize.banner 도 지원되지만 구글이 권하는 방식이 아니다.
폭이 390~430 인 요즘 기기에서 320 고정이면 양옆에 70~110 이 빈 채 남는다.
기기 폭을 넘기면 그에 맞는 높이를 돌려주므로 폭을 꽉 채운다.

adaptive 크기를 구하려면 화면 폭이 필요해 로딩 시작을 initState 에서
didChangeDependencies 로 옮기고 한 번만 돌게 막았다.
기기가 크기를 못 주면 표준 배너로 떨어진다.
홈 공지는 서버에서 세 건으로 잘려 오고(searchHomeNotices 의 limit(3))
읽음 여부도 알 수 없어, 그 길이를 "새 공지 N개" 로 쓰면 매일 3개가 뜬다.
공지 수를 빼고 수업만 센다. 안 읽은 공지를 셀 수 있게 되면 그때 넘긴다.

gray7 == background 로 빈 상태를 흐리게 하려 했으나 gray7 을 넘기는 곳이
없어 항상 검정이었다. isMuted 로 명시한다.

그 밖에
- 바로가기 배경색을 ColorStyles.mintBg / amberBg 로 바꾼다
- prefer_const_constructors 에 걸리던 TextStyle 세 곳에 const 를 붙인다
@rdyjun
rdyjun force-pushed the feat/home-redesign branch from 61400b0 to 6103977 Compare September 5, 2026 05:11
재구성하면서 HomeToday 의 일정 카드가 빠져 homeEntity.schedule 을
아무도 읽지 않게 됐다. 특히 비회원은 학사 일정을 볼 곳이 없어졌다.
바로가기의 학사일정은 링크일 뿐 내용을 보여주지 않는다.

수업과 학식 사이에 일정 덱을 넣는다. 표기는 기존 HomeToday 를 따른다.

- 학사 일정은 시각 대신 "학사", 개인 일정은 시작 시각
- 비회원에게는 개인 일정이 없으므로 학사 일정만 남긴다
- 칸을 누르면 일정 화면으로 간다
수업·일정은 내 것이고 학식은 학교 것이라 한 장에 묶으면 카드가 무슨
카드인지 흐려진다. 오늘 카드는 수업과 일정만 담고, 학식은 공지 위에
자기 제목을 단 구획으로 세운다.

- HomeMealSection 신설. 제목의 날짜가 넘긴 쪽을 따라 바뀌므로 구획이
  스스로 상태를 든다. 다른 구획과 같은 largeTextBold 제목을 쓴다
- 두 카드가 같이 쓰는 줄을 HomeTodayRow 로 뽑는다
- 학식이 빠지면서 HomeTodayCard 는 훅도 프로바이더도 필요 없어져
  StatelessWidget 이 된다
- 인사말을 수업 + 일정으로 센다. 공지는 서버에서 세 건으로 잘려 와
  세면 매일 "새 공지 3개" 가 뜨므로 넣지 않는다
두 구획이 gray1 채움에 같은 줄 위젯, 같은 높이라 스크롤하면 같은
카드가 두 번 나오는 것처럼 보였다.

- 면을 amberBg 로 바꾼다. 오늘 카드가 회색이라 곧바로 갈린다
- 40x40 이모지 타일을 뺀다. 구획 제목이 이미 학식이라 타일이 같은
  말을 한 번 더 하고 있었고, 홈에서 타일 반복이 셋에서 둘로 준다
- 메뉴를 흰 칩으로 편다. 한 줄에 밀어 넣으면 읽어야 할 덩어리가 된다
- 덱 높이 68 -> 92. 오늘 카드와 비율도 갈린다
- 불러오는 중·실패·자료 없음은 펼칠 메뉴가 없으니 중립 회색 낮은 칸

서버 구분자를 확정할 수 없어 쓰일 만한 기호를 모두 끊고, 끊을 곳이
없는 문장(주말·휴일 안내)은 칩으로 만들지 않는다. 반찬이 아주 많은
날은 칩이 세 줄을 넘길 수 있어 ClipRect 로 잘라 낸다. PageView 는
장마다 높이를 달리 줄 수 없다.

새 색은 쓰지 않았다. amberBg 는 원래 이 구획 이모지 타일 배경이었다.
캠퍼스에서 만든 MealDeck 을 홈도 그대로 쓴다. 두 화면이 같은 모양으로
읽히고 같이 좌우로 넘어간다. 홈에서만 요일을 못 넘기게 두면 예전에 되던
것이 안 되는 셈이라 회귀다.

다른 것은 그릇뿐이다. 홈은 채운 면 대신 왼쪽 세로선을 쓴다 — 바로 위
오늘 카드가 이미 둥근 회색 면이라, 학식까지 면을 깔면 색만 다른 같은
덩어리 둘이 붙어 있게 된다. 앰버 면과 흰 칩으로 갈라 보려 했던 것을
걷어냈다. 겹치는 이유가 색이 아니라 구조여서 색으로는 갈라지지 않는다.

SwipeDeck 을 core/presentation/components 로 옮겼다. 홈 오늘 카드와 캠퍼스
학식이 같이 쓰는데 presentation/home/widgets 에 두면 캠퍼스가 홈 안쪽을
들여다보게 된다.
@rdyjun
rdyjun merged commit f2aac0e into develop Sep 6, 2026
1 check passed
This was referenced Sep 6, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant