Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor: handle challenge templates #1337

Merged
merged 12 commits into from
Feb 28, 2025
4 changes: 2 additions & 2 deletions mobile-app/lib/app/app.dart
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import 'package:freecodecamp/service/dio_service.dart';
import 'package:freecodecamp/service/news/api_service.dart';

import 'package:freecodecamp/ui/views/code_radio/code_radio_view.dart';
import 'package:freecodecamp/ui/views/learn/challenge/challenge_view.dart';
import 'package:freecodecamp/ui/views/learn/challenge/templates/template_view.dart';
import 'package:freecodecamp/ui/views/learn/landing/landing_view.dart';
import 'package:freecodecamp/ui/views/learn/superblock/superblock_view.dart';
import 'package:freecodecamp/ui/views/login/native_login_view.dart';
Expand Down Expand Up @@ -48,7 +48,7 @@ import 'package:stacked_services/stacked_services.dart';
MaterialRoute(page: NewsAuthorView),
MaterialRoute(page: NewsImageView),
MaterialRoute(page: CodeRadioView),
MaterialRoute(page: ChallengeView),
MaterialRoute(page: ChallengeTemplateView),
MaterialRoute(page: ProfileView),
MaterialRoute(page: LearnLandingView, initial: true),
MaterialRoute(page: NativeLoginView),
Expand Down
66 changes: 23 additions & 43 deletions mobile-app/lib/app/app.router.dart

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 3 additions & 2 deletions mobile-app/lib/service/firebase/analytics_observer.dart
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,9 @@ class AnalyticsObserver extends RouteObserver {
route.settings.arguments as NewsBookmarkTutorialViewArguments;
screenName += '/${routeArgs.tutorial.tutorialTitle}';
break;
case ChallengeViewArguments:
final routeArgs = route.settings.arguments as ChallengeViewArguments;
case ChallengeTemplateViewArguments:
final routeArgs =
route.settings.arguments as ChallengeTemplateViewArguments;
screenName += '/${routeArgs.challengeId}';
break;
default:
Expand Down
16 changes: 6 additions & 10 deletions mobile-app/lib/service/learn/learn_service.dart
Original file line number Diff line number Diff line change
Expand Up @@ -172,17 +172,13 @@ class LearnService {
if (challengeIndex == maxChallenges - 1) {
_navigationService.back();
} else {
String challenge = block.challengeTiles[challengeIndex + 1].id;
String url = LearnService.baseUrl;
_navigationService.replaceWith(
Routes.challengeView,
arguments: ChallengeViewArguments(
url:
'$url/challenges/${block.superBlock.dashedName}/${block.dashedName}/$challenge.json',
block: block,
challengeId: block.challengeTiles[challengeIndex + 1].id,
challengesCompleted: challengesCompleted + 1,
isProject: block.challenges.length == 1),
Routes.challengeTemplateView,
arguments: ChallengeTemplateViewArguments(
challengeId: block.challengeTiles[challengeIndex + 1].id,
block: block,
challengesCompleted: challengesCompleted + 1,
),
);
}
}
Expand Down
10 changes: 0 additions & 10 deletions mobile-app/lib/ui/views/learn/block/block_view.dart
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import 'package:flutter/material.dart';
import 'package:freecodecamp/extensions/i18n_extension.dart';
import 'package:freecodecamp/models/learn/curriculum_model.dart';
import 'package:freecodecamp/service/learn/learn_service.dart';
import 'package:freecodecamp/ui/views/learn/block/block_viewmodel.dart';
import 'package:freecodecamp/ui/views/learn/utils/learn_globals.dart';
import 'package:freecodecamp/ui/views/learn/widgets/download_button_widget.dart';
Expand Down Expand Up @@ -243,10 +242,7 @@ class BlockView extends StatelessWidget {
onTap: () async {
String challengeId = block.challengeTiles[i].id;

String url = LearnService.baseUrl;

model.routeToChallengeView(
'$url/challenges/${block.superBlock.dashedName}/${block.dashedName}/$challengeId.json',
block,
challengeId,
);
Expand Down Expand Up @@ -380,13 +376,7 @@ class ChallengeTile extends StatelessWidget {
width: 70,
child: InkWell(
onTap: () async {
String url = LearnService.baseUrl;

String fullUrl =
'$url/challenges/${block.superBlock.dashedName}/${block.dashedName}/$challengeId.json';

model.routeToChallengeView(
fullUrl,
block,
challengeId,
);
Expand Down
13 changes: 4 additions & 9 deletions mobile-app/lib/ui/views/learn/block/block_viewmodel.dart
Original file line number Diff line number Diff line change
Expand Up @@ -82,26 +82,21 @@ class BlockViewModel extends BaseViewModel {
notifyListeners();
}

void routeToChallengeView(String url, Block block, String challengeId) {
void routeToChallengeView(Block block, String challengeId) {
_navigationService.navigateTo(
Routes.challengeView,
arguments: ChallengeViewArguments(
url: url,
block: block,
Routes.challengeTemplateView,
arguments: ChallengeTemplateViewArguments(
challengeId: challengeId,
block: block,
challengesCompleted: _challengesCompleted,
isProject: block.challenges.length == 1,
),
);
}

Future<void> routeToCertification(Block block) async {
String challengeId = block.challengeTiles[0].id;

String url = LearnService.baseUrl;

routeToChallengeView(
'$url/challenges/${block.superBlock.dashedName}/${block.dashedName}/$challengeId.json',
block,
challengeId,
);
Expand Down
Loading
Loading