Line data Source code
1 : import 'dart:async'; 2 : 3 : import 'package:flutter/material.dart'; 4 : import 'package:mvvm_builder/mvvm_builder.dart'; 5 : import 'package:pal/src/services/editor/helper/helper_editor_models.dart'; 6 : import 'package:pal/src/services/editor/helper/helper_editor_service.dart'; 7 : import 'package:pal/src/ui/editor/pages/helper_editor/font_editor/font_editor_viewmodel.dart'; 8 : import 'package:pal/src/ui/editor/pages/helper_editor/helper_editor.dart'; 9 : import 'package:pal/src/ui/editor/pages/helper_editor/helper_editor_factory.dart'; 10 : import 'package:pal/src/ui/editor/pages/helper_editor/helper_editor_notifiers.dart'; 11 : import 'package:pal/src/ui/editor/pages/helper_editor/widgets/editor_sending_overlay.dart'; 12 : 13 : import 'editor_simple_helper.dart'; 14 : import 'editor_simple_helper_viewmodel.dart'; 15 : 16 : class EditorSimpleHelperPresenter extends Presenter<SimpleHelperViewModel, EditorSimpleHelperView>{ 17 : 18 : final EditorHelperService editorHelperService; 19 : 20 : final HelperEditorPageArguments parameters; 21 : 22 : final StreamController<bool> editableTextFieldController; 23 : 24 1 : EditorSimpleHelperPresenter( 25 : EditorSimpleHelperView viewInterface, 26 : SimpleHelperViewModel simpleHelperViewModel, 27 : this.editorHelperService, 28 : this.parameters 29 1 : ) : editableTextFieldController = StreamController<bool>.broadcast(), 30 1 : super(simpleHelperViewModel, viewInterface) { 31 3 : viewModel.canValidate = new ValueNotifier(false); 32 : } 33 : 34 1 : @override 35 : void onInit() { 36 1 : super.onInit(); 37 : } 38 : 39 : @override 40 1 : Future onDestroy() async { 41 1 : super.onDestroy(); 42 2 : editableTextFieldController.close(); 43 : // fixme => mvvm_builder add afterDestroy method 44 : // viewModel.canValidate.dispose(); 45 : // viewModel.canValidate = null; 46 : } 47 : 48 1 : Future onValidate() async { 49 1 : ValueNotifier<SendingStatus> status = new ValueNotifier(SendingStatus.SENDING); 50 4 : final config = CreateHelperConfig.from(parameters.pageId, viewModel); 51 : try { 52 3 : await viewInterface.showLoadingScreen(status); 53 3 : await Future.delayed(Duration(seconds: 1)); 54 3 : await editorHelperService.saveSimpleHelper( 55 2 : EditorEntityFactory.buildSimpleArgs(config, viewModel)); 56 1 : status.value = SendingStatus.SENT; 57 : } catch(error) { 58 2 : print("error: $error"); 59 1 : status.value = SendingStatus.ERROR; 60 : } finally { 61 3 : await Future.delayed(Duration(seconds: 2)); 62 2 : viewInterface.closeLoadingScreen(); 63 3 : await Future.delayed(Duration(milliseconds: 100)); 64 1 : status.dispose(); 65 2 : viewInterface.closeEditor(); 66 : } 67 : } 68 : 69 1 : void onCancel() { 70 2 : viewInterface.closeEditor(); 71 : } 72 : 73 0 : onOutsideTap() => this.editableTextFieldController.add(true); 74 : 75 1 : onDetailsFieldChanged(String id, String newValue) 76 3 : => _onTextChanged(viewModel.detailsField, newValue); 77 : 78 0 : onDetailsTextStyleChanged(String id, TextStyle newTextStyle, FontKeys fontKeys) 79 0 : => _onStyleChanged(viewModel.detailsField, newTextStyle, fontKeys); 80 : 81 0 : String validateDetailsTextField(String currentValue) { 82 0 : if (currentValue.length <= 0) { 83 : return 'Please enter some text'; 84 : } 85 0 : if (currentValue.length > 45) { 86 : return 'Maximum 45 characters'; 87 : } 88 : return null; 89 : } 90 : 91 0 : onChangeColorRequest() => viewInterface.showColorPickerDialog(viewModel, this.updateBackgroundColor); 92 : 93 0 : updateBackgroundColor(Color aColor) { 94 0 : viewModel.bodyBox.backgroundColor.value = aColor; 95 0 : this.refreshView(); 96 : } 97 : 98 : // ---------------------------------- 99 : // PRIVATES 100 : // ---------------------------------- 101 : 102 1 : _onTextChanged(TextFormFieldNotifier textNotifier, String newValue) { 103 2 : textNotifier.text.value = newValue; 104 2 : if(viewModel.canValidate != null) { 105 4 : viewModel.canValidate.value = isValid(); 106 : } 107 : } 108 : 109 0 : _onStyleChanged(TextFormFieldNotifier textNotifier, TextStyle newTextStyle, FontKeys fontKeys) { 110 0 : textNotifier?.fontColor?.value = newTextStyle?.color; 111 0 : textNotifier?.fontSize?.value = newTextStyle?.fontSize?.toInt(); 112 : if (fontKeys != null) { 113 0 : textNotifier?.fontWeight?.value = fontKeys.fontWeightNameKey; 114 0 : textNotifier?.fontFamily?.value = fontKeys.fontFamilyNameKey; 115 : } 116 : } 117 : 118 6 : bool isValid() => viewModel.detailsField.text.value.isNotEmpty; 119 : 120 : }