feat: appstore deployment preparation#676
Conversation
📝 WalkthroughWalkthrough공지 차단 기능 관련 다국어 문자열이 추가되고(notice.block, blockDescription, blocked), 분석 이벤트에 Changes
Sequence Diagram(s)sequenceDiagram
participant User as User
participant UI as NoticeRenderer
participant Dialog as ConfirmationDialog
participant Analytics as AnalyticsService
participant Router as Router
participant Toast as ToastService
User->>UI: tap "Block" action chip
UI->>Analytics: log noticeBlock(id)
UI->>Dialog: show(title, blockDescription)
Dialog-->>UI: confirm
UI->>Toast: show("blocked")
UI->>Router: maybePop()
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes Poem
🚥 Pre-merge checks | ✅ 2 | ❌ 1❌ Failed checks (1 inconclusive)
✅ Passed checks (2 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Tip Try Coding Plans. Let us write the prompt for your AI agent so you can ship faster (with fewer bugs). Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@lib/app/modules/notices/presentation/widgets/notice_renderer.dart`:
- Around line 331-352: The block button (_ChipButton) currently only logs
analytics and shows dialogs but lacks an authentication check and any backend
call; add the same auth guard used by the report flow (check
UserBloc.userOrNull(context) and if null show the login prompt/return) before
showing the confirmation dialog, and after confirming dispatch the appropriate
NoticeBloc event (e.g., NoticeBloc.add(BlockNotice(widget.notice.id)) or the
project's existing block event) to perform the API call, await success/failure,
then show success/failure toasts and pop only on success; also keep the
context.mounted checks and include widget.notice.id in the dispatched event for
identification.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: 26311a56-29f0-4c81-98eb-8e34afedf376
⛔ Files ignored due to path filters (2)
ios/Podfile.lockis excluded by!**/*.lockpubspec.lockis excluded by!**/*.lock
📒 Files selected for processing (8)
assets/i18n/en.i18n.jsonassets/i18n/jp.i18n.jsonassets/i18n/ko.i18n.jsonassets/i18n/ru.i18n.jsonios/fastlane/metadata/default/support_url.txtlib/app/modules/core/data/models/analytics_event.dartlib/app/modules/notices/presentation/widgets/list_layout.dartlib/app/modules/notices/presentation/widgets/notice_renderer.dart
💤 Files with no reviewable changes (1)
- lib/app/modules/notices/presentation/widgets/list_layout.dart
There was a problem hiding this comment.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
lib/app/modules/notices/presentation/widgets/notice_renderer.dart (1)
309-326:⚠️ Potential issue | 🟠 Major공유 위젯에서의 무조건
maybePop()은 프리뷰 플로우도 닫아버립니다.
NoticeRenderer는 상세 페이지 전용이 아니라NoticeWritePreviewPage에서도 재사용됩니다. 그래서 Line 326과 Line 354의context.router.maybePop()은 다이얼로그만 닫는 게 아니라 프리뷰 페이지 자체도 닫아 작성 플로우를 끊습니다. 라우트 종료는 이 위젯 내부에서 고정하지 말고, 상세 페이지에서만 콜백/플래그로 opt-in 하도록 분리하는 편이 안전합니다.🔧 한 가지 수정 방향
- if (result != true || !context.mounted) return; - context.showToast(context.t.notice.detail.reported); - context.router.maybePop(); + if (result != true || !context.mounted) return; + context.showToast(context.t.notice.detail.reported); + if (widget.closeAfterModerationAction) { + context.router.maybePop(); + }- if (result != true || !context.mounted) return; - context.showToast(context.t.notice.detail.blocked); - context.router.maybePop(); + if (result != true || !context.mounted) return; + context.showToast(context.t.notice.detail.blocked); + if (widget.closeAfterModerationAction) { + context.router.maybePop(); + }그리고
NoticeRenderer에closeAfterModerationAction(기본값false) 같은 옵션을 추가하고, 실제로 닫아야 하는DetailPage에서만true를 넘기면 됩니다.Also applies to: 331-357
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@lib/app/modules/notices/presentation/widgets/notice_renderer.dart` around lines 309 - 326, The share/report buttons in NoticeRenderer call context.router.maybePop() unconditionally, which closes the preview flow; modify NoticeRenderer to accept a boolean prop (e.g., closeAfterModerationAction, default false) and use that flag instead of always calling context.router.maybePop() inside the _ChipButton onPressed handlers (the report and share handlers around the existing Navigator.pop and toast logic); update DetailPage to pass true for closeAfterModerationAction while leaving preview usages with the default so only the detail page will close the route after the dialog action.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Outside diff comments:
In `@lib/app/modules/notices/presentation/widgets/notice_renderer.dart`:
- Around line 309-326: The share/report buttons in NoticeRenderer call
context.router.maybePop() unconditionally, which closes the preview flow; modify
NoticeRenderer to accept a boolean prop (e.g., closeAfterModerationAction,
default false) and use that flag instead of always calling
context.router.maybePop() inside the _ChipButton onPressed handlers (the report
and share handlers around the existing Navigator.pop and toast logic); update
DetailPage to pass true for closeAfterModerationAction while leaving preview
usages with the default so only the detail page will close the route after the
dialog action.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: 700a8795-f81b-4a8f-b4e9-1e451c8f220f
📒 Files selected for processing (1)
lib/app/modules/notices/presentation/widgets/notice_renderer.dart
Summary by CodeRabbit