Skip to content

Commit ee93b90

Browse files
committed
feat(headline-details): handle deep linking from notifications
- Add notificationId parameter to HeadlineDetailsPage - Mark in-app notification as read when navigating from a push notification - Import InAppNotificationCenterBloc for handling notification state
1 parent 934323e commit ee93b90

File tree

1 file changed

+18
-2
lines changed

1 file changed

+18
-2
lines changed

lib/headline-details/view/headline_details_page.dart

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import 'package:core/core.dart';
55
import 'package:flutter/foundation.dart' show kIsWeb;
66
import 'package:flutter/material.dart';
77
import 'package:flutter_bloc/flutter_bloc.dart';
8+
import 'package:flutter_news_app_mobile_client_full_source_code/account/bloc/in_app_notification_center_bloc.dart';
89
import 'package:flutter_news_app_mobile_client_full_source_code/ads/models/ad_theme_style.dart';
910
import 'package:flutter_news_app_mobile_client_full_source_code/ads/services/interstitial_ad_manager.dart';
1011
import 'package:flutter_news_app_mobile_client_full_source_code/ads/widgets/in_article_ad_loader_widget.dart';
@@ -23,11 +24,17 @@ import 'package:ui_kit/ui_kit.dart';
2324
import 'package:url_launcher/url_launcher_string.dart';
2425

2526
class HeadlineDetailsPage extends StatefulWidget {
26-
const HeadlineDetailsPage({super.key, this.headlineId, this.initialHeadline})
27-
: assert(headlineId != null || initialHeadline != null);
27+
const HeadlineDetailsPage({
28+
super.key,
29+
this.headlineId,
30+
this.initialHeadline,
31+
this.notificationId,
32+
}) : assert(headlineId != null || initialHeadline != null);
2833

2934
final String? headlineId;
3035
final Headline? initialHeadline;
36+
// The ID of the in-app notification that triggered this navigation.
37+
final String? notificationId;
3138

3239
@override
3340
State<HeadlineDetailsPage> createState() => _HeadlineDetailsPageState();
@@ -52,6 +59,15 @@ class _HeadlineDetailsPageState extends State<HeadlineDetailsPage> {
5259
FetchHeadlineById(widget.headlineId!),
5360
);
5461
}
62+
63+
// If a notificationId is provided, it means the user deep-linked from a
64+
// push notification. We dispatch an event to mark that specific
65+
// notification as read.
66+
if (widget.notificationId != null) {
67+
context.read<InAppNotificationCenterBloc>().add(
68+
InAppNotificationCenterMarkOneAsRead(widget.notificationId!),
69+
);
70+
}
5571
}
5672

5773
@override

0 commit comments

Comments
 (0)