app_router.dart 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  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. import 'package:japp_flutter/features/challenge/views/mock_page.dart';
  8. class AppRouter {
  9. static const String challengeList = '/';
  10. static const String challengeDetail = '/challenge/detail';
  11. static const String addChallenge = '/challenge/add';
  12. static const String editChallenge = '/challenge/edit';
  13. static const String mockPage = '/mock/page';
  14. static Route<dynamic> generateRoute(RouteSettings settings) {
  15. switch (settings.name) {
  16. case challengeList:
  17. return MaterialPageRoute(builder: (_) => const ChallengeListScreen());
  18. case challengeDetail:
  19. final challengeId = settings.arguments as int;
  20. return MaterialPageRoute(
  21. builder: (_) => ChallengeDetailScreen(challengeId: challengeId),
  22. );
  23. case addChallenge:
  24. return MaterialPageRoute(builder: (_) => const AddChallengeScreen());
  25. case editChallenge:
  26. final challenge = settings.arguments as ChallengeModel;
  27. return MaterialPageRoute(
  28. builder: (_) => ChallengeEditScreen(initialChallenge: challenge),
  29. );
  30. case mockPage:
  31. return MaterialPageRoute(builder: (_)=> const MockPage());
  32. default:
  33. return MaterialPageRoute(
  34. builder: (_) => Scaffold(
  35. body: Center(child: Text('No route defined for ${settings.name}')),
  36. ),
  37. );
  38. }
  39. }
  40. // 静态跳转方法(可选)
  41. static void navigateTo(BuildContext context, String routeName, {Object? args}) {
  42. Navigator.pushNamed(context, routeName, arguments: args);
  43. }
  44. }