Skip to content

Commit 270c9d0

Browse files
refactor(learning-support): convert learning support navigation to go_router
Replace all Navigator.push calls in the learning support presentation layer with context.push() calls. Add two missing GoRoutes (learningSupportNewPlan, learningSupportNewStatus) to app_router.dart. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent c549914 commit 270c9d0

12 files changed

Lines changed: 124 additions & 130 deletions

File tree

school_data_hub_flutter/lib/core/router/app_router.dart

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ import 'package:school_data_hub_flutter/features/learning_support/presentation/s
5050
import 'package:school_data_hub_flutter/features/learning_support/presentation/set_bulk_support_categoies_status_screen/set_bulk_support_categoies_status_scren.dart';
5151
import 'package:school_data_hub_flutter/features/learning_support/presentation/new_support_goal_screen/new_support_goal_screen.dart';
5252
import 'package:school_data_hub_flutter/features/learning_support/presentation/new_support_category_status_screen/controller/new_support_category_status_controller.dart';
53+
import 'package:school_data_hub_flutter/features/learning_support/presentation/new_learning_support_plan_screen/controller/new_learning_support_plan_controller.dart' show NewLearningSupportPlan;
5354
import 'package:school_data_hub_flutter/features/workbooks/presentation/workbook_list_screen/workbook_list_screen.dart';
5455
import 'package:school_data_hub_flutter/features/workbooks/presentation/new_workbook_screen/new_workbook_screen.dart';
5556
import 'package:school_data_hub_flutter/features/books/presentation/books_main_menu_screen/books_main_menu_screen.dart';
@@ -456,6 +457,29 @@ class AppRouter {
456457
state.extra! as NewSupportCategoryStatusController,
457458
),
458459
),
460+
GoRoute(
461+
path: RoutePaths.learningSupportNewPlan,
462+
builder: (_, state) {
463+
final args = state.extra! as Map<String, dynamic>;
464+
return NewLearningSupportPlan(
465+
pupil: args['pupil'] as PupilProxy,
466+
existingPlan: args['existingPlan'] as LearningSupportPlan?,
467+
);
468+
},
469+
),
470+
GoRoute(
471+
path: RoutePaths.learningSupportNewStatus,
472+
builder: (_, state) {
473+
final args = state.extra! as Map<String, dynamic>;
474+
return NewSupportCategoryStatus(
475+
appBarTitle: args['appBarTitle'] as String,
476+
pupilId: args['pupilId'] as int,
477+
goalCategoryId: args['goalCategoryId'] as int,
478+
elementType: args['elementType'] as String,
479+
existingGoal: args['existingGoal'] as SupportGoal?,
480+
);
481+
},
482+
),
459483

