LCOV - code coverage report
Current view: top level - src/ui/editor/pages/helper_editor/helpers/editor_anchored_helper - editor_anchored_helper.dart (source / functions) Hit Total Coverage
Test: lcov.info Lines: 85 85 100.0 %
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/editor/helper/helper_editor_service.dart';
       5             : import 'package:pal/src/ui/client/helpers/anchored_helper_widget.dart';
       6             : 
       7             : import '../../helper_editor.dart';
       8             : import '../../helper_editor_viewmodel.dart';
       9             : import 'editor_anchored_helper_presenter.dart';
      10             : import 'editor_anchored_helper_viewmodel.dart';
      11             : 
      12             : abstract class EditorAnchoredFullscreenHelperView {
      13             : 
      14             : }
      15             : 
      16             : 
      17             : class EditorAnchoredFullscreenHelper extends StatelessWidget implements EditorAnchoredFullscreenHelperView {
      18             : 
      19           1 :   EditorAnchoredFullscreenHelper._({
      20             :     Key key,
      21           1 :   }) : super(key: key);
      22             : 
      23           1 :   factory EditorAnchoredFullscreenHelper.create({
      24             :     Key key,
      25             :     HelperEditorPageArguments parameters,
      26             :     EditorHelperService helperService,
      27             :     @required HelperViewModel helperViewModel
      28           1 :   }) => EditorAnchoredFullscreenHelper._(
      29             :     key: key,
      30             :   );
      31             : 
      32           1 :   @override
      33             :   Widget build(BuildContext context) {
      34           1 :     return MVVMPage<EditorAnchoredFullscreenPresenter, AnchoredFullscreenHelperViewModel>(
      35           1 :       key: ValueKey("EditorAnchoredFullscreenHelperPage"),
      36           1 :       presenter:  EditorAnchoredFullscreenPresenter(
      37             :         this,
      38           2 :         EditorInjector.of(context).finderService
      39             :       ),
      40           1 :       builder: (context, presenter, model) =>
      41           1 :         Material(
      42           1 :           color: Colors.black.withOpacity(0.3),
      43           1 :           child: Stack(
      44           1 :             children: [
      45           1 :               _createAnchoredWidget(model),
      46           1 :               _buildEditableTexts(presenter, model),
      47           1 :               ..._createSelectableElements(presenter, model),
      48           1 :               _buildRefreshButton(presenter)
      49             :             ],
      50             :           ),
      51             :         ),
      52             :     );
      53             :   }
      54             : 
      55           1 :   _createSelectableElements(EditorAnchoredFullscreenPresenter presenter, AnchoredFullscreenHelperViewModel model) {
      56           1 :     return model.userPageElements
      57           3 :       .map((key, model) => new MapEntry(
      58             :             key,
      59           3 :             _WidgetElementModelTransformer().apply(key, model, presenter.onTapElement))
      60             :       )
      61           2 :       .values.toList();
      62             :   }
      63             :   
      64           1 :   _createAnchoredWidget(AnchoredFullscreenHelperViewModel model) {
      65           1 :     final element =  model.selectedAnchor;
      66           1 :     return Positioned.fill(
      67           1 :       child: Visibility(
      68           1 :         visible: model.selectedAnchor != null,
      69           1 :         child: SizedBox(
      70           1 :           child: CustomPaint(
      71           1 :             painter: AnchoredFullscreenPainter(
      72           2 :               currentPos: element?.value?.offset,
      73           3 :               anchorSize: element?.value?.rect?.size,
      74             :               padding: 0
      75             :             )
      76             :           )
      77             :         ),
      78             :       )
      79             :     );
      80             :   }
      81             : 
      82           1 :   _buildRefreshButton(EditorAnchoredFullscreenPresenter presenter) {
      83           1 :     return Positioned(
      84             :           top: 32, right: 32,
      85           1 :           child: FlatButton.icon(
      86           1 :             key: ValueKey("refreshButton"),
      87           1 :             onPressed: presenter.scanElements,
      88             :             color: Colors.black,
      89           1 :             icon: Icon(Icons.refresh, color: Colors.white,),
      90           2 :             label: Text("refresh", style: TextStyle(color: Colors.white),)
      91             :           ),
      92             :         );
      93             :   }
      94             : 
      95           1 :   _buildEditableTexts(EditorAnchoredFullscreenPresenter presenter, AnchoredFullscreenHelperViewModel model) {
      96           2 :     if(model.writeArea == null || model.selectedAnchor == null)
      97           1 :       return Container();
      98           1 :     return Positioned.fromRect(
      99           1 :       rect: model.writeArea ?? Rect.largest,
     100           1 :       child: Column(
     101             :         mainAxisAlignment: MainAxisAlignment.center,
     102             :         crossAxisAlignment: CrossAxisAlignment.center,
     103           1 :         children: [
     104           1 :           Padding(
     105             :             padding: const EdgeInsets.all(8.0),
     106           1 :             child: Text(
     107           1 :               model.title,
     108             :               textAlign: TextAlign.center,
     109           1 :               style: TextStyle(
     110             :                 fontSize: 24
     111             :               ),
     112             :             ),
     113             :           ),
     114           1 :           Padding(
     115             :             padding: const EdgeInsets.all(8.0),
     116           1 :             child: Text(
     117           1 :               model.description,
     118             :               textAlign: TextAlign.center,
     119           1 :               style: TextStyle(
     120             :                 fontSize: 18
     121             :               ),
     122             :             ),
     123             :           ),
     124           1 :           _buildPositivFeedback(),
     125           1 :           _buildNegativFeedback(),
     126             :         ],
     127             :       ),
     128             :     );
     129             :   }
     130             : 
     131           1 :   Widget _buildNegativFeedback() {
     132           1 :     return Padding(
     133             :       padding: const EdgeInsets.only(top: 16.0),
     134           1 :       child: InkWell(
     135           1 :         key: ValueKey("negativeFeedback"),
     136           1 :         child: Text(
     137             :           "This is not helping",
     138           1 :           style: TextStyle(
     139             :             // color: widget.textColor, fontSize: 10
     140             :           ),
     141             :           textAlign: TextAlign.center,
     142             :         ),
     143             :         // onTap: this.widget.onTrigger,
     144             :       ),
     145             :     );
     146             :   }
     147             : 
     148           1 :   Widget _buildPositivFeedback() {
     149           1 :     return Padding(
     150             :       padding: const EdgeInsets.only(top: 24.0),
     151           1 :       child: InkWell(
     152           1 :         key: ValueKey("positiveFeedback"),
     153           1 :         child: Text(
     154             :           "Ok, thanks !",
     155           1 :           style: TextStyle(
     156             :             // color: widget.textColor,
     157             :             fontSize: 18,
     158             :             decoration: TextDecoration.underline,
     159             :           ),
     160             :           textAlign: TextAlign.center,
     161             :         ),
     162             :         // onTap: this.widget.onTrigger,
     163             :       ),
     164             :     );
     165             :   }
     166             :   
     167             : }
     168             : 
     169             : 
     170             : typedef OnTapElement = void Function(String key);
     171             : 
     172             : class _WidgetElementModelTransformer {
     173             :   
     174           1 :   Widget apply(String key, WidgetElementModel model, OnTapElement onTap) {
     175           1 :     return Positioned(
     176           2 :       left: model.offset.dx,
     177           2 :       top: model.offset.dy,
     178           1 :       child: InkWell(
     179           1 :         key: ValueKey("elementContainer"),
     180           2 :         onTap: () => onTap(key),
     181           1 :         child: Container(
     182           2 :           width: model.rect.width,
     183           2 :           height: model.rect.height,
     184           1 :           decoration: BoxDecoration(
     185           1 :             border: Border.all(
     186           2 :               color: Colors.white.withOpacity(model.selected ? 1 : .5),
     187           1 :               width: model.selected ? 4 : 2,
     188             :             ),
     189             :           ),
     190           1 :           child: Align(
     191             :             alignment: Alignment.bottomRight,
     192           1 :             child: Padding(
     193             :               padding: const EdgeInsets.all(8.0),
     194             :               // child: Text("$key",
     195             :               //   style: TextStyle(color: Colors.white)
     196             :               // ),
     197             :             ),
     198             :           ),
     199             :         ),
     200             :       )
     201             :     );
     202             :   }
     203             :   
     204             : }

Generated by: LCOV version 1.14