Line data Source code
1 : import 'package:flutter/widgets.dart'; 2 : 3 : class NoAnimationTransitionDelegate extends TransitionDelegate<void> { 4 2 : const NoAnimationTransitionDelegate() : super(); 5 : 6 2 : @override 7 : Iterable<RouteTransitionRecord> resolve({ 8 : required List<RouteTransitionRecord> newPageRouteHistory, 9 : required Map<RouteTransitionRecord?, RouteTransitionRecord> 10 : locationToExitingPageRoute, 11 : required Map<RouteTransitionRecord?, List<RouteTransitionRecord>> 12 : pageRouteToPagelessRoutes, 13 : }) { 14 2 : final List<RouteTransitionRecord> results = <RouteTransitionRecord>[]; 15 : 16 4 : for (final RouteTransitionRecord pageRoute in newPageRouteHistory) { 17 2 : if (pageRoute.isWaitingForEnteringDecision) { 18 2 : pageRoute.markForAdd(); 19 : } 20 2 : results.add(pageRoute); 21 : } 22 : for (final RouteTransitionRecord exitingPageRoute 23 4 : in locationToExitingPageRoute.values) { 24 2 : if (exitingPageRoute.isWaitingForExitingDecision) { 25 2 : exitingPageRoute.markForRemove(); 26 : final List<RouteTransitionRecord>? pagelessRoutes = 27 2 : pageRouteToPagelessRoutes[exitingPageRoute]; 28 : if (pagelessRoutes != null) { 29 2 : for (final RouteTransitionRecord pagelessRoute in pagelessRoutes) { 30 1 : pagelessRoute.markForRemove(); 31 : } 32 : } 33 : } 34 2 : results.add(exitingPageRoute); 35 : } 36 : return results; 37 : } 38 : } 39 : 40 : class ReverseTransitionDelegate extends TransitionDelegate<void> { 41 13 : const ReverseTransitionDelegate() : super(); 42 : 43 4 : @override 44 : Iterable<RouteTransitionRecord> resolve({ 45 : required List<RouteTransitionRecord> newPageRouteHistory, 46 : required Map<RouteTransitionRecord?, RouteTransitionRecord> 47 : locationToExitingPageRoute, 48 : required Map<RouteTransitionRecord?, List<RouteTransitionRecord>> 49 : pageRouteToPagelessRoutes, 50 : }) { 51 4 : final List<RouteTransitionRecord> results = <RouteTransitionRecord>[]; 52 : 53 4 : void handleExitingRoute(RouteTransitionRecord? location) { 54 : final RouteTransitionRecord? exitingPageRoute = 55 4 : locationToExitingPageRoute[location]; 56 : if (exitingPageRoute == null) return; 57 4 : if (exitingPageRoute.isWaitingForExitingDecision) { 58 : final bool hasPagelessRoute = 59 4 : pageRouteToPagelessRoutes.containsKey(exitingPageRoute); 60 12 : exitingPageRoute.markForPop(exitingPageRoute.route.currentResult); 61 : if (hasPagelessRoute) { 62 : final List<RouteTransitionRecord> pagelessRoutes = 63 1 : pageRouteToPagelessRoutes[exitingPageRoute]!; 64 2 : for (final RouteTransitionRecord pagelessRoute in pagelessRoutes) { 65 1 : if (pagelessRoute.isWaitingForExitingDecision) { 66 3 : pagelessRoute.markForPop(pagelessRoute.route.currentResult); 67 : } 68 : } 69 : } 70 : } 71 4 : results.add(exitingPageRoute); 72 : 73 : handleExitingRoute(exitingPageRoute); 74 : } 75 : 76 8 : for (final RouteTransitionRecord pageRoute in newPageRouteHistory) { 77 4 : if (pageRoute.isWaitingForEnteringDecision) { 78 4 : pageRoute.markForAdd(); 79 : } 80 4 : results.add(pageRoute); 81 : handleExitingRoute(pageRoute); 82 : } 83 : 84 : handleExitingRoute(null); 85 : 86 : return results; 87 : } 88 : }