Skip to content

Commit 838d536

Browse files
authored
feat: add slug parameter to NewsTutorialView and related navigation methods (#1652)
* feat: add slug parameter to NewsTutorialView and related navigation methods * refactor: remove title parameter from NewsTutorialView and related navigation methods
1 parent a90fb40 commit 838d536

File tree

10 files changed

+44
-29
lines changed

10 files changed

+44
-29
lines changed

mobile-app/lib/app/app.router.dart

Lines changed: 10 additions & 10 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

mobile-app/lib/models/news/tutorial_model.dart

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import 'package:freecodecamp/ui/views/news/widgets/tag_widget.dart';
33

44
class Tutorial {
55
final String id;
6+
final String slug;
67
final String title;
78
final String? featureImage;
89
final String? profileImage;
@@ -16,6 +17,7 @@ class Tutorial {
1617

1718
Tutorial({
1819
required this.id,
20+
required this.slug,
1921
required this.featureImage,
2022
required this.title,
2123
required this.profileImage,
@@ -56,6 +58,7 @@ class Tutorial {
5658
authorSlug: data['author']['username'],
5759
tagNames: returnTags(data['tags']),
5860
id: data['id'],
61+
slug: data['slug'],
5962
);
6063
}
6164

@@ -70,6 +73,7 @@ class Tutorial {
7073
authorSlug: returnSlug(data['author']['url']),
7174
tagNames: returnTags(data['tags']),
7275
id: data['objectID'],
76+
slug: data['slug'],
7377
);
7478
}
7579

@@ -93,6 +97,7 @@ class Tutorial {
9397
url: json['url'],
9498
text: json['content']['html'],
9599
featureImage: json['coverImage']['url'],
100+
slug: json['slug'],
96101
);
97102
}
98103
}

mobile-app/lib/service/firebase/analytics_observer.dart

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,28 +13,29 @@ class AnalyticsObserver extends RouteObserver {
1313
String screenName = route.settings.name ?? 'could-not-find-view';
1414

1515
if (route.settings.arguments != null) {
16-
switch (route.settings.arguments.runtimeType) {
17-
case SuperBlockViewArguments _:
16+
String runtimeType = route.settings.arguments.runtimeType.toString();
17+
switch (runtimeType) {
18+
case 'SuperBlockViewArguments':
1819
final routeArgs = route.settings.arguments as SuperBlockViewArguments;
1920
screenName += '/${routeArgs.superBlockDashedName}';
2021
break;
21-
case NewsTutorialViewArguments _:
22+
case 'NewsTutorialViewArguments':
2223
final routeArgs =
2324
route.settings.arguments as NewsTutorialViewArguments;
24-
screenName += '/${routeArgs.title}';
25+
screenName += '/${routeArgs.slug}';
2526
break;
26-
case NewsBookmarkTutorialViewArguments _:
27+
case 'NewsBookmarkTutorialViewArguments':
2728
final routeArgs =
2829
route.settings.arguments as NewsBookmarkTutorialViewArguments;
2930
screenName += '/${routeArgs.tutorial.tutorialTitle}';
3031
break;
31-
case ChallengeTemplateViewArguments _:
32+
case 'ChallengeTemplateViewArguments':
3233
final routeArgs =
3334
route.settings.arguments as ChallengeTemplateViewArguments;
3435
screenName += '/${routeArgs.challengeId}';
3536
break;
3637
default:
37-
screenName += '/${route.settings.arguments}';
38+
screenName += '/could-not-find-view';
3839
}
3940
}
4041
log('Setting screen to $screenName');

mobile-app/lib/ui/views/news/news-feed/news_feed_view.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ class NewsFeedView extends StatelessWidget {
131131
key: Key(tutorial.id),
132132
splashColor: Colors.transparent,
133133
onTap: () {
134-
model.navigateTo(tutorial.id, tutorial.title);
134+
model.navigateTo(tutorial.id, tutorial.slug);
135135
},
136136
child: Padding(
137137
padding: const EdgeInsets.only(bottom: 32.0),

mobile-app/lib/ui/views/news/news-feed/news_feed_viewmodel.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,10 @@ class NewsFeedViewModel extends BaseViewModel {
2828
);
2929
}
3030

31-
void navigateTo(String id, String title) {
31+
void navigateTo(String id, String slug) {
3232
_navigationService.navigateTo(
3333
Routes.newsTutorialView,
34-
arguments: NewsTutorialViewArguments(refId: id, title: title),
34+
arguments: NewsTutorialViewArguments(refId: id, slug: slug),
3535
);
3636
}
3737

mobile-app/lib/ui/views/news/news-search/news_search_view.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ class NewsSearchView extends StatelessWidget {
116116
onTap: () => {
117117
model.navigateToTutorial(
118118
currentData[index]['objectID'],
119-
currentData[index]['title']),
119+
currentData[index]['slug']),
120120
},
121121
);
122122
},

mobile-app/lib/ui/views/news/news-search/news_search_viewmodel.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,12 +81,12 @@ class NewsSearchModel extends BaseViewModel {
8181
// );
8282
// }
8383

84-
void navigateToTutorial(String id, String title) {
84+
void navigateToTutorial(String id, String slug) {
8585
_navigationService.navigateTo(
8686
Routes.newsTutorialView,
8787
arguments: NewsTutorialViewArguments(
8888
refId: id,
89-
title: title,
89+
slug: slug,
9090
),
9191
);
9292
}

mobile-app/lib/ui/views/news/news-tutorial/news_tutorial_view.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,10 +76,10 @@ class NewsTutorialView extends StatelessWidget {
7676
const NewsTutorialView({
7777
super.key,
7878
required this.refId,
79-
required this.title,
79+
required this.slug,
8080
});
8181
final String refId;
82-
final String? title;
82+
final String slug;
8383

8484
@override
8585
Widget build(BuildContext context) {

mobile-app/lib/ui/views/news/widgets/tutorial_list_widget.dart

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,14 @@ class TutorialList extends StatefulWidget {
3737
return tutorials;
3838
}
3939

40-
void navigateToTutorial(String id, String title) {
41-
_navigationService.navigateTo(Routes.newsTutorialView,
42-
arguments: NewsTutorialViewArguments(refId: id, title: title));
40+
void navigateToTutorial(String id, String slug) {
41+
_navigationService.navigateTo(
42+
Routes.newsTutorialView,
43+
arguments: NewsTutorialViewArguments(
44+
refId: id,
45+
slug: slug,
46+
),
47+
);
4348
}
4449

4550
void navigateToFeed() {
@@ -151,7 +156,10 @@ class TileLayout extends StatelessWidget {
151156
),
152157
),
153158
onTap: () {
154-
widget.navigateToTutorial(tutorial.id, tutorial.title);
159+
widget.navigateToTutorial(
160+
tutorial.id,
161+
tutorial.slug,
162+
);
155163
},
156164
);
157165
},

mobile-app/test/services/news/bookmark_service_test.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import '../../helpers/test_helpers.dart';
1212

1313
final Tutorial testTutorial = Tutorial(
1414
id: '61fad67af2ed6b06db5ab66f',
15+
slug: 'hello-world',
1516
featureImage:
1617
'https://www.freecodecamp.org/news/content/images/2022/01/python-game.png',
1718
title:

0 commit comments

Comments
 (0)