알림함 항목 생성 · 알림 이동 · 브리핑 항목 승인·상세 · 푸시 토픽을 가입 팬덤 전체로

This commit is contained in:
Sn-Kinos
2026-10-05 22:48:10 +09:00
parent fbf9a2c3d7
commit cf608a1d99
27 changed files with 714 additions and 69 deletions
+39 -19
View File
@@ -12,6 +12,9 @@ import 'core/push/push_messaging.dart';
import 'core/router/app_router.dart';
import 'core/theme/app_theme.dart';
import 'features/auth/auth_repository.dart';
import 'features/campaign/campaign_detail_screen.dart';
import 'features/notification/notification_screen.dart';
import 'features/quest/quest_detail_screen.dart';
import 'features/translation/translation_comments.dart';
/// MaterialApp + 라우터 + 테마 주입.
@@ -202,6 +205,20 @@ class _FancakeAppState extends State<FancakeApp> with WidgetsBindingObserver {
void _openFromPush(PushNotice notice) => _router.go(notice.route);
/// 알림함 항목 → 화면(명세 `518:88353`). INSIDE · 라운지 게시물 이동은 그 알림을 만드는
/// 3차 범위와 함께 붙는다 — 지금은 경로를 모르는 것으로 두어 이동하지 않는다.
Widget? _notificationScreen(String path) => switch (path.split('/')) {
['quests', final id] when id.isNotEmpty => QuestDetailScreen(
questId: id,
repository: _repos.quest,
),
['campaigns', final id] when id.isNotEmpty => CampaignDetailScreen(
campaignId: id,
repository: _repos.campaign,
),
_ => null,
};
@override
Widget build(BuildContext context) => ListenableBuilder(
listenable: _locale,
@@ -210,25 +227,28 @@ class _FancakeAppState extends State<FancakeApp> with WidgetsBindingObserver {
// 캠페인 상세 · 라운지 글 상세처럼 여러 경로로 열리는 화면이 번역 저장소를 찾는 곳.
child: TranslationScope(
repository: _repos.translation,
child: MaterialApp.router(
title: 'FANUZU',
builder: (context, child) =>
AdaptivePlanetEffects(child: child ?? const SizedBox()),
debugShowCheckedModeBanner: false,
scaffoldMessengerKey: _messengerKey,
locale: _locale.locale,
supportedLocales: appLocales,
localizationsDelegates: [
RemoteL10nDelegate(_locale.remote),
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
theme: buildAppTheme(),
// 코스믹 다크가 유일한 서피스다(결정 D-19). 라이트 테마를 두지 않는다.
themeMode: ThemeMode.dark,
darkTheme: buildAppTheme(),
routerConfig: _router,
child: NotificationTargets(
screenFor: _notificationScreen,
child: MaterialApp.router(
title: 'FANUZU',
builder: (context, child) =>
AdaptivePlanetEffects(child: child ?? const SizedBox()),
debugShowCheckedModeBanner: false,
scaffoldMessengerKey: _messengerKey,
locale: _locale.locale,
supportedLocales: appLocales,
localizationsDelegates: [
RemoteL10nDelegate(_locale.remote),
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
theme: buildAppTheme(),
// 코스믹 다크가 유일한 서피스다(결정 D-19). 라이트 테마를 두지 않는다.
themeMode: ThemeMode.dark,
darkTheme: buildAppTheme(),
routerConfig: _router,
),
),
),
),