LCOV - code coverage report
Current view: top level - src - transition_delegates.dart (source / functions) Hit Total Coverage
Test: lcov.info Lines: 31 31 100.0 %
Date: 2021-12-03 10:03:44 Functions: 0 0 -

          Line data    Source code
       1             : import 'package:flutter/widgets.dart';
       2             : 
       3             : /// A no-animation transition delegate for [BeamerDelegate.transitionDelegate].
       4             : ///
       5             : /// See example at https://api.flutter.dev/flutter/widgets/TransitionDelegate-class.html.
       6             : class NoAnimationTransitionDelegate extends TransitionDelegate<void> {
       7             :   /// Creates a [NoAnimationTransitionDelegate].
       8           2 :   const NoAnimationTransitionDelegate() : super();
       9             : 
      10           2 :   @override
      11             :   Iterable<RouteTransitionRecord> resolve({
      12             :     required List<RouteTransitionRecord> newPageRouteHistory,
      13             :     required Map<RouteTransitionRecord?, RouteTransitionRecord>
      14             :         locationToExitingPageRoute,
      15             :     required Map<RouteTransitionRecord?, List<RouteTransitionRecord>>
      16             :         pageRouteToPagelessRoutes,
      17             :   }) {
      18           2 :     final List<RouteTransitionRecord> results = <RouteTransitionRecord>[];
      19             : 
      20           4 :     for (final RouteTransitionRecord pageRoute in newPageRouteHistory) {
      21           2 :       if (pageRoute.isWaitingForEnteringDecision) {
      22           2 :         pageRoute.markForAdd();
      23             :       }
      24           2 :       results.add(pageRoute);
      25             :     }
      26             :     for (final RouteTransitionRecord exitingPageRoute
      27           4 :         in locationToExitingPageRoute.values) {
      28           2 :       if (exitingPageRoute.isWaitingForExitingDecision) {
      29           2 :         exitingPageRoute.markForRemove();
      30             :         final List<RouteTransitionRecord>? pagelessRoutes =
      31           2 :             pageRouteToPagelessRoutes[exitingPageRoute];
      32             :         if (pagelessRoutes != null) {
      33           2 :           for (final RouteTransitionRecord pagelessRoute in pagelessRoutes) {
      34           1 :             pagelessRoute.markForRemove();
      35             :           }
      36             :         }
      37             :       }
      38           2 :       results.add(exitingPageRoute);
      39             :     }
      40             :     return results;
      41             :   }
      42             : }
      43             : 
      44             : /// A transition delegate that will look like pop, regardless of whether an action is actuallly a pop.
      45             : ///
      46             : /// New pages are added behind and then the remove animation on old pages is done.
      47             : class ReverseTransitionDelegate extends TransitionDelegate<void> {
      48             :   /// Creates a [ReverseTransitionDelegate],
      49          12 :   const ReverseTransitionDelegate() : super();
      50             : 
      51           4 :   @override
      52             :   Iterable<RouteTransitionRecord> resolve({
      53             :     required List<RouteTransitionRecord> newPageRouteHistory,
      54             :     required Map<RouteTransitionRecord?, RouteTransitionRecord>
      55             :         locationToExitingPageRoute,
      56             :     required Map<RouteTransitionRecord?, List<RouteTransitionRecord>>
      57             :         pageRouteToPagelessRoutes,
      58             :   }) {
      59           4 :     final List<RouteTransitionRecord> results = <RouteTransitionRecord>[];
      60             : 
      61           4 :     void handleExitingRoute(RouteTransitionRecord? location) {
      62             :       final RouteTransitionRecord? exitingPageRoute =
      63           4 :           locationToExitingPageRoute[location];
      64             :       if (exitingPageRoute == null) return;
      65           4 :       if (exitingPageRoute.isWaitingForExitingDecision) {
      66             :         final bool hasPagelessRoute =
      67           4 :             pageRouteToPagelessRoutes.containsKey(exitingPageRoute);
      68          12 :         exitingPageRoute.markForPop(exitingPageRoute.route.currentResult);
      69             :         if (hasPagelessRoute) {
      70             :           final List<RouteTransitionRecord> pagelessRoutes =
      71           1 :               pageRouteToPagelessRoutes[exitingPageRoute]!;
      72           2 :           for (final RouteTransitionRecord pagelessRoute in pagelessRoutes) {
      73           1 :             if (pagelessRoute.isWaitingForExitingDecision) {
      74           3 :               pagelessRoute.markForPop(pagelessRoute.route.currentResult);
      75             :             }
      76             :           }
      77             :         }
      78             :       }
      79           4 :       results.add(exitingPageRoute);
      80             : 
      81             :       handleExitingRoute(exitingPageRoute);
      82             :     }
      83             : 
      84           8 :     for (final RouteTransitionRecord pageRoute in newPageRouteHistory) {
      85           4 :       if (pageRoute.isWaitingForEnteringDecision) {
      86           4 :         pageRoute.markForAdd();
      87             :       }
      88           4 :       results.add(pageRoute);
      89             :       handleExitingRoute(pageRoute);
      90             :     }
      91             : 
      92             :     handleExitingRoute(null);
      93             : 
      94             :     return results;
      95             :   }
      96             : }

Generated by: LCOV version 1.14