navigator.dart 1.6 KB

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