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

          Line data    Source code
       1             : import 'package:flutter/material.dart';
       2             : import 'package:flutter/services.dart';
       3             : import 'package:flutter/widgets.dart';
       4             : import 'package:pal/src/ui/editor/pages/create_helper/create_helper_presenter.dart';
       5             : import 'package:pal/src/ui/editor/pages/create_helper/create_helper_viewmodel.dart';
       6             : import 'package:pal/src/ui/editor/widgets/labeled_form.dart';
       7             : import 'package:pal/src/ui/editor/widgets/bordered_text_field.dart';
       8             : 
       9             : class CreateHelperInfosStep extends StatelessWidget {
      10             :   final CreateHelperModel model;
      11             :   final CreateHelperPresenter presenter;
      12             :   final Function() onFormChanged;
      13             : 
      14           2 :   const CreateHelperInfosStep({
      15             :     Key key,
      16             :     @required this.model,
      17             :     @required this.presenter,
      18             :     this.onFormChanged,
      19           2 :   }) : super(key: key);
      20             : 
      21           2 :   @override
      22             :   Widget build(BuildContext context) {
      23           2 :     return GestureDetector(
      24           0 :       onTap: () => FocusScope.of(context).unfocus(),
      25           2 :       child: Scaffold(
      26           2 :         body: SingleChildScrollView(
      27           2 :           key: ValueKey('palCreateHelperScrollList'),
      28             :           padding: const EdgeInsets.only(bottom: 8.0),
      29           2 :           child: Padding(
      30             :             padding: const EdgeInsets.all(16.0),
      31           2 :             child: Column(
      32           2 :               children: [
      33           2 :                 _buildForm(),
      34             :               ],
      35             :             ),
      36             :           ),
      37             :         ),
      38             :       ),
      39             :     );
      40             :   }
      41             : 
      42           2 :   void _checkFormValid() {
      43           4 :     if (!model.isAppVersionLoading) {
      44          12 :       model.isFormValid = model.infosForm.currentState.validate();
      45           4 :       presenter.refreshView();
      46             :     }
      47             :   }
      48             : 
      49           2 :   Widget _buildForm() {
      50           2 :     return Form(
      51           4 :       key: model.infosForm,
      52           2 :       onChanged: _checkFormValid,
      53             :       autovalidateMode: AutovalidateMode.disabled,
      54           2 :       child: Wrap(
      55             :         runSpacing: 17.0,
      56           2 :         children: [
      57           2 :           LabeledForm(
      58             :             label: 'Name',
      59           2 :             widget: BorderedTextField(
      60           2 :               key: ValueKey('pal_CreateHelper_TextField_Name'),
      61             :               hintText: 'My new helper',
      62           4 :               controller: model.helperNameController,
      63           2 :               validator: _checkHelperName,
      64             :               textCapitalization: TextCapitalization.sentences,
      65             :             ),
      66             :           ),
      67           2 :           LabeledForm(
      68             :             label: 'Trigger type',
      69           2 :             widget: DropdownButtonFormField(
      70           2 :               key: ValueKey('pal_CreateHelper_Dropdown_Type'),
      71           2 :               validator: _checkHelperTriggerType,
      72           8 :               value: model.triggerTypes.first.key,
      73           2 :               onChanged: _onTriggerTypeChanged,
      74           2 :               items: _buildDropdownArray(),
      75             :             ),
      76             :           ),
      77           2 :           LabeledForm(
      78             :             label: 'Minimum app version',
      79           2 :             widget: BorderedTextField(
      80           2 :               key: ValueKey('pal_CreateHelper_TextField_MinimumVersion'),
      81           2 :               textInputType: TextInputType.numberWithOptions(decimal: true),
      82           4 :               controller: model.minVersionController,
      83           2 :               validator: _checkValidVersion,
      84           4 :               isLoading: model.isAppVersionLoading,
      85             :             ),
      86             :           ),
      87             :         ],
      88             :       ),
      89             :     );
      90             :   }
      91             : 
      92           1 :   _onTriggerTypeChanged(String newValue) {
      93           2 :     model.selectedTriggerType = newValue;
      94           2 :     presenter.refreshView();
      95             :   }
      96             : 
      97           2 :   List<DropdownMenuItem<String>> _buildDropdownArray() {
      98           2 :     List<DropdownMenuItem<String>> dropdownArray = [];
      99           8 :     model.triggerTypes.forEach((element) {
     100           4 :       dropdownArray.add(DropdownMenuItem<String>(
     101           2 :         value: element.key,
     102           4 :         child: Text(element.description),
     103             :       ));
     104             :     });
     105             :     return dropdownArray;
     106             :   }
     107             : 
     108             :   // Check fields
     109           2 :   String _checkHelperName(String value) {
     110           2 :     if (value.isEmpty) {
     111             :       return 'Please enter a name';
     112           4 :     } else if (value.length >= 45) {
     113             :       return 'Maximum 45 character allowed';
     114             :     }
     115             :     return null;
     116             :   }
     117             : 
     118           2 :   String _checkHelperTriggerType(String value) {
     119           2 :     return (value.isEmpty) ? 'Please select a type' : null;
     120             :   }
     121             : 
     122           2 :   String _checkValidVersion(String value) {
     123             :     final String pattern = r'^\d+(\.\d+){0,2}$';
     124           2 :     final RegExp regExp = new RegExp(pattern);
     125           2 :     if (value.isEmpty) {
     126             :       return 'Please enter a version';
     127             :     } else {
     128           2 :       if (!regExp.hasMatch(value))
     129             :         return 'Please enter a valid version';
     130             :       else
     131             :         return null;
     132             :     }
     133             :   }
     134             : }

Generated by: LCOV version 1.14