import 'package:flutter/widgets.dart'; import 'package:flutter/material.dart' as material; ///免context路由操作 class WNavUtil { WNavUtil._(); static WNavUtil? _instance; static WNavUtil? get instance { _instance ??= WNavUtil._(); return _instance; } ///挂载在MateralApp上的路由键 final navigatorKey = GlobalKey(); ///可通过它进行免context路由跳转 // NavigatorState get currentState => navigatorKey.currentState; NavigatorState? get state => navigatorKey.currentState; ///挂载在MateralApp上的context BuildContext? get context => navigatorKey.currentContext; ///免[context] [showModalBottomSheet] Future showModalBottomSheet({ required WidgetBuilder builder, Color? backgroundColor, double? elevation, ShapeBorder? shape, Clip? clipBehavior, Color? barrierColor, bool isScrollControlled = false, bool useRootNavigator = false, bool isDismissible = true, bool enableDrag = true, }) => material.showModalBottomSheet( context: context!, builder: builder, backgroundColor: backgroundColor, elevation: elevation, shape: shape, clipBehavior: clipBehavior, barrierColor: barrierColor, isScrollControlled: isScrollControlled, useRootNavigator: useRootNavigator, isDismissible: isDismissible, enableDrag: enableDrag, ); bool canPop() => state!.canPop(); void finalizeRoute(Route route) { return state!.finalizeRoute(route); } Future maybePop([T? result]) => state!.maybePop(); bool get mounted => state!.mounted; OverlayState? get overlay => state!.overlay; void pop([T? result]) { if (canPop()) return state!.pop(result); } Future popAndPushNamed( String routeName, { TO? result, Object? arguments, }) { return state!.popAndPushNamed( routeName, result: result, arguments: arguments, ); } void popUntil(RoutePredicate predicate) => state!.popUntil(predicate); Future push(Route route) => state!.push(route); Future pushAndRemoveUntil( Route newRoute, RoutePredicate predicate, ) { return state!.pushAndRemoveUntil(newRoute, predicate); } Future pushNamed(String routeName, {Object? arguments}) { return state!.pushNamed( routeName, arguments: arguments, ); } Future pushNamedAndRemoveUntil( String newRouteName, RoutePredicate predicate, { Object? arguments, }) { return state!.pushNamedAndRemoveUntil( newRouteName, predicate, arguments: arguments, ); } Future pushReplacement( Route newRoute, { TO? result, }) { return state!.pushReplacement( newRoute, result: result, ); } Future pushReplacementNamed( String routeName, { TO? result, Object? arguments, }) { return state!.pushReplacementNamed( routeName, result: result, arguments: arguments, ); } void removeRoute(Route route) => state!.removeRoute(route); void removeRouteBelow(Route anchorRoute) => state!.removeRouteBelow(anchorRoute); void replace({ required Route oldRoute, required Route newRoute, }) { return state!.replace( oldRoute: oldRoute, newRoute: newRoute, ); } void replaceRouteBelow({ required Route anchorRoute, required Route newRoute, }) { return state!.replaceRouteBelow( anchorRoute: anchorRoute, newRoute: newRoute, ); } bool get userGestureInProgress => state!.userGestureInProgress; ValueNotifier get userGestureInProgressNotifier => state!.userGestureInProgressNotifier; }