460484
// --- Matrix ---
461485
GoRoute(

school_data_hub_flutter/lib/features/learning_support/presentation/new_learning_support_plan_screen/index.dart

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@
44
///
55
/// Usage:
66
/// ```dart
7-
/// import 'package:school_data_hub_flutter/features/learning_support/presentation/new_learning_support_plan/new_learning_support_plan.dart';
7+
/// import 'package:go_router/go_router.dart';
8+
/// import 'package:school_data_hub_flutter/core/router/route_paths.dart';
89
///
910
/// // Navigate to create a new learning support plan
10-
/// Navigator.of(context, rootNavigator: true).push(
11-
/// MaterialPageRoute(
12-
/// builder: (context) => NewLearningSupportPlan(pupil: pupil),
13-
/// ),
14-
/// );
11+
/// context.push(RoutePaths.learningSupportNewPlan, extra: {
12+
/// 'pupil': pupil,
13+
/// 'existingPlan': null,
14+
/// });
1515
/// ```
1616
library;
1717

school_data_hub_flutter/lib/features/learning_support/presentation/new_support_category_status_screen/new_support_category_status_screen.dart

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
import 'package:flutter/material.dart';
22
import 'package:flutter_it/flutter_it.dart';
33
import 'package:gap/gap.dart';
4+
import 'package:go_router/go_router.dart';
45
import 'package:school_data_hub_flutter/common/widgets/growth_dropdown.dart';
56
import 'package:school_data_hub_flutter/common/widgets/orient_ui/button.dart';
67
import 'package:school_data_hub_flutter/common/widgets/orient_ui/style.dart';
8+
import 'package:school_data_hub_flutter/core/router/route_paths.dart';
79
import 'package:school_data_hub_flutter/features/_pupil/domain/pupil_proxy_manager.dart';
810
import 'package:school_data_hub_flutter/features/learning_support/domain/learning_support_manager.dart';
911
import 'package:school_data_hub_flutter/features/learning_support/domain/support_category_manager.dart';
1012
import 'package:school_data_hub_flutter/features/learning_support/presentation/new_support_category_status_screen/controller/new_support_category_status_controller.dart';
11-
import 'package:school_data_hub_flutter/features/learning_support/presentation/select_support_category_screen/select_support_category_screen.dart';
1213
import 'package:school_data_hub_flutter/features/learning_support/presentation/widgets/dialogs/goal_examples_dialog.dart';
1314
import 'package:school_data_hub_flutter/features/learning_support/presentation/widgets/support_category_parents_names.dart';
1415

@@ -66,19 +67,16 @@ class NewSupportCategoryStatusScreen extends StatelessWidget {
6667
? Button(
6768
onPressed: () async {
6869
final int? categoryId =
69-
await Navigator.of(context, rootNavigator: true).push(
70-
MaterialPageRoute<int>(
71-
builder: (ctx) =>
72-
SelectSupportCategoryScreen(
73-
pupil: pupilManager
74-
.getPupilByPupilId(
75-
controller.widget.pupilId,
76-
)!,
77-
elementType: controller
78-
.widget
79-
.elementType,
80-
),
81-
),
70+
await context.push<int>(
71+
RoutePaths.learningSupportCategorySelect,
72+
extra: {
73+
'pupil': pupilManager
74+
.getPupilByPupilId(
75+
controller.widget.pupilId,
76+
)!,
77+
'elementType':
78+
controller.widget.elementType,
79+
},
8280
);
8381
if (categoryId == null) {
8482
return;

school_data_hub_flutter/lib/features/learning_support/presentation/new_support_goal_screen/new_support_goal_screen.dart

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
import 'package:flutter/material.dart';
22
import 'package:flutter_it/flutter_it.dart';
33
import 'package:gap/gap.dart';
4+
import 'package:go_router/go_router.dart';
45
import 'package:school_data_hub_flutter/common/widgets/growth_dropdown.dart';
56
import 'package:school_data_hub_flutter/common/widgets/orient_ui/button.dart';
67
import 'package:school_data_hub_flutter/common/widgets/orient_ui/style.dart';
8+
import 'package:school_data_hub_flutter/core/router/route_paths.dart';
79
import 'package:school_data_hub_flutter/features/_pupil/domain/pupil_proxy_manager.dart';
810
import 'package:school_data_hub_flutter/features/learning_support/domain/support_category_manager.dart';
911
import 'package:school_data_hub_flutter/features/learning_support/presentation/new_support_category_status_screen/controller/new_support_category_status_controller.dart';
10-
import 'package:school_data_hub_flutter/features/learning_support/presentation/select_support_category_screen/select_support_category_screen.dart';
1112
import 'package:school_data_hub_flutter/features/learning_support/presentation/widgets/support_category_parents_names.dart';
1213

1314
class NewSupportGoalScreen extends StatelessWidget {
@@ -55,17 +56,17 @@ class NewSupportGoalScreen extends StatelessWidget {
5556
controller.goalCategoryId == 0
5657
? Button(
5758
onPressed: () async {
58-
final int?
59-
categoryId = await Navigator.of(context, rootNavigator: true).push(
60-
MaterialPageRoute<int>(
61-
builder: (ctx) => SelectSupportCategoryScreen(
62-
pupil: pupilManager.getPupilByPupilId(
63-
controller.widget.pupilId,
64-
)!,
65-
elementType: controller.widget.elementType,
66-
),
67-
),
68-
);
59+
final int? categoryId =
60+
await context.push<int>(
61+
RoutePaths.learningSupportCategorySelect,
62+
extra: {
63+
'pupil': pupilManager.getPupilByPupilId(
64+
controller.widget.pupilId,
65+
)!,
66+
'elementType':
67+
controller.widget.elementType,
68+
},
69+
);
6970
if (categoryId == null) {
7071
return;
7172
}

school_data_hub_flutter/lib/features/learning_support/presentation/post_or_patch_support_category_screen/post_or_patch_support_category_screen.dart

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
import 'package:flutter/material.dart';
22
import 'package:flutter_it/flutter_it.dart';
33
import 'package:gap/gap.dart';
4+
import 'package:go_router/go_router.dart';
45
import 'package:school_data_hub_client/school_data_hub_client.dart';
56
import 'package:school_data_hub_flutter/common/widgets/dialogs/confirmation_dialog.dart';
67
import 'package:school_data_hub_flutter/common/widgets/dialogs/information_dialog.dart';
78
import 'package:school_data_hub_flutter/common/widgets/generic_components/app_header.dart';
89
import 'package:school_data_hub_flutter/common/widgets/orient_ui/button.dart';
910
import 'package:school_data_hub_flutter/common/widgets/orient_ui/style.dart';
11+
import 'package:school_data_hub_flutter/core/router/route_paths.dart';
1012
import 'package:school_data_hub_flutter/features/learning_support/domain/support_category_manager.dart';
1113
import 'package:school_data_hub_flutter/features/learning_support/presentation/support_category_list_sortable_screen/select_parent_category_screen.dart';
1214

@@ -111,12 +113,9 @@ class _PostOrPatchSupportCategoryScreenState
111113
}
112114

113115
Future<void> _openSelectParent() async {
114-
final result = await Navigator.of(context, rootNavigator: true).push<int>(
115-
MaterialPageRoute<int>(
116-
builder: (ctx) => SelectParentCategoryScreen(
117-
movingCategoryId: widget.category?.categoryId ?? -1,
118-
),
119-
),
116+
final result = await context.push<int>(
117+
RoutePaths.learningSupportCategorySelectParent,
118+
extra: widget.category?.categoryId ?? -1,
120119
);
121120
if (result != null && mounted) {
122121
if (result == SelectParentCategoryScreen.rootSentinel) {

school_data_hub_flutter/lib/features/learning_support/presentation/support_category_list_screen/support_category_list_screen.dart

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
import 'package:flutter/material.dart';
22
import 'package:flutter_it/flutter_it.dart';
3+
import 'package:go_router/go_router.dart';
34
import 'package:school_data_hub_flutter/common/widgets/bottom_nav_bar/action_bar.dart';
45
import 'package:school_data_hub_flutter/common/widgets/generic_components/app_header.dart';
56
import 'package:school_data_hub_flutter/common/widgets/orient_ui/style.dart';
67
import 'package:school_data_hub_flutter/common/widgets/orient_ui/tappable_icon.dart';
8+
import 'package:school_data_hub_flutter/core/router/route_paths.dart';
79
import 'package:school_data_hub_flutter/features/learning_support/domain/support_category_manager.dart';
810
import 'package:school_data_hub_flutter/features/learning_support/presentation/support_category_list_screen/widgets/support_category_tree.dart';
9-
import 'package:school_data_hub_flutter/features/learning_support/presentation/support_category_list_sortable_screen/sortable_support_category_list_screen.dart';
1011

1112
class CategoryListScreen extends WatchingWidget {
1213
const CategoryListScreen({super.key});
@@ -47,11 +48,7 @@ class CategoryListScreen extends WatchingWidget {
4748
icon: const Icon(Icons.edit_rounded, size: 30),
4849
tooltip: 'Reihenfolge ändern',
4950
onPressed: () {
50-
Navigator.of(context, rootNavigator: true).push<void>(
51-
MaterialPageRoute<void>(
52-
builder: (ctx) => const SortableSupportCategoryListScreen(),
53-
),
54-
);
51+
context.push(RoutePaths.learningSupportCategorySortable);
5552
},
5653
),
5754
],

school_data_hub_flutter/lib/features/learning_support/presentation/support_category_list_sortable_screen/sortable_support_category_list_screen.dart

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
import 'package:flutter/material.dart';
22
import 'package:flutter_it/flutter_it.dart';
3+
import 'package:go_router/go_router.dart';
34
import 'package:school_data_hub_client/school_data_hub_client.dart';
45
import 'package:school_data_hub_flutter/common/widgets/bottom_nav_bar/action_bar.dart';
56
import 'package:school_data_hub_flutter/common/widgets/generic_components/app_header.dart';
67
import 'package:school_data_hub_flutter/common/widgets/orient_ui/style.dart';
78
import 'package:school_data_hub_flutter/common/widgets/orient_ui/tappable_icon.dart';
9+
import 'package:school_data_hub_flutter/core/router/route_paths.dart';
810
import 'package:school_data_hub_flutter/features/learning_support/domain/support_category_manager.dart';
9-
import 'package:school_data_hub_flutter/features/learning_support/presentation/post_or_patch_support_category_screen/post_or_patch_support_category_screen.dart';
1011
import 'package:school_data_hub_flutter/features/learning_support/presentation/support_category_list_sortable_screen/widgets/support_category_tree_sortable.dart';
1112

1213
class SortableSupportCategoryListScreen extends WatchingWidget {
@@ -60,14 +61,7 @@ class SortableSupportCategoryListScreen extends WatchingWidget {
6061
icon: const Icon(Icons.add, size: 30),
6162
tooltip: 'Neue Kategorie',
6263
onPressed: () {
63-
Navigator.of(context, rootNavigator: true).push<void>(
64-
MaterialPageRoute<void>(
65-
builder: (ctx) => const PostOrPatchSupportCategoryScreen(
66-
category: null,
67-
parentCategoryId: null,
68-
),
69-
),
70-
);
64+
context.push(RoutePaths.learningSupportCategoryEdit);
7165
},
7266
),
7367
],

school_data_hub_flutter/lib/features/learning_support/presentation/support_category_list_sortable_screen/widgets/support_category_card_sortable.dart

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
import 'package:flutter/material.dart' hide ReorderableList;
22
import 'package:flutter_it/flutter_it.dart';
33
import 'package:gap/gap.dart';
4+
import 'package:go_router/go_router.dart';
45
import 'package:school_data_hub_client/school_data_hub_client.dart';
56
import 'package:school_data_hub_flutter/common/widgets/expansion/expansion_body.dart';
67
import 'package:school_data_hub_flutter/common/widgets/expansion/expansion_controller.dart';
78
import 'package:school_data_hub_flutter/common/widgets/expansion/expansion_header.dart';
89
import 'package:school_data_hub_flutter/common/widgets/generic_components/reorderable_list.dart';
910
import 'package:school_data_hub_flutter/common/widgets/orient_ui/style.dart';
11+
import 'package:school_data_hub_flutter/core/router/route_paths.dart';
1012
import 'package:school_data_hub_flutter/features/learning_support/domain/support_category_manager.dart';
11-
import 'package:school_data_hub_flutter/features/learning_support/presentation/post_or_patch_support_category_screen/post_or_patch_support_category_screen.dart';
1213
import 'package:school_data_hub_flutter/features/learning_support/presentation/support_category_list_sortable_screen/select_parent_category_screen.dart';
1314
import 'package:school_data_hub_flutter/features/learning_support/presentation/support_category_list_sortable_screen/widgets/support_category_leaf_card_sortable.dart';
1415

@@ -88,12 +89,9 @@ class _SupportCategoryCardSortableState
8889
}
8990

9091
Future<void> _navigateToSelectParent(BuildContext context) async {
91-
final result = await Navigator.of(context, rootNavigator: true).push<int>(
92-
MaterialPageRoute<int>(
93-
builder: (ctx) => SelectParentCategoryScreen(
94-
movingCategoryId: widget.category.categoryId,
95-
),
96-
),
92+
final result = await context.push<int>(
93+
RoutePaths.learningSupportCategorySelectParent,
94+
extra: widget.category.categoryId,
9795
);
9896
if (result != null && context.mounted) {
9997
final newParent = result == SelectParentCategoryScreen.rootSentinel
@@ -182,12 +180,9 @@ class _SupportCategoryCardSortableState
182180
size: 22,
183181
),
184182
onPressed: () {
185-
Navigator.of(context, rootNavigator: true).push<void>(
186-
MaterialPageRoute<void>(
187-
builder: (ctx) => PostOrPatchSupportCategoryScreen(
188-
category: widget.category,
189-
),
190-
),
183+
context.push(
184+
RoutePaths.learningSupportCategoryEdit,
185+
extra: {'category': widget.category},
191186
);
192187
},
193188
tooltip: 'Kategorie bearbeiten',

school_data_hub_flutter/lib/features/learning_support/presentation/support_category_list_sortable_screen/widgets/support_category_leaf_card_sortable.dart

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
import 'package:flutter/material.dart';
22
import 'package:flutter_it/flutter_it.dart';
33
import 'package:gap/gap.dart';
4+
import 'package:go_router/go_router.dart';
45
import 'package:school_data_hub_client/school_data_hub_client.dart';
56
import 'package:school_data_hub_flutter/common/widgets/orient_ui/card_box.dart';
67
import 'package:school_data_hub_flutter/common/widgets/orient_ui/style.dart';
8+
import 'package:school_data_hub_flutter/core/router/route_paths.dart';
79
import 'package:school_data_hub_flutter/features/learning_support/domain/support_category_manager.dart';
8-
import 'package:school_data_hub_flutter/features/learning_support/presentation/post_or_patch_support_category_screen/post_or_patch_support_category_screen.dart';
910
import 'package:school_data_hub_flutter/features/learning_support/presentation/support_category_list_sortable_screen/select_parent_category_screen.dart';
1011

1112
class SupportCategoryLeafCardSortable extends StatelessWidget {
@@ -19,11 +20,9 @@ class SupportCategoryLeafCardSortable extends StatelessWidget {
1920
});
2021

2122
Future<void> _navigateToSelectParent(BuildContext context) async {
22-
final result = await Navigator.of(context, rootNavigator: true).push<int>(
23-
MaterialPageRoute<int>(
24-
builder: (ctx) =>
25-
SelectParentCategoryScreen(movingCategoryId: category.categoryId),
26-
),
23+
final result = await context.push<int>(
24+
RoutePaths.learningSupportCategorySelectParent,
25+
extra: category.categoryId,
2726
);
2827
if (result != null && context.mounted) {
2928
final newParent = result == SelectParentCategoryScreen.rootSentinel
@@ -67,11 +66,9 @@ class SupportCategoryLeafCardSortable extends StatelessWidget {
6766
size: 22,
6867
),
6968
onPressed: () {
70-
Navigator.of(context, rootNavigator: true).push<void>(
71-
MaterialPageRoute<void>(
72-
builder: (ctx) =>
73-
PostOrPatchSupportCategoryScreen(category: category),
74-
),
69+
context.push(
70+
RoutePaths.learningSupportCategoryEdit,
71+
extra: {'category': category},
7572
);
7673
},
7774
tooltip: 'Kategorie bearbeiten',

0 commit comments

Comments
 (0)