Conversation
* feat: 모여봐요 탭을 캠퍼스로 교체하고 게시판을 진입점에서 제거 게시판(모집·장터)을 UI 에서 걷어내고 그 자리에 캠퍼스 탭을 넣는다. 모여봐요는 "모임" 이라는 뜻인데 맛집·학식·도서관처럼 "탐색" 에 가까운 것들이 들어가므로 이름도 함께 바꿨다. 캠퍼스 탭 구성 - 오늘 뭐 먹지: 좋아요 랭킹 상위 맛집. /restaurants/nearby 가 이미 likeCount desc, distance asc 로 정렬해 내려주므로 앞에서 잘라 쓴다 - 학식: 오늘 메뉴. 대표 메뉴를 뽑지 않고 전부 같은 무게로 나열한다 - 캠퍼스 생활: 도서관·챗봇·학사일정 맛집 썸네일은 카테고리별 색 면으로 대신한다. 카카오 로컬 API 에 이미지 필드가 없어 가게 사진을 받을 수 없다. 분류가 없거나 새 카테고리가 생기면 밥 모양으로 떨어지게 두었다. /board 라우트와 BoardPageScreen 은 지우지 않고 셸 밖 최상위 라우트로 옮겼다. 모집·장터 푸시 딥링크(push_router)와 홈 인기 모집이 아직 이 경로로 이동하고, 되돌릴 여지도 남겨둔다. 과팅은 이번에 넣지 않았다. getBlindDateOpen 이 authDio 를 써서 비회원이 못 쓰고, 닫혀 있을 때 false 대신 예외를 던져 "닫힘" 과 "오류" 를 구분할 수 없다. 데이터소스를 먼저 손봐야 한다. * fix: 리빌드마다 맛집을 다시 부르던 문제와 캠퍼스 화면 정리 FutureBuilder 를 build() 안에서 만들어 부모가 리빌드될 때마다 /restaurants/nearby 를 새로 호출했다. topRestaurantsProvider 로 옮긴다. 프로젝트에서 FutureBuilder 를 쓰는 곳이 여기뿐이기도 했다 — 나머지는 모두 Riverpod 프로바이더와 AsyncValue.when 을 쓴다. 실패했을 때 안내 문구도 함께 넣었다. 그 밖에 - CampusPageScreen 이 ref 를 쓰지 않아 StatelessWidget 으로 내린다 - Scaffold 와 SafeArea 순서를 형제 탭(board_page_screen)과 맞춘다 - 기능 구분용 배경색을 ColorStyles.mintBg / amberBg 로 올린다 * fix: import Restaurant model for top restaurants provider * fix: encode restaurant webview URL query * ci: fail fast on analyzer errors and refresh cache action * ci: fail analyzer only on errors * chore: add missing flutter_lints dependency * refactor: scope top restaurants provider to campus feature * refactor: add reusable section header component * refactor: keep restaurants providers feature-agnostic * refactor: consume campus-scoped restaurant ranking provider * refactor: reuse common section header in campus * refactor: open campus section header to widget extensions * refactor: compose campus section header extensions at call site * fix: restore campus meal date interpolation * refactor: reuse restaurant webview route constant * refactor: centralize login-required UI actions * fix: guard campus chatbot entry with shared auth action * refactor: keep authenticated UI action guard minimal * ci: cancel stale iOS runs for newer PR commits * chore: remove unused restaurants provider import * fix: keep campus redesign scoped to UI changes * feat: 캠퍼스 학식을 이번 주 전체로 넓히고 되풀이 메뉴를 뒤로 물린다 캠퍼스 학식은 오늘 하루치 문자열을 그대로 한 줄에 뿌리고 있었다. 주간 데이터는 이미 한 응답에 다 들어오는데 하루만 쓰고 버리던 셈이다. 좌우로 넘겨 월~금을 볼 수 있게 하고, 날짜는 넘긴 장을 따라 판 안에서 바뀐다. 구획 제목의 날짜 꼬리표는 뺐다 — 제목에 두면 화면이 페이지 상태를 들고 있어야 하고, 홈과 캠퍼스가 같은 것을 두 번 만들게 된다. 메뉴는 하루 일곱 항목쯤 오는데 그중 밥·김치·요구르트가 매일 같다. 일곱을 같은 무게로 늘어놓으면 자리의 절반을 매일 같은 글자가 먹는다. 그렇다고 대표 메뉴를 뽑을 수는 없다 — 어떤 메뉴가 앞에 올지 서버가 보장하지 않아 앞자리를 주메뉴로 올리면 엉뚱한 게 대표가 된다. 그래서 순서도 이름도 보지 않고 등장 일수만 센다. 그 주 급식일의 80% 이상에 나오는 항목만 아래로 내린다. 고정 목록을 박지 않는 이유는 그 목록이 곧 틀리기 때문이다 — 비빔밥이 나오는 날은 밥 이름이 다르고(그날은 내려가면 안 된다) 김치도 주에 따라 깍두기가 된다. 실제 한 주로 확인했다. 배추김치 5/5, 요구르트 5/5, 백미밥 4/5 → 내려감 나머지 스물몇 개는 전부 1/5 → 위에 남음 금요일 오색나물비빔밥은 1/5 이라 위에 남음 셀 표본이 세 날이 안 되거나, 내리고 나서 위에 두 항목이 안 남으면 아무것도 내리지 않고 예전처럼 전부 한 무게로 보여준다. 세는 자리는 ViewModel 이다. 위젯에서 하면 rebuild 마다 다시 센다. 서버로 올리지 않은 이유는 /meal/current 가 월~금을 한 번에 내려줘 표본이 이미 클라이언트에 다 있고, 무엇을 뒤로 물릴지는 급식의 속성이 아니라 화면의 판단이라서다. 그리는 조각은 core/presentation/components 에 둔다. 홈도 같은 것을 쓴다. 곁들여 고친 것: - 휴무 판정이 `koreanMenu.length < 10` 이었다. 서버가 보내는 `식단 정보 없음` 이 마침 9자라 우연히 맞고 있었고, 짧은 메뉴가 하루 오면 그날이 통째로 휴무가 된다. 그 문자열을 직접 본다. - weekMeals 에 `오늘은 학식이 제공되지 않아요!` 라는 문구를 데이터로 채워 넣던 것을 걷어냈다. 안내 문구가 데이터 필드에 있으면 다른 날을 보여줄 때도 "오늘은" 이라고 말한다. 없음은 값이 아니라 상태로 둔다. - 🍚 이모지를 뺐다. 구획 제목이 이미 `학식` 이라 한 번 더 말할 이유가 없다. * fix: 메뉴가 비어 있는 날에 휴무라고 단정하지 않는다 서버가 그 날 보내는 값은 `식단 정보 없음` 이다. 급식을 안 하는 날인지 크롤링이 그 날을 못 가져온 것인지 구분해 주지 않는다. 그런데 앱은 `학식을 하지 않는 날이에요` 라고 단정하고 있었다. 식당은 여는데 앱만 안 한다고 말하는 날이 생긴다. 서버가 말한 만큼만 말한다. 불러오기 자체가 실패한 경우는 예전대로 `학식을 불러오지 못했어요` 로 따로 뜬다.
* feat: 홈을 오늘·공지·바로가기 중심으로 재구성 목록을 읽기 전에 오늘 상태부터 알리도록 첫 문장을 둔다. 0 인 항목은 문장에서 빼고 둘 다 없으면 "오늘은 일정이 없어요" 로 바꾼다 — "수업 0개, 공지 0개" 는 읽는 사람에게 아무것도 알려주지 않는다. 오늘 카드 - `오늘` 제목과 `시간표 ›` 헤더를 없앴다. 수업 칸 자체가 시간표로 가는 링크이고 우측 셰브런만 그 사실을 알린다. 제목 줄이 빠져 카드가 한 뼘 짧아진다 - 수업과 학식을 좌우로 넘긴다. BouncingScrollPhysics 라 넘길 게 하나뿐이어도 끌리고 튕겨 돌아온다. 넘길 곳이라는 것과 넘길 게 없다는 것을 함께 알려주므로 안내 문구를 따로 두지 않았다 - 학식 제목은 넘긴 날짜를 따라간다. 서버가 dayOfWeek 를 주므로 요일을 계산하지 않는다 - 대표 메뉴를 뽑지 않고 전부 같은 무게로 나열한다. 어떤 메뉴가 앞에 올지 데이터가 보장하지 않아 밥이나 김치가 대표로 보일 수 있다 광고를 세로 250 네이티브에서 가로 배너로 바꿨다. 공지와 바로가기 사이를 크게 가르던 것이 목록 흐름을 끊었다. 광고가 안 붙으면 아무것도 그리지 않는다. 인기 모집은 게시판과 함께 홈에서 뺐다. 안 쓰이게 된 home_today, home_new_notice, home_popular_recruits 를 지웠다. 공지 앞의 점은 읽음 여부 자리다. HomeNotice 응답에 공지 id 가 없어 로컬 읽음 기록과 대조할 수 없으므로 지금은 전부 안 읽음으로 둔다. 백엔드에서 id 가 내려오면 isUnread 만 채우면 된다. * refactor: 배너 광고를 고정 320x50 에서 anchored adaptive 로 고정 AdSize.banner 도 지원되지만 구글이 권하는 방식이 아니다. 폭이 390~430 인 요즘 기기에서 320 고정이면 양옆에 70~110 이 빈 채 남는다. 기기 폭을 넘기면 그에 맞는 높이를 돌려주므로 폭을 꽉 채운다. adaptive 크기를 구하려면 화면 폭이 필요해 로딩 시작을 initState 에서 didChangeDependencies 로 옮기고 한 번만 돌게 막았다. 기기가 크기를 못 주면 표준 배너로 떨어진다. * fix: 인사말이 사실과 다르던 문제와 동작하지 않던 조건문 홈 공지는 서버에서 세 건으로 잘려 오고(searchHomeNotices 의 limit(3)) 읽음 여부도 알 수 없어, 그 길이를 "새 공지 N개" 로 쓰면 매일 3개가 뜬다. 공지 수를 빼고 수업만 센다. 안 읽은 공지를 셀 수 있게 되면 그때 넘긴다. gray7 == background 로 빈 상태를 흐리게 하려 했으나 gray7 을 넘기는 곳이 없어 항상 검정이었다. isMuted 로 명시한다. 그 밖에 - 바로가기 배경색을 ColorStyles.mintBg / amberBg 로 바꾼다 - prefer_const_constructors 에 걸리던 TextStyle 세 곳에 const 를 붙인다 * fix: import Restaurant model for top restaurants provider * fix: encode restaurant webview URL query * fix: make swipe deck initial page and layout robust * fix: open cafeteria deck on today's meal * ci: fail fast on analyzer errors and refresh cache action * fix: use inline adaptive banner in home scroll * refactor: remove unused notice count greeting path * ci: fail analyzer only on errors * chore: add missing flutter_lints dependency * fix: preserve swipe position across parent rebuilds * fix: dispose in-flight banner ads safely * refactor: sync reusable campus architecture * refactor: sync reusable campus architecture * refactor: sync latest campus base architecture * refactor: sync latest campus base architecture * refactor: sync latest campus base architecture * refactor: sync latest campus base architecture * refactor: reuse common section header for notices * refactor: reuse common section header for quick links * refactor: remove obsolete cafeteria card after home redesign * refactor: reuse shared time string formatting * fix: reuse shared time formatting in home timetable * refactor: reuse restaurant webview route constant * refactor: sync shared authenticated action * refactor: sync reviewed campus base * refactor: sync reviewed campus base * fix: make quick-link auth requirements data-driven * refactor: refresh all visible home data and reuse auth guard * fix: restore shared time formatter and add HH:mm helper safely * refactor: keep authenticated UI action guard minimal * ci: cancel stale iOS runs for newer PR commits * chore: remove unused restaurants provider import * fix: keep home redesign on existing UI and API patterns * fix: 홈에서 사라졌던 오늘 일정을 되살린다 재구성하면서 HomeToday 의 일정 카드가 빠져 homeEntity.schedule 을 아무도 읽지 않게 됐다. 특히 비회원은 학사 일정을 볼 곳이 없어졌다. 바로가기의 학사일정은 링크일 뿐 내용을 보여주지 않는다. 수업과 학식 사이에 일정 덱을 넣는다. 표기는 기존 HomeToday 를 따른다. - 학사 일정은 시각 대신 "학사", 개인 일정은 시작 시각 - 비회원에게는 개인 일정이 없으므로 학사 일정만 남긴다 - 칸을 누르면 일정 화면으로 간다 * refactor: 홈에서 학식을 별도 구획으로 빼고 인사말에 일정을 넣는다 수업·일정은 내 것이고 학식은 학교 것이라 한 장에 묶으면 카드가 무슨 카드인지 흐려진다. 오늘 카드는 수업과 일정만 담고, 학식은 공지 위에 자기 제목을 단 구획으로 세운다. - HomeMealSection 신설. 제목의 날짜가 넘긴 쪽을 따라 바뀌므로 구획이 스스로 상태를 든다. 다른 구획과 같은 largeTextBold 제목을 쓴다 - 두 카드가 같이 쓰는 줄을 HomeTodayRow 로 뽑는다 - 학식이 빠지면서 HomeTodayCard 는 훅도 프로바이더도 필요 없어져 StatelessWidget 이 된다 - 인사말을 수업 + 일정으로 센다. 공지는 서버에서 세 건으로 잘려 와 세면 매일 "새 공지 3개" 가 뜨므로 넣지 않는다 * design: 학식 구획을 오늘 카드와 다른 생김새로 가른다 두 구획이 gray1 채움에 같은 줄 위젯, 같은 높이라 스크롤하면 같은 카드가 두 번 나오는 것처럼 보였다. - 면을 amberBg 로 바꾼다. 오늘 카드가 회색이라 곧바로 갈린다 - 40x40 이모지 타일을 뺀다. 구획 제목이 이미 학식이라 타일이 같은 말을 한 번 더 하고 있었고, 홈에서 타일 반복이 셋에서 둘로 준다 - 메뉴를 흰 칩으로 편다. 한 줄에 밀어 넣으면 읽어야 할 덩어리가 된다 - 덱 높이 68 -> 92. 오늘 카드와 비율도 갈린다 - 불러오는 중·실패·자료 없음은 펼칠 메뉴가 없으니 중립 회색 낮은 칸 서버 구분자를 확정할 수 없어 쓰일 만한 기호를 모두 끊고, 끊을 곳이 없는 문장(주말·휴일 안내)은 칩으로 만들지 않는다. 반찬이 아주 많은 날은 칩이 세 줄을 넘길 수 있어 ClipRect 로 잘라 낸다. PageView 는 장마다 높이를 달리 줄 수 없다. 새 색은 쓰지 않았다. amberBg 는 원래 이 구획 이모지 타일 배경이었다. * design: 홈 학식을 캠퍼스와 같은 판으로 맞춘다 캠퍼스에서 만든 MealDeck 을 홈도 그대로 쓴다. 두 화면이 같은 모양으로 읽히고 같이 좌우로 넘어간다. 홈에서만 요일을 못 넘기게 두면 예전에 되던 것이 안 되는 셈이라 회귀다. 다른 것은 그릇뿐이다. 홈은 채운 면 대신 왼쪽 세로선을 쓴다 — 바로 위 오늘 카드가 이미 둥근 회색 면이라, 학식까지 면을 깔면 색만 다른 같은 덩어리 둘이 붙어 있게 된다. 앰버 면과 흰 칩으로 갈라 보려 했던 것을 걷어냈다. 겹치는 이유가 색이 아니라 구조여서 색으로는 갈라지지 않는다. SwipeDeck 을 core/presentation/components 로 옮겼다. 홈 오늘 카드와 캠퍼스 학식이 같이 쓰는데 presentation/home/widgets 에 두면 캠퍼스가 홈 안쪽을 들여다보게 된다.
feat: 게시판을 앱 진입점에서 모두 닫는다
chore: update to v1.13.0+54
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
1.12.0+53→1.13.0+54포함된 변경
무엇이 바뀌나
게시판이 앱에서 사라진다
하단 탭의
모여봐요가캠퍼스로 바뀌고, 게시판(모집·장터)으로 가는 프런트진입점이 전부 닫힌다. 목록·검색·글쓰기·마이페이지 활동 항목은 물론, 푸시와
알림함을 눌러도 홈에서 멈춘다.
라우트와 화면 코드는 그대로 살려 뒀다. 지운 게 아니라 가는 길만 막았고,
푸시 라우팅은 주석으로 내려 두어 되살릴 때 주석만 풀면 된다.
캠퍼스 탭은 맛집·학식·도서관·챗봇을 모은다. "모임" 이 아니라 "탐색" 에 가까운
것들이라 탭 이름도 바꿨다.
홈이 오늘 중심으로 바뀐다
인사말이 오늘의 수업·일정 개수를 말하고, 그 아래 오늘 카드가 수업과 일정을
한 장에 담는다. 인기 모집글 카드는 게시판과 함께 내려갔다.
학식이 한 주 전체가 되고 정보에 위계가 생긴다
홈과 캠퍼스가 같은 판(
MealDeck)을 쓴다. 좌우로 넘겨 월~금을 보고, 날짜는넘긴 장을 따라 바뀐다.
메뉴는 하루 일곱 항목쯤 오는데 그중 밥·김치·요구르트가 매일 같다. 일곱을 같은
무게로 늘어놓으면 자리의 절반을 매일 같은 글자가 먹는다. 그렇다고 대표 메뉴를
뽑을 수는 없다 — 어떤 메뉴가 앞에 올지 서버가 보장하지 않아 앞자리를 주메뉴로
올리면 엉뚱한 게 대표가 된다.
그래서 순서도 이름도 보지 않고 등장 일수만 센다. 그 주 급식일의 80% 이상에
나오는 항목만 점선 아래로 내린다. 실제 한 주로 확인한 결과:
고정 목록을 박지 않은 이유가 마지막 줄이다. 비빔밥이 나오는 날은 밥 이름이
달라서 목록 방식이면 놓친다. 셀 표본이 세 날이 안 되거나 내리고 나서 위에 두
항목이 안 남으면 아무것도 내리지 않는다.
곁들여 고친 것:
koreanMenu.length < 10이었다. 서버가 보내는식단 정보 없음이 마침 9자라 우연히 맞고 있었다
오늘은 학식이 제공되지 않아요!라는 문구를 데이터 필드에 채워 넣던 것을걷어냈다. 다른 날을 볼 때도 "오늘은" 이라고 말했다
학식을 하지 않는 날이라고 단정하던 것을식단 정보가 없어요로 낮췄다. 서버 값은 휴무인지 못 가져온 건지 구분해 주지 않는다알려진 것
학식 캐시가 동작한 적이 없다.
cacheCafeteria()가 저장 대신 읽기를 부르고있어 홈을 열 때마다 네트워크를 탄다. 이번 UI 변경과 무관한 기존 버그라 이
릴리스에 섞지 않고 이슈로 뒀다 → #312
백엔드 별미 파싱이 실패하고 있다.
tr:contains(별미 메뉴)로 찾는데 학교페이지 표기는
단품 메뉴라specialMenu가 항상식단 정보 없음이다. 앱은이 필드를 읽지 않아 화면에는 영향이 없다.
이 변경들은
flutter analyze없이 작성됐다. CI 의flutter analyze는|| echo로 감싸여 있어 초록이라도 "분석기 깨끗함" 이 아니라 "컴파일됨"이라는 뜻이다.
6759af2(코드 변경 전체)의 iOS 빌드는 통과했다.f7bf28b(버전 올림)이초록인지 확인한 뒤 머지할 것.