app_router.dart 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. import 'package:flutter/material.dart';
  2. import 'package:japp_flutter/core/models/challenge_model.dart';
  3. import 'package:japp_flutter/features/challenge/views/add_challenge_screen.dart';
  4. import 'package:japp_flutter/features/challenge/views/challenge_detail_screen.dart';
  5. import 'package:japp_flutter/features/challenge/views/challenge_list_screen.dart';
  6. import 'package:japp_flutter/features/challenge/views/edit_challenge_screen.dart';
  7. class AppRouter {
  8. static const String challengeList = '/';
  9. static const String challengeDetail = '/challenge/detail';
  10. static const String addChallenge = '/challenge/add';
  11. static const String editChallenge = '/challenge/edit';
  12. static Route<dynamic> generateRoute(RouteSettings settings) {
  13. switch (settings.name) {
  14. case challengeList:
  15. return MaterialPageRoute(builder: (_) => const ChallengeListScreen());
  16. case challengeDetail:
  17. final challengeId = settings.arguments as int;
  18. return MaterialPageRoute(
  19. builder: (_) => ChallengeDetailScreen(challengeId: challengeId),
  20. );
  21. case addChallenge:
  22. return MaterialPageRoute(builder: (_) => const AddChallengeScreen());
  23. case editChallenge:
  24. final challenge = settings.arguments as ChallengeModel;
  25. return MaterialPageRoute(
  26. builder: (_) => ChallengeEditScreen(initialChallenge: challenge),
  27. );
  28. default:
  29. return MaterialPageRoute(
  30. builder: (_) => Scaffold(
  31. body: Center(child: Text('No route defined for ${settings.name}')),
  32. ),
  33. );
  34. }
  35. }
  36. // 静态跳转方法(可选)
  37. static void navigateTo(BuildContext context, String routeName, {Object? args}) {
  38. Navigator.pushNamed(context, routeName, arguments: args);
  39. }
  40. }