LCOV - code coverage report
Current view: top level - src/ui/editor/pages/helper_editor - editor_router.dart (source / functions) Hit Total Coverage
Test: lcov.info Lines: 0 74 0.0 %
Date: 2020-12-04 18:41:24 Functions: 0 0 -

          Line data    Source code
       1             : 
       2             : import 'package:flutter/material.dart';
       3             : import 'package:pal/src/database/entity/helper/helper_entity.dart';
       4             : import 'package:pal/src/database/entity/helper/helper_type.dart';
       5             : import 'package:pal/src/ui/editor/pages/create_helper/create_helper_viewmodel.dart';
       6             : import 'package:pal/src/ui/editor/pages/helper_editor/helper_editor.dart';
       7             : import 'package:pal/src/ui/editor/pages/media_gallery/media_gallery.dart';
       8             : import 'package:pal/src/ui/shared/utilities/element_finder.dart';
       9             : 
      10             : import '../../../../router.dart';
      11             : import 'font_editor/pickers/font_family_picker/font_family_picker.dart';
      12             : import 'font_editor/pickers/font_weight_picker/font_weight_picker.dart';
      13             : import 'helpers/editor_fullscreen_helper/editor_fullscreen_helper.dart';
      14             : import 'helpers/editor_simple_helper/editor_simple_helper.dart';
      15             : import 'helpers/editor_update_helper/editor_update_helper.dart';
      16             : 
      17             : /// this class will show the correct helper editor for each types
      18             : /// we don't use a navigator push as we use the overlay feature for
      19             : /// reaching the overlayed page elements (@see anchoredHelper)
      20             : class EditorRouter {
      21             : 
      22             :   final GlobalKey<NavigatorState> hostedAppNavigatorKey;
      23             : 
      24           0 :   EditorRouter(this.hostedAppNavigatorKey);
      25             : 
      26             :   /// Open editor page as an overlay
      27           0 :   Future createHelper(
      28             :     final String currentPageRoute,
      29             :     final CreateHelperModel model) async
      30             :   {
      31           0 :     var elementFinder = ElementFinder(hostedAppNavigatorKey.currentContext);
      32           0 :     HelperEditorPageArguments args = HelperEditorPageArguments(
      33           0 :       hostedAppNavigatorKey,
      34             :       currentPageRoute,
      35           0 :       helperMinVersion: model.minVersionController?.value?.text,
      36             :     );
      37             :     WidgetBuilder builder;
      38           0 :     switch(model.selectedHelperType) {
      39           0 :       case HelperType.SIMPLE_HELPER:
      40           0 :         builder = (context) => EditorSimpleHelperPage.create(
      41             :           parameters: args,
      42           0 :           helperViewModel: model.asHelperViewModel(),
      43             :         );
      44             :         break;
      45           0 :       case HelperType.UPDATE_HELPER:
      46           0 :         builder = (context) => EditorUpdateHelperPage.create(
      47             :           parameters: args,
      48           0 :           helperViewModel: model.asHelperViewModel(),
      49             :         );
      50             :         break;
      51           0 :       case HelperType.HELPER_FULL_SCREEN:
      52           0 :         builder = (context) => EditorFullScreenHelperPage.create(
      53             :           parameters: args,
      54           0 :           helperViewModel: model.asHelperViewModel(),
      55             :         );
      56             :         break;
      57             :       default:
      58             :         throw 'HELPER TYPE NOT HANDLED';
      59             :     }
      60           0 :     showOverlayed(hostedAppNavigatorKey, builder);
      61             :   }
      62             : 
      63           0 :   Future editHelper(final String currentPageRoute, final HelperEntity helperEntity) async {
      64           0 :     var elementFinder = ElementFinder(hostedAppNavigatorKey.currentContext);
      65           0 :     HelperEditorPageArguments args = HelperEditorPageArguments(
      66           0 :       hostedAppNavigatorKey,
      67             :       currentPageRoute,
      68             :     );
      69             :     WidgetBuilder builder;
      70           0 :     switch(helperEntity.type) {
      71           0 :       case HelperType.SIMPLE_HELPER:
      72           0 :         builder = (context) => InnerEditorRouter(
      73           0 :           child: EditorSimpleHelperPage.edit(
      74             :             parameters: args,
      75             :             helperEntity: helperEntity,
      76             :           ),
      77             :         );
      78             :         break;
      79           0 :       case HelperType.UPDATE_HELPER:
      80           0 :         builder = (context) => InnerEditorRouter(
      81           0 :           child: EditorUpdateHelperPage.edit(
      82             :             parameters: args,
      83             :             helperEntity: helperEntity,
      84             :           ),
      85             :         );
      86             :         break;
      87           0 :       case HelperType.HELPER_FULL_SCREEN:
      88           0 :         builder = (context) => InnerEditorRouter(
      89           0 :           child: EditorFullScreenHelperPage.edit(
      90             :             parameters: args,
      91             :             helperEntity: helperEntity,
      92             :           ),
      93             :         );
      94             :         break;
      95             :       default:
      96             :         throw 'HELPER TYPE NOT HANDLED';
      97             :     }
      98           0 :     showOverlayed(hostedAppNavigatorKey, builder);
      99             :   }
     100             : }
     101             : 
     102             : /// Editor has some pages to show like change font, color...
     103             : /// so it has his own routing strategy
     104             : class InnerEditorRouter extends StatefulWidget {
     105             : 
     106             :   final Widget child;
     107             : 
     108           0 :   InnerEditorRouter({@required this.child});
     109             : 
     110           0 :   @override
     111           0 :   _InnerEditorRouterState createState() => _InnerEditorRouterState();
     112             : }
     113             : 
     114             : class _InnerEditorRouterState extends State<InnerEditorRouter> {
     115             : 
     116             :   final GlobalKey<NavigatorState> innerEditorNavKey = GlobalKey<NavigatorState>();
     117             :   InnerEditorRouterDelegate _routerDelegate;
     118             : 
     119           0 :   void initState() {
     120           0 :     super.initState();
     121           0 :     _routerDelegate = InnerEditorRouterDelegate(
     122           0 :       child: widget.child,
     123           0 :       innerEditorNavKey: innerEditorNavKey
     124             :     );
     125             :   }
     126             : 
     127           0 :   @override
     128             :   void didUpdateWidget(covariant InnerEditorRouter oldWidget) {
     129           0 :     super.didUpdateWidget(oldWidget);
     130             :   }
     131             : 
     132           0 :   @override
     133             :   Widget build(BuildContext context) {
     134           0 :     return Router(
     135           0 :       routerDelegate: _routerDelegate,
     136             :     );
     137             :   }
     138             : }
     139             : 
     140             : 
     141             : abstract class InnerEditorRoutePath {}
     142             : 
     143             : 
     144             : class InnerEditorRouterDelegate extends RouterDelegate<InnerEditorRoutePath> with ChangeNotifier, PopNavigatorRouterDelegateMixin {
     145             : 
     146             :   final GlobalKey<NavigatorState> innerEditorNavKey;
     147             : 
     148             :   Widget child;
     149             : 
     150           0 :   InnerEditorRouterDelegate({this.child, this.innerEditorNavKey});
     151             : 
     152           0 :   @override
     153             :   Widget build(BuildContext context) {
     154           0 :     return Navigator(
     155           0 :       key: innerEditorNavKey,
     156           0 :       onGenerateRoute: (RouteSettings settings) {
     157           0 :         switch (settings.name) {
     158           0 :           case '/editor/new/font-family':
     159           0 :             FontFamilyPickerArguments args = settings.arguments;
     160           0 :             return MaterialPageRoute(
     161           0 :               builder: (context) => FontFamilyPickerPage(
     162             :                 arguments: args,
     163             :               ));
     164           0 :           case '/editor/new/font-weight':
     165           0 :             FontWeightPickerArguments args = settings.arguments;
     166           0 :             return MaterialPageRoute(
     167           0 :               builder: (context) => FontWeightPickerPage(
     168             :                 arguments: args,
     169             :               ));
     170           0 :           case '/editor/media-gallery':
     171           0 :             MediaGalleryPageArguments args = settings.arguments;
     172           0 :             return MaterialPageRoute(
     173           0 :               builder: (context) =>
     174           0 :                 MediaGalleryPage(
     175           0 :                   mediaId: args.mediaId,
     176             :                 ));
     177             :           default:
     178           0 :             return MaterialPageRoute(
     179           0 :               builder: (context) => child,
     180             :               maintainState: true
     181             :             );
     182             :         }
     183             :       },
     184           0 :       onPopPage: (route, result) {
     185           0 :         notifyListeners();
     186           0 :         return route.didPop(result);
     187             :       },
     188             :     );
     189             :   }
     190             : 
     191           0 :   @override
     192           0 :   GlobalKey<NavigatorState> get navigatorKey => innerEditorNavKey;
     193             : 
     194           0 :   @override
     195             :   Future<void> setNewRoutePath(InnerEditorRoutePath configuration) {
     196           0 :     throw UnimplementedError();
     197             :   }
     198             : 
     199             : }

Generated by: LCOV version 1.14