nav.dart 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. import 'package:flutter/widgets.dart';
  2. import 'package:flutter/material.dart' as material;
  3. ///免context路由操作
  4. class WNavUtil {
  5. WNavUtil._();
  6. static WNavUtil? _instance;
  7. static WNavUtil? get instance {
  8. _instance ??= WNavUtil._();
  9. return _instance;
  10. }
  11. ///挂载在MateralApp上的路由键
  12. final navigatorKey = GlobalKey<NavigatorState>();
  13. ///可通过它进行免context路由跳转
  14. // NavigatorState get currentState => navigatorKey.currentState;
  15. NavigatorState? get state => navigatorKey.currentState;
  16. ///挂载在MateralApp上的context
  17. BuildContext? get context => navigatorKey.currentContext;
  18. ///免[context] [showModalBottomSheet]
  19. Future<T?> showModalBottomSheet<T>({
  20. required WidgetBuilder builder,
  21. Color? backgroundColor,
  22. double? elevation,
  23. ShapeBorder? shape,
  24. Clip? clipBehavior,
  25. Color? barrierColor,
  26. bool isScrollControlled = false,
  27. bool useRootNavigator = false,
  28. bool isDismissible = true,
  29. bool enableDrag = true,
  30. }) =>
  31. material.showModalBottomSheet<T>(
  32. context: context!,
  33. builder: builder,
  34. backgroundColor: backgroundColor,
  35. elevation: elevation,
  36. shape: shape,
  37. clipBehavior: clipBehavior,
  38. barrierColor: barrierColor,
  39. isScrollControlled: isScrollControlled,
  40. useRootNavigator: useRootNavigator,
  41. isDismissible: isDismissible,
  42. enableDrag: enableDrag,
  43. );
  44. bool canPop() => state!.canPop();
  45. void finalizeRoute(Route route) {
  46. return state!.finalizeRoute(route);
  47. }
  48. Future<bool> maybePop<T extends Object>([T? result]) => state!.maybePop();
  49. bool get mounted => state!.mounted;
  50. OverlayState? get overlay => state!.overlay;
  51. void pop<T extends Object?>([T? result]) {
  52. if (canPop()) return state!.pop(result);
  53. }
  54. Future<T?> popAndPushNamed<T extends Object, TO extends Object>(
  55. String routeName, {
  56. TO? result,
  57. Object? arguments,
  58. }) {
  59. return state!.popAndPushNamed(
  60. routeName,
  61. result: result,
  62. arguments: arguments,
  63. );
  64. }
  65. void popUntil(RoutePredicate predicate) => state!.popUntil(predicate);
  66. Future<T?> push<T extends Object?>(Route<T> route) => state!.push<T>(route);
  67. Future<T?> pushAndRemoveUntil<T extends Object>(
  68. Route<T> newRoute,
  69. RoutePredicate predicate,
  70. ) {
  71. return state!.pushAndRemoveUntil<T>(newRoute, predicate);
  72. }
  73. Future<T?> pushNamed<T extends Object>(String routeName,
  74. {Object? arguments}) {
  75. return state!.pushNamed<T>(
  76. routeName,
  77. arguments: arguments,
  78. );
  79. }
  80. Future<T?> pushNamedAndRemoveUntil<T extends Object>(
  81. String newRouteName,
  82. RoutePredicate predicate, {
  83. Object? arguments,
  84. }) {
  85. return state!.pushNamedAndRemoveUntil<T>(
  86. newRouteName,
  87. predicate,
  88. arguments: arguments,
  89. );
  90. }
  91. Future<T?> pushReplacement<T extends Object, TO extends Object>(
  92. Route<T> newRoute, {
  93. TO? result,
  94. }) {
  95. return state!.pushReplacement(
  96. newRoute,
  97. result: result,
  98. );
  99. }
  100. Future<T?> pushReplacementNamed<T extends Object, TO extends Object>(
  101. String routeName, {
  102. TO? result,
  103. Object? arguments,
  104. }) {
  105. return state!.pushReplacementNamed(
  106. routeName,
  107. result: result,
  108. arguments: arguments,
  109. );
  110. }
  111. void removeRoute(Route route) => state!.removeRoute(route);
  112. void removeRouteBelow(Route anchorRoute) =>
  113. state!.removeRouteBelow(anchorRoute);
  114. void replace<T extends Object>({
  115. required Route oldRoute,
  116. required Route<T> newRoute,
  117. }) {
  118. return state!.replace(
  119. oldRoute: oldRoute,
  120. newRoute: newRoute,
  121. );
  122. }
  123. void replaceRouteBelow<T extends Object>({
  124. required Route anchorRoute,
  125. required Route<T> newRoute,
  126. }) {
  127. return state!.replaceRouteBelow(
  128. anchorRoute: anchorRoute,
  129. newRoute: newRoute,
  130. );
  131. }
  132. bool get userGestureInProgress => state!.userGestureInProgress;
  133. ValueNotifier<bool> get userGestureInProgressNotifier =>
  134. state!.userGestureInProgressNotifier;
  135. }