Line data Source code
1 : import 'package:flutter/material.dart'; 2 : import 'package:mvvm_builder/mvvm_builder.dart'; 3 : import 'package:pal/src/services/editor/finder/finder_service.dart'; 4 : import 'package:pal/src/database/entity/helper/helper_trigger_type.dart'; 5 : import 'package:pal/src/database/entity/helper/helper_type.dart'; 6 : import 'package:pal/src/ui/editor/pages/helper_editor/helper_editor_viewmodel.dart'; 7 : 8 : import 'editor_anchored_helper.dart'; 9 : import 'editor_anchored_helper_viewmodel.dart'; 10 : 11 : // this is the key used in our editor to inject all widgets in 12 : const EDITOR_PARENT_NODE_KEY = "EditorPage"; 13 : 14 : class EditorAnchoredFullscreenPresenter extends Presenter<AnchoredFullscreenHelperViewModel, EditorAnchoredFullscreenHelperView> { 15 : final FinderService finderService; 16 : 17 1 : EditorAnchoredFullscreenPresenter(EditorAnchoredFullscreenHelperView viewInterface, this.finderService) 18 1 : : super( 19 1 : AnchoredFullscreenHelperViewModel( 20 1 : helper: HelperViewModel( 21 : name: 'test', 22 : triggerType: HelperTriggerType.ON_SCREEN_VISIT, 23 : helperType: HelperType.ANCHORED_OVERLAYED_HELPER, 24 : ) 25 : ), viewInterface) { 26 1 : assert(finderService != null, 'A finder service must be provided'); 27 3 : viewModel.userPageElements = Map(); 28 2 : viewModel.title = "My helper title"; 29 2 : viewModel.description = "Lorem ipsum lorem ipsum lorem ipsum"; 30 : } 31 : 32 1 : @override 33 : void afterViewInit() { 34 1 : scanElements(); 35 : } 36 : 37 : // this methods scan elements on the user page we want to add an helper 38 : // this load all elements with their bounds + key 39 1 : Future scanElements() async { 40 3 : var elements = await finderService.scan(); 41 : // var bounds = elementFinder.scan(omitChildsOf: ValueKey(EDITOR_PARENT_NODE_KEY)); 42 4 : viewModel.userPageElements = elements.map((key, value) => 43 4 : new MapEntry(key, new WidgetElementModel(value.bounds, value.offset))); 44 1 : refreshView(); 45 : } 46 : 47 1 : Future onTapElement(String key) async { 48 2 : var previouslySelected = viewModel.selectedAnchor; 49 : if (previouslySelected != null) { 50 2 : previouslySelected.value.selected = false; 51 : } 52 4 : viewModel.userPageElements[key].selected = true; 53 3 : var element = await finderService.searchChildElement(key); 54 5 : viewModel.writeArea = await finderService.getLargestAvailableSpace(element); 55 1 : refreshView(); 56 : } 57 : }