Line data Source code
1 : import 'package:flutter/material.dart'; 2 : import 'package:mvvm_builder/mvvm_builder.dart'; 3 : import 'package:pal/src/database/entity/helper/helper_trigger_type.dart'; 4 : import 'package:pal/src/pal_navigator_observer.dart'; 5 : import 'package:pal/src/services/package_version.dart'; 6 : import 'package:pal/src/ui/editor/pages/create_helper/create_helper.dart'; 7 : import 'package:pal/src/ui/editor/pages/create_helper/create_helper_viewmodel.dart'; 8 : import 'package:pal/src/ui/editor/pages/create_helper/steps/create_helper_infos/create_helper_infos_step_model.dart'; 9 : import 'package:pal/src/ui/editor/pages/create_helper/steps/create_helper_theme/create_helper_theme_step_model.dart'; 10 : import 'package:pal/src/ui/editor/pages/create_helper/steps/create_helper_type/create_helper_type_step_model.dart'; 11 : 12 : class CreateHelperPresenter extends Presenter<CreateHelperModel, CreateHelperView> { 13 : 14 : PackageVersionReader packageVersionReader; 15 : final PalRouteObserver routeObserver; 16 : 17 1 : CreateHelperPresenter( 18 : CreateHelperView viewInterface, { 19 : @required this.routeObserver, 20 : @required this.packageVersionReader, 21 2 : }) : super(CreateHelperModel(), viewInterface); 22 : 23 : @override 24 1 : Future onInit() async { 25 3 : this.viewModel.nestedNavigationKey = GlobalKey<NavigatorState>(); 26 3 : this.viewModel.step = ValueNotifier<int>(0); 27 : 28 2 : this.viewModel.isFormValid = false; 29 3 : this.viewModel.stepsTitle = [ 30 : 'Setup your helper', 31 : 'Choose your helper type', 32 : 'Choose a theme', 33 : ]; 34 : 35 : // Setup steps 36 1 : this.setupInfosStep(); 37 1 : this.setupTypeStep(); 38 1 : this.setupThemeStep(); 39 : } 40 : 41 1 : setupInfosStep() async { 42 3 : this.viewModel.infosForm = GlobalKey<FormState>(); 43 : 44 3 : this.viewModel.helperNameController = TextEditingController(); 45 3 : this.viewModel.minVersionController = TextEditingController(); 46 : 47 2 : this.viewModel.isAppVersionLoading = false; 48 : 49 : // Trigger type dropdown 50 3 : this.viewModel.triggerTypes = []; 51 2 : HelperTriggerType.values.forEach((HelperTriggerType type) { 52 3 : this.viewModel.triggerTypes.add( 53 1 : HelperTriggerTypeDisplay( 54 1 : key: helperTriggerTypeToString(type), 55 1 : description: getHelperTriggerTypeDescription(type), 56 : ), 57 : ); 58 : }); 59 2 : this.viewModel.selectedTriggerType = 60 4 : this.viewModel.triggerTypes?.first?.key; 61 : 62 1 : readAppVersion(); 63 : } 64 : 65 1 : readAppVersion() async { 66 : // Load app version 67 2 : this.viewModel.isAppVersionLoading = true; 68 1 : this.refreshView(); 69 3 : await this.packageVersionReader.init(); 70 4 : this.viewModel.appVersion = this.packageVersionReader.version; 71 5 : this.viewModel.minVersionController.text = this.viewModel.appVersion; 72 2 : this.viewModel.isAppVersionLoading = false; 73 1 : this.refreshView(); 74 : } 75 : 76 1 : setupTypeStep() { 77 2 : this.viewModel.selectedHelperType = null; 78 3 : for (var helperType in CreateHelperThemeStepModel.cards.entries) { 79 2 : for (var card in helperType.value) { 80 1 : card.isSelected = false; 81 : } 82 : } 83 : } 84 : 85 1 : setupThemeStep() { 86 2 : this.viewModel.selectedHelperTheme = null; 87 2 : for (var card in CreateHelperTypesStepModel.cards) { 88 1 : card.isSelected = false; 89 : } 90 : } 91 : 92 0 : incrementStep() async { 93 0 : if (this.viewModel.step.value >= this.viewModel.stepsTitle.length - 1) { 94 0 : var currentPageRoute = await this.routeObserver.routeSettings.first; 95 0 : this.viewInterface.launchHelperEditor(currentPageRoute.name, viewModel); 96 : return; 97 : } 98 0 : this.viewModel.step.value++; 99 0 : this.viewInterface.changeStep( 100 0 : this.viewModel.nestedNavigationKey, 101 0 : this.viewModel.step.value, 102 : ); 103 0 : this.checkValidStep(); 104 0 : this.refreshView(); 105 : } 106 : 107 0 : decrementStep() { 108 0 : if (this.viewModel.step.value <= 0) { 109 : return; 110 : } 111 : 112 0 : this.viewModel.step.value--; 113 0 : this.checkValidStep(); 114 0 : this.refreshView(); 115 : } 116 : 117 0 : void checkValidStep() { 118 0 : switch (this.viewModel.step.value) { 119 0 : case 0: 120 0 : this.viewModel.isFormValid = 121 0 : this.viewModel.infosForm.currentState.validate(); 122 : break; 123 0 : case 1: 124 0 : this.viewModel.isFormValid = this.viewModel.selectedHelperType != null; 125 : break; 126 0 : case 2: 127 0 : this.viewModel.isFormValid = this.viewModel.selectedHelperTheme != null; 128 : break; 129 : default: 130 : } 131 : } 132 : }