Conversation
- mypage_profile: Kakao FeedTemplate์ผ๋ก ํ๋กํ ๊ณต์ (peeroreum://profile/{nickname})
- MainActivity: getInitialNickname cold start / onDeepLinkProfile warm start ์ฒ๋ฆฌ
- AndroidManifest: peeroreum://profile intent filter ์ถ๊ฐ
- main: extractNickname, onDeepLinkProfile ํธ๋ค๋ฌ / Android uriLinkStream ์ค๋ณต ์ ๊ฑฐ
- pending_deep_link: profileNickname ํ๋ ์ถ๊ฐ
- bottomNaviBar: profileNickname ๋ฅ๋งํฌ ๋ผ์ฐํ
์ถ๊ฐ
- wedu_room_info_sheet: showModalBottomSheet โ Get.bottomSheet() ๊ต์ฒด (GetX Navigator ์ด๊ธฐํ ์ค ๋์ผ GlobalKey<NavigatorState>๊ฐ Navigator์ _FocusInheritedScope์ ์ค๋ณต ๋ฑ๋ก๋๋ ๋ฌธ์ ๋ฐฉ์ง) - bottomNaviBar: wedu roomId ์ฒ๋ฆฌ์ 300ms delay ์ถ๊ฐ - nested Scaffold ์ ๊ฑฐ: mypage.dart, wedu_detail_screen.dart, mypage_profile.dart
- WeduRoomInfoSheet.onShare ์ฝ๋ฐฑ ํ์ ์ VoidCallback โ void Function(Rect?)์ผ๋ก ๋ณ๊ฒฝ - ๊ณต์ ๋ฒํผ์ Builder๋ก ๊ฐ์ธ RenderBox ์์น๋ฅผ ๊ณ์ฐ, ์ฝ๋ฐฑ์ Rect ์ ๋ฌ - wedu_home, wedu_search_result: sharePositionOrigin: shareRect ์ถ๊ฐ - mypage_profile: GlobalKey(_shareButtonKey)๋ก ๊ณต์ ๋ฒํผ ์์น ์ถ์ ํ sharePositionOrigin ์ ๋ฌ - iOS์์ ์นด์นด์คํก ๋ฏธ์ค์น ์ fallback Share.share() ํธ์ถ ์ PlatformException ํด๊ฒฐ
- changeDetailWedu() ๋ฐฉ์ฅ/์ผ๋ฐ ์ฐธ์ฌ์ ๋ฉ๋ด ๋ชจ๋์ ๊ณต์ ํ๊ธฐ ํญ๋ชฉ ์ถ๊ฐ - ์นด์นด์คํก ์ค์น ์ FeedTemplate ๊ณต์ , ๋ฏธ์ค์น ์ Share.share() fallback - iOS sharePositionOrigin: dots ๋ฒํผ(_dotsButtonKey)์ ์ต์ปค๋ก ์ฌ์ฉ - ๊ณต์ ํ๊ธฐ ํญ ์ ๋ฐํ ์ํธ ์๋ ๋ซํ(Get.back()) ํ ๊ณต์ ์คํ - ์ผ๋ฐ ์ฐธ์ฌ์ ๋ฉ๋ด: GestureDetector โ Column+TextButton์ผ๋ก ๋ฆฌํฉํฐ
- SafeArea ์ ๊ฑฐ ํ ๋ช ์์ bottom ํจ๋ฉ ์ ์ฉ - ๊ณต์: viewPadding.bottom > 20 ? viewPadding.bottom : 20 - iOS ํ ์ธ๋์ผ์ดํฐ(~34pt): viewPadding ๊ฐ ์ฌ์ฉ - Android ์ ์ค์ฒ ๋ด๋น๊ฒ์ด์ (0): 20px ๊ณ ์ - Android 3๋ฒํผ ๋ด๋น๊ฒ์ด์ (~48dp): viewPadding ๊ฐ ์ฌ์ฉ
- shareDefault โ shareCustom (templateId: 102956) - ๊ฐ์ด๋ฐฉ ์์ธ์์ invitationUrl fetch ์ถ๊ฐ - templateArgs: RoomName, ImageUrl(์ด๋์ฅ ์ด๋ฏธ์ง), Link(๋ฅ๋งํฌ) - wedu_detail_screen.dart, wedu_home.dart ๋์ผ ์ ์ฉ
- shareDefault โ shareCustom (templateId: 102993)
- templateArgs: UserName
- ๋ฅ๋งํฌ: ์นด์นด์ค ์ฝ์ ํ
ํ๋ฆฟ์์ nickname=${UserName} ํ๋ผ๋ฏธํฐ๋ก ์ฒ๋ฆฌ
- AppDelegate์ kakaoa://kakaolink ์คํด ํธ๋ค๋ฌ ์ถ๊ฐ - ์ ์คํํธ: application(_:open:options:)์์ MethodChannel๋ก ์ ๋ฌ - ์ฝ๋ ์คํํธ: launchOptions URL ํ์ฑ ํ getInitialRoomId/getInitialNickname์ผ๋ก ์๋ต - main.dart: iOS ์ฝ๋ ์คํํธ getInitialLink() ํธ์ถ ์ถ๊ฐ
- AppDelegate: super.application() ํธ์ถ ํ MethodChannel ์ค์ ํ๋๋ก ์์ ์์ (window ์ด๊ธฐํ ๋ณด์ฅ) - AppDelegate: FlutterViewController ์บ์คํ ์ force cast์์ optional cast๋ก ๋ณ๊ฒฝ (ํฌ๋์ ๋ฐฉ์ง) - main.dart: iOS getInitialLink() ์ ๊ฑฐ โ AppDelegate MethodChannel์ด cold start ์ฒ๋ฆฌํ๋ฏ๋ก ์ค๋ณต ๋ฐฉ์ง - main.dart: uriLinkStream์์ kakaoa:// ์คํด ํํฐ๋ง โ AppDelegate MethodChannel๊ณผ ์ค๋ณต ์ฒ๋ฆฌ ๋ฐฉ์ง
- fetchSocialLogin: http.get โ http.post, email์ query param ๋์ JSON body๋ก ์ ์ก
- ApiClient.dart ์ ๊ท ์ถ๊ฐ: Dio ์ฑ๊ธํค, ์๋ ํ ํฐ ๊ฐฑ์ ์ธํฐ์
ํฐ
(401 ์๋ต ์ /token/reissue ํธ์ถ ํ ์๋ ์์ฒญ ์ฌ์๋)
- ๊ธฐ์กด Authorization ํค๋๊ฐ ์์ ๊ฒฝ์ฐ ์ธํฐ์
ํฐ๊ฐ ๋ฎ์ด์ฐ์ง ์๋๋ก ์ฒ๋ฆฌ
(๋น๋ฐ๋ฒํธ ์ฌ์ค์ ๋ฑ ํน์ ํ ํฐ ์ฌ์ฉ ์ผ์ด์ค ๋์)
- main.dart์ ApiClient().init() ์ด๊ธฐํ ์ถ๊ฐ
- ์์
๋ก๊ทธ์ธ GET โ POST ๋ณ๊ฒฝ, ์๋ต์์ accessToken/refreshToken ๋ฑ ์ ์ ์ ์ฅ
- ์๋ ์ ์ฒด ํ๋ฉด์ ์ง์ Dio/http ํธ์ถ์ ApiClient()๋ก ์ผ๊ด ์ ํ:
iedu: iedu_create, iedu_home, iedu_detail, iedu_in, iedu_search_result
wedu: wedu_home, wedu_create_screen, wedu_create_invitation, wedu_modify_screen,
wedu_detail_screen, wedu_detail_calendar, wedu_in, wedu_search_result_screen,
wedu_room_info_sheet, management_checklist_screen
mypage: mypage, mypage_account, mypage_acount_ps, mypage_profile, mypage_scrap,
follower_api, following_api
ranking: ranking_api
sign: signin_screen, signin_email_screen, signup_grade/subject/school/nickname/email,
password_change (email, validate, new_password)
๊ธฐํ: NotificationApi, bottomNaviBar, alert_controller, VisitCount
- ์นด์นด์ค: loginWithKakaoTalk/Account() ๋ฐํ OAuthToken.accessToken ์๋ฒ ์ ์ก - ๊ตฌ๊ธ: GoogleSignInAuthentication.accessToken ์๋ฒ ์ ์ก - fetchSocialLogin ์๊ทธ๋์ฒ ๋ณ๊ฒฝ: email โ (provider, token, emailForSignup) - 404(์ ๊ท ๊ฐ์ ) ์ผ์ด์ค๋ SDK์์ ๊ฐ์ ธ์จ ์ด๋ฉ์ผ ๊ทธ๋๋ก ์ฌ์ฉ - Apple Sign-In ๋ณ๋ ๊ตฌํ ํ์๋ก ๋ฏธ์ง์ ์ฒ๋ฆฌ
๐ค Claude Code Review๐ค Claude Code Review๐ด ๋ฒ๊ทธ/๋ณด์ ์ด์
๐ก ๊ฐ์ ๊ถ์ฅ ์ฌํญ
๐ข ์๋ ์
์ฐ์ ์์ ์์ฝ ํ ์ด๋ธ
์ด PR์ ์๋ํ๋ ์ฝ๋ ๋ฆฌ๋ทฐ ์์คํ ๊ณผ Firebase ํตํฉ์ ์ถ๊ฐํ๋ ์๋ฏธ์๋ ๋ณ๊ฒฝ์ฌํญ์ ๋๋ค. ๋ค๋ง ๋ณด์ ๊ด๋ จ ์ด์๋ค์ ์ฐ์ ํด๊ฒฐํ์๊ธฐ ๋ฐ๋๋๋ค. |
resolved #443