import 'package:flutter/material.dart'; import '../../../get.dart'; import '../router_report.dart'; import 'get_transition_mixin.dart'; mixin PageRouteReportMixin on Route { @override void install() { super.install(); RouterReportManager.reportCurrentRoute(this); } @override void dispose() { super.dispose(); RouterReportManager.reportRouteDispose(this); } } class GetPageRoute extends PageRoute with GetPageRouteTransitionMixin, PageRouteReportMixin { /// Creates a page route for use in an iOS designed app. /// /// The [builder], [maintainState], and [fullscreenDialog] arguments must not /// be null. GetPageRoute({ RouteSettings? settings, this.transitionDuration = const Duration(milliseconds: 300), this.opaque = true, this.parameter, this.gestureWidth, this.curve, this.alignment, this.transition, this.popGesture, this.customTransition, this.barrierDismissible = false, this.barrierColor, this.binding, this.bindings, this.routeName, this.page, this.title, this.showCupertinoParallax = true, this.barrierLabel, this.maintainState = true, bool fullscreenDialog = false, this.middlewares, }) : super(settings: settings, fullscreenDialog: fullscreenDialog); @override final Duration transitionDuration; final GetPageBuilder? page; final String? routeName; //final String reference; final CustomTransition? customTransition; final Bindings? binding; final Map? parameter; final List? bindings; @override final bool showCupertinoParallax; @override final bool opaque; final bool? popGesture; @override final bool barrierDismissible; final Transition? transition; final Curve? curve; final Alignment? alignment; final List? middlewares; @override final Color? barrierColor; @override final String? barrierLabel; @override final bool maintainState; @override void dispose() { super.dispose(); final middlewareRunner = MiddlewareRunner(middlewares); middlewareRunner.runOnPageDispose(); } Widget? _child; Widget _getChild() { if (_child != null) return _child!; final middlewareRunner = MiddlewareRunner(middlewares); final localbindings = [ if (bindings != null) ...bindings!, if (binding != null) ...[binding!] ]; final bindingsToBind = middlewareRunner.runOnBindingsStart(localbindings); if (bindingsToBind != null) { for (final binding in bindingsToBind) { binding.dependencies(); } } final pageToBuild = middlewareRunner.runOnPageBuildStart(page)!; _child = middlewareRunner.runOnPageBuilt(pageToBuild()); return _child!; } @override Widget buildContent(BuildContext context) { return _getChild(); } @override final String? title; @override String get debugLabel => '${super.debugLabel}(${settings.name})'; @override final double Function(BuildContext context)? gestureWidth; }