navigator.dart 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import 'package:flutter/material.dart';
  2. import 'package:get/get.dart';
  3. import 'package:vitalapp/pages/home/controller.dart';
  4. import 'package:vitalapp/routes/nav_ids.dart';
  5. import 'package:vitalapp/routes/routes.dart';
  6. import 'package:vitalapp/routes/transition.dart';
  7. class HomeNavigator extends StatelessWidget {
  8. HomeNavigator({super.key});
  9. final controller = Get.find<HomeController>();
  10. @override
  11. Widget build(BuildContext context) {
  12. return Navigator(
  13. key: Get.nestedKey(
  14. NavIds.HOME,
  15. ),
  16. initialRoute: controller.state.currentSelectMenu,
  17. onGenerateRoute: onGenerateRoute,
  18. );
  19. }
  20. /// 路由生成器
  21. Route? onGenerateRoute(RouteSettings settings) {
  22. String? name = settings.name;
  23. if (name == null) return null;
  24. name = name.split("?")[0];
  25. if (name == "/") return null;
  26. final route = Routes.routes.firstWhereOrNull((e) => e.name == name);
  27. if (route != null) {
  28. return GetPageRoute(
  29. page: route.page,
  30. binding: route.binding,
  31. transition: Transition.rightToLeft,
  32. customTransition: FTransitions.sharedAxisHorizontal,
  33. // transitionDuration: const Duration(milliseconds: 1000),
  34. );
  35. } else {
  36. return GetPageRoute(
  37. page: () => Container(
  38. color: Colors.white,
  39. child: Center(
  40. child: Text(
  41. "Route: $name",
  42. style: const TextStyle(fontSize: 32),
  43. ),
  44. ),
  45. ),
  46. binding: BindingsBuilder(() {}),
  47. transition: Transition.rightToLeft,
  48. customTransition: FTransitions.sharedAxisHorizontal,
  49. // transitionDuration: const Duration(milliseconds: 1000),
  50. );
  51. }
  52. }
  53. }