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

          Line data    Source code
       1             : import 'package:flutter/material.dart';
       2             : import 'package:mvvm_builder/mvvm_builder.dart';
       3             : import 'package:pal/src/injectors/editor_app/editor_app_injector.dart';
       4             : import 'package:pal/src/services/package_version.dart';
       5             : import 'package:pal/src/theme.dart';
       6             : import 'package:pal/src/ui/editor/pages/create_helper/steps/create_helper_infos/create_helper_infos_step.dart';
       7             : import 'package:pal/src/ui/editor/pages/create_helper/steps/create_helper_theme/create_helper_theme_step.dart';
       8             : import 'package:pal/src/ui/editor/pages/create_helper/steps/create_helper_type/create_helper_type_step.dart';
       9             : import 'package:pal/src/ui/editor/pages/helper_editor/editor_router.dart';
      10             : import 'package:pal/src/ui/editor/pages/create_helper/create_helper_presenter.dart';
      11             : import 'package:pal/src/ui/editor/pages/create_helper/create_helper_viewmodel.dart';
      12             : import 'package:pal/src/ui/editor/widgets/nested_navigator.dart';
      13             : import 'package:pal/src/ui/editor/widgets/progress_widget/progress_bar_widget.dart';
      14             : 
      15             : import '../../../../pal_navigator_observer.dart';
      16             : 
      17             : class CreateHelperPageArguments {
      18             :   final GlobalKey<NavigatorState> hostedAppNavigatorKey;
      19             :   final String pageId;
      20             : 
      21           1 :   CreateHelperPageArguments(
      22             :     this.hostedAppNavigatorKey,
      23             :     this.pageId,
      24             :   );
      25             : }
      26             : 
      27             : abstract class CreateHelperView {
      28             : 
      29             :   void launchHelperEditor(final String pageRoute, final CreateHelperModel model);
      30             : 
      31             :   void changeStep(GlobalKey<NavigatorState> nestedNavigationKey, int index);
      32             : 
      33             :   void popStep(GlobalKey<NavigatorState> nestedNavigationKey);
      34             : 
      35             :   void checkSteps(CreateHelperModel model, CreateHelperPresenter presenter);
      36             : }
      37             : 
      38             : class CreateHelperPage extends StatelessWidget implements CreateHelperView {
      39             : 
      40             :   final GlobalKey<NavigatorState> hostedAppNavigatorKey;
      41             :   final PalRouteObserver routeObserver;
      42             :   final String pageId;
      43             :   final PackageVersionReader packageVersionReader;
      44             : 
      45             :   final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey();
      46             : 
      47           1 :   CreateHelperPage({
      48             :     Key key,
      49             :     this.hostedAppNavigatorKey,
      50             :     this.packageVersionReader,
      51             :     this.pageId,
      52             :     this.routeObserver
      53             :   });
      54             : 
      55             :   final _mvvmPageBuilder = MVVMPageBuilder<CreateHelperPresenter, CreateHelperModel>();
      56             : 
      57           1 :   @override
      58             :   Widget build(BuildContext context) {
      59           2 :     return _mvvmPageBuilder.build(
      60           1 :       key: UniqueKey(),
      61             :       context: context,
      62           2 :       presenterBuilder: (context) => CreateHelperPresenter(
      63             :         this,
      64           1 :         routeObserver: routeObserver
      65           0 :           ?? EditorInjector.of(context).routeObserver,
      66           1 :         packageVersionReader: packageVersionReader
      67           0 :           ?? EditorInjector.of(context).packageVersionReader,
      68             :       ),
      69           1 :       builder: (context, presenter, model)
      70           1 :         => Scaffold(
      71           1 :           key: _scaffoldKey,
      72           1 :           appBar: AppBar(
      73             :             elevation: 0,
      74             :             backgroundColor: Colors.transparent,
      75           1 :             iconTheme: IconThemeData(
      76           4 :               color: PalTheme.of(context.buildContext).colors.dark,
      77             :             ),
      78           1 :             title: Text(
      79             :               'Create new helper',
      80           1 :               style: TextStyle(
      81           4 :                 color: PalTheme.of(context.buildContext).colors.dark,
      82             :               ),
      83             :             ),
      84             :           ),
      85           2 :           body: this._buildPage(context.buildContext, presenter, model),
      86             :         ),
      87             :     );
      88             :   }
      89             : 
      90           1 :   Widget _buildPage(
      91             :     final BuildContext context,
      92             :     final CreateHelperPresenter presenter,
      93             :     final CreateHelperModel model,
      94             :   ) {
      95           1 :     return SafeArea(
      96           1 :       child: Container(
      97             :         width: double.infinity,
      98           1 :         child: Column(
      99           1 :           children: [
     100           1 :             Padding(
     101             :               padding: const EdgeInsets.only(
     102             :                 top: 23.0,
     103             :                 bottom: 17.0,
     104             :                 left: 16.0,
     105             :                 right: 16.0,
     106             :               ),
     107           1 :               child: _buildProgressBar(model),
     108             :             ),
     109           1 :             Expanded(
     110           1 :               child: NestedNavigator(
     111           1 :                 navigationKey: model.nestedNavigationKey,
     112             :                 initialRoute: 'create/infos',
     113           1 :                 onWillPop: presenter.decrementStep,
     114           1 :                 routes: {
     115           2 :                   'create/infos': (context) => CreateHelperInfosStep(
     116             :                         model: model,
     117             :                         presenter: presenter,
     118             :                       ),
     119           0 :                   'create/type': (context) => CreateHelperTypeStep(
     120             :                         model: model,
     121             :                         presenter: presenter,
     122             :                       ),
     123           0 :                   'create/theme': (context) => CreateHelperThemeStep(
     124             :                         model: model,
     125             :                         presenter: presenter,
     126             :                       ),
     127             :                 },
     128             :               ),
     129             :             ),
     130           1 :             Padding(
     131             :               padding: const EdgeInsets.only(
     132             :                 top: 8.0,
     133             :                 bottom: 8.0,
     134             :                 left: 16.0,
     135             :                 right: 16.0,
     136             :               ),
     137           1 :               child: Container(
     138             :                 width: double.infinity,
     139           1 :                 child: _buildNextButton(context, model, presenter),
     140             :               ),
     141             :             ),
     142             :           ],
     143             :         ),
     144             :       ),
     145             :     );
     146             :   }
     147             : 
     148           1 :   Widget _buildProgressBar(final CreateHelperModel model) {
     149           1 :     return Column(
     150             :       crossAxisAlignment: CrossAxisAlignment.start,
     151           1 :       children: [
     152           1 :         Text(
     153           2 :           (model?.step?.value != null)
     154           4 :               ? model.stepsTitle[model?.step?.value]
     155             :               : '',
     156           1 :           style: TextStyle(
     157             :             fontWeight: FontWeight.bold,
     158             :             fontSize: 20,
     159             :           ),
     160             :         ),
     161           1 :         SizedBox(height: 15.0),
     162           1 :         ProgressBarWidget(
     163             :           nbSteps: 3,
     164           1 :           step: model.step,
     165             :         ),
     166             :       ],
     167             :     );
     168             :   }
     169             : 
     170           1 :   Widget _buildNextButton(
     171             :     final BuildContext context,
     172             :     final CreateHelperModel model,
     173             :     final CreateHelperPresenter presenter,
     174             :   ) {
     175           1 :     return RaisedButton(
     176           1 :       key: ValueKey('palCreateHelperNextButton'),
     177           3 :       disabledColor: PalTheme.of(context).colors.color4,
     178           1 :       child: Text(
     179             :         'Next',
     180           1 :         style: TextStyle(
     181             :           color: Colors.white,
     182             :         ),
     183             :       ),
     184           3 :       color: PalTheme.of(context).colors.color1,
     185           2 :       onPressed: (model.isFormValid) ? presenter.incrementStep : null,
     186           1 :       shape: RoundedRectangleBorder(
     187           1 :         borderRadius: BorderRadius.circular(8.0),
     188             :       ),
     189             :     );
     190             :   }
     191             : 
     192           0 :   @override
     193             :   void launchHelperEditor(final String pageRoute, final CreateHelperModel model) {
     194           0 :     new EditorRouter(hostedAppNavigatorKey).createHelper(pageRoute, model);
     195             :     // Go back
     196           0 :     Navigator.of(_scaffoldKey.currentContext).pop(true);
     197             :   }
     198             : 
     199           0 :   @override
     200             :   void changeStep(GlobalKey<NavigatorState> nestedNavigationKey, int index) {
     201             :     String routeName;
     202             :     switch (index) {
     203           0 :       case 0:
     204             :         routeName = 'infos';
     205             :         break;
     206           0 :       case 1:
     207             :         routeName = 'type';
     208             :         break;
     209           0 :       case 2:
     210             :         routeName = 'theme';
     211             :         break;
     212             :       default:
     213             :     }
     214             : 
     215           0 :     Navigator.of(nestedNavigationKey.currentContext)
     216           0 :         .pushNamed('create/$routeName');
     217             :   }
     218             : 
     219           0 :   @override
     220             :   void popStep(GlobalKey<NavigatorState> nestedNavigationKey) {
     221           0 :     Navigator.of(nestedNavigationKey.currentContext).pop();
     222             :   }
     223             : 
     224           0 :   @override
     225             :   void checkSteps(CreateHelperModel model, CreateHelperPresenter presenter) {
     226           0 :     switch (model.step.value) {
     227           0 :       case 0:
     228           0 :         model.isFormValid = model.infosForm.currentState.validate();
     229             :         break;
     230           0 :       case 1:
     231           0 :         model.isFormValid = model.selectedHelperType != null;
     232             :         break;
     233           0 :       case 2:
     234           0 :         model.isFormValid = model.selectedHelperType != null;
     235             :         break;
     236             :       default:
     237             :     }
     238             : 
     239           0 :     presenter.refreshView();
     240             :   }
     241             : }

Generated by: LCOV version 1.14