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/database/entity/helper/helper_entity.dart';
6 : import 'package:pal/src/database/entity/helper/helper_theme.dart';
7 : import 'package:pal/src/database/entity/helper/helper_trigger_type.dart';
8 : import 'package:pal/src/database/entity/helper/helper_type.dart';
9 : import 'package:pal/src/ui/editor/pages/helper_editor/font_editor/pickers/font_weight_picker/font_weight_picker_loader.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/helper_editor_viewmodel.dart';
12 : import 'package:pal/src/ui/shared/helper_shared_factory.dart';
13 : import 'package:pal/src/ui/shared/helper_shared_viewmodels.dart';
14 :
15 :
16 : class UpdateHelperViewModel extends HelperViewModel {
17 :
18 : // form validation boolean
19 : ValueNotifier<bool> canValidate;
20 : bool isKeyboardVisible;
21 :
22 : LanguageNotifier language;
23 : BoxNotifier bodyBox;
24 : Map<String, TextFormFieldNotifier> changelogsFields;
25 : MediaNotifier media;
26 : TextFormFieldNotifier thanksButton;
27 : TextFormFieldNotifier titleField;
28 :
29 :
30 1 : UpdateHelperViewModel({
31 : String id,
32 : @required String name,
33 : @required HelperTriggerType triggerType,
34 : @required int priority,
35 : @required HelperTheme helperTheme,
36 : String minVersionCode,
37 : String maxVersionCode,
38 : int versionMaxId,
39 : int languageId,
40 : HelperBoxViewModel helperBoxViewModel,
41 : Map<String, TextFormFieldNotifier> changelogsLabels,
42 : HelperImageViewModel helperImageViewModel,
43 : HelperTextViewModel titleLabel,
44 : HelperTextViewModel positivButtonLabel,
45 1 : }) : super(
46 : id: id,
47 : name: name,
48 : triggerType: triggerType,
49 : priority: priority,
50 : minVersionCode: minVersionCode,
51 : maxVersionCode: maxVersionCode,
52 : helperType: HelperType.UPDATE_HELPER,
53 : helperTheme: helperTheme,
54 : ) {
55 2 : this.language = LanguageNotifier(
56 : id: languageId ?? 1,
57 : );
58 2 : this.bodyBox = BoxNotifier(
59 1 : id: helperBoxViewModel?.id,
60 1 : backgroundColor: helperBoxViewModel?.backgroundColor ?? Colors.blueAccent,
61 : );
62 2 : this.changelogsFields = changelogsLabels ?? {};
63 2 : this.media = MediaNotifier(
64 1 : id: helperImageViewModel?.id,
65 1 : url: helperImageViewModel?.url,
66 : );
67 2 : this.thanksButton = TextFormFieldNotifier(
68 : // backgroundColor: Colors.black87,
69 0 : id: positivButtonLabel?.id,
70 0 : fontColor: positivButtonLabel?.fontColor ?? Colors.white,
71 0 : fontSize: positivButtonLabel?.fontSize?.toInt() ?? 22,
72 0 : text: positivButtonLabel?.text ?? 'Thank you!',
73 1 : fontWeight: FontWeightMapper.toFontKey(
74 0 : positivButtonLabel?.fontWeight ?? FontWeight.normal),
75 0 : fontFamily: positivButtonLabel?.fontFamily,
76 : );
77 2 : this.titleField = TextFormFieldNotifier(
78 1 : id: titleLabel?.id,
79 1 : fontColor: titleLabel?.fontColor ?? Colors.white,
80 2 : fontSize: titleLabel?.fontSize?.toInt() ?? 36,
81 1 : text: titleLabel?.text ?? '',
82 2 : fontWeight: FontWeightMapper.toFontKey(titleLabel?.fontWeight),
83 1 : fontFamily: titleLabel?.fontFamily,
84 : hintText: 'Enter your title here...',
85 : );
86 : }
87 :
88 1 : factory UpdateHelperViewModel.fromHelperViewModel(HelperViewModel model) {
89 1 : final updateHelper = UpdateHelperViewModel(
90 1 : id: model.id,
91 1 : name: model.name,
92 1 : triggerType: model.triggerType,
93 1 : priority: model.priority,
94 1 : minVersionCode: model.minVersionCode,
95 1 : maxVersionCode: model.maxVersionCode,
96 1 : helperTheme: model.helperTheme,
97 : );
98 :
99 1 : if (model is UpdateHelperViewModel) {
100 0 : updateHelper.bodyBox = model?.bodyBox;
101 0 : updateHelper.language = model?.language;
102 0 : updateHelper.titleField = model?.titleField;
103 0 : updateHelper.thanksButton = model?.thanksButton;
104 0 : updateHelper.changelogsFields = model?.changelogsFields;
105 0 : updateHelper.media = model?.media;
106 : }
107 :
108 : return updateHelper;
109 : }
110 :
111 1 : factory UpdateHelperViewModel.fromHelperEntity(HelperEntity helperEntity) {
112 1 : Map<String, TextFormFieldNotifier> changelogsMap = {};
113 1 : List<HelperTextViewModel> changelogs = HelperSharedFactory.parseTextsLabel(
114 : UpdatescreenHelperKeys.LINES_KEY,
115 1 : helperEntity?.helperTexts,
116 : );
117 :
118 2 : if (changelogs != null && changelogs.length > 0) {
119 2 : for (var changelog in changelogs) {
120 1 : changelogsMap.putIfAbsent(
121 3 : 'template_${changelog.id.toString()}',
122 2 : () => TextFormFieldNotifier(
123 1 : id: changelog?.id,
124 1 : text: changelog?.text ?? '',
125 1 : fontColor: changelog?.fontColor ?? Colors.white,
126 2 : fontSize: changelog?.fontSize?.toInt() ?? 18,
127 1 : fontFamily: changelog?.fontFamily,
128 2 : fontWeight: FontWeightMapper.toFontKey(changelog?.fontWeight),
129 : ),
130 : );
131 : }
132 : }
133 1 : return UpdateHelperViewModel(
134 1 : id: helperEntity?.id,
135 1 : name: helperEntity?.name,
136 1 : triggerType: helperEntity?.triggerType,
137 1 : priority: helperEntity?.priority,
138 1 : minVersionCode: helperEntity?.versionMin,
139 1 : maxVersionCode: helperEntity?.versionMax,
140 : helperTheme: null,
141 1 : helperBoxViewModel: HelperSharedFactory.parseBoxBackground(
142 : SimpleHelperKeys.BACKGROUND_KEY,
143 1 : helperEntity?.helperBoxes,
144 : ),
145 1 : titleLabel: HelperSharedFactory.parseTextLabel(
146 : UpdatescreenHelperKeys.TITLE_KEY,
147 1 : helperEntity?.helperTexts,
148 : ),
149 1 : positivButtonLabel: HelperSharedFactory.parseTextLabel(
150 : UpdatescreenHelperKeys.POSITIV_KEY,
151 1 : helperEntity?.helperTexts,
152 : ),
153 1 : helperImageViewModel: HelperSharedFactory.parseImageUrl(
154 : UpdatescreenHelperKeys.IMAGE_KEY,
155 1 : helperEntity?.helperImages,
156 : ),
157 : changelogsLabels: changelogsMap,
158 : // TODO: Add changelog edit
159 : );
160 : }
161 :
162 1 : String addChangelog() {
163 3 : String textFieldId = changelogsFields.length.toString();
164 2 : this.changelogsFields.putIfAbsent(
165 : textFieldId,
166 2 : () => TextFormFieldNotifier(
167 : text: '',
168 : fontSize: 18,
169 : fontColor: Colors.white
170 : ),
171 : );
172 : return textFieldId;
173 : }
174 : }
|