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 FullscreenHelperViewModel extends HelperViewModel {
17 :
18 : // form
19 : double helperOpacity;
20 : ValueNotifier<bool> canValidate;
21 : StreamController<bool> editableTextFieldController;
22 :
23 : // helper properties
24 : LanguageNotifier language;
25 : BoxNotifier bodyBox;
26 : MediaNotifier media;
27 : TextFormFieldNotifier titleField;
28 : TextFormFieldNotifier descriptionField;
29 : TextFormFieldNotifier positivButtonField;
30 : TextFormFieldNotifier negativButtonField;
31 :
32 1 : FullscreenHelperViewModel({
33 : String id,
34 : @required String name,
35 : @required HelperTriggerType triggerType,
36 : @required int priority,
37 : @required HelperTheme helperTheme,
38 : String minVersionCode,
39 : String maxVersionCode,
40 : int versionMaxId,
41 : int languageId,
42 : // For edit mode only
43 : HelperBoxViewModel boxViewModel,
44 : HelperImageViewModel helperImageViewModel,
45 : HelperTextViewModel titleViewModel,
46 : HelperTextViewModel descriptionLabel,
47 : HelperTextViewModel positivButtonLabel,
48 : HelperTextViewModel negativButtonLabel,
49 1 : }) : super(
50 : id: id,
51 : name: name,
52 : triggerType: triggerType,
53 : priority: priority,
54 : minVersionCode: minVersionCode,
55 : maxVersionCode: maxVersionCode,
56 : helperTheme: helperTheme,
57 : helperType: HelperType.HELPER_FULL_SCREEN,
58 : ) {
59 2 : this.language = LanguageNotifier(
60 : id: languageId ?? 1,
61 : );
62 2 : this.bodyBox = BoxNotifier(
63 1 : id: boxViewModel?.id,
64 1 : backgroundColor: boxViewModel?.backgroundColor ?? Colors.blueAccent,
65 : );
66 2 : this.media = MediaNotifier(
67 1 : id: helperImageViewModel?.id,
68 1 : url: helperImageViewModel?.url,
69 : );
70 2 : this.titleField = TextFormFieldNotifier(
71 1 : id: titleViewModel?.id,
72 1 : fontColor: titleViewModel?.fontColor ?? Colors.white,
73 2 : fontSize: titleViewModel?.fontSize?.toInt() ?? 60,
74 1 : fontFamily: titleViewModel?.fontFamily,
75 1 : text: titleViewModel?.text ?? '',
76 2 : fontWeight: FontWeightMapper.toFontKey(titleViewModel?.fontWeight),
77 : );
78 2 : this.descriptionField = TextFormFieldNotifier(
79 1 : id: descriptionLabel?.id,
80 1 : fontColor: descriptionLabel?.fontColor ?? Colors.white,
81 2 : fontSize: descriptionLabel?.fontSize?.toInt() ?? 14,
82 1 : text: descriptionLabel?.text ?? 'Describe me',
83 2 : fontWeight: FontWeightMapper.toFontKey(descriptionLabel?.fontWeight),
84 1 : fontFamily: descriptionLabel?.fontFamily,
85 : );
86 2 : this.positivButtonField = TextFormFieldNotifier(
87 0 : id: positivButtonLabel?.id,
88 0 : fontColor: positivButtonLabel?.fontColor ?? Colors.white,
89 0 : fontSize: positivButtonLabel?.fontSize?.toInt() ?? 23,
90 0 : text: positivButtonLabel?.text ?? 'Ok, thanks !',
91 1 : fontWeight: FontWeightMapper.toFontKey(
92 0 : positivButtonLabel?.fontWeight ?? FontWeight.bold,
93 : ),
94 0 : fontFamily: positivButtonLabel?.fontFamily,
95 : );
96 2 : this.negativButtonField = TextFormFieldNotifier(
97 0 : id: negativButtonLabel?.id,
98 0 : text: negativButtonLabel?.text ?? 'This is not helping',
99 1 : fontWeight: FontWeightMapper.toFontKey(
100 0 : negativButtonLabel?.fontWeight ?? FontWeight.bold),
101 0 : fontColor: negativButtonLabel?.fontColor ?? Colors.white,
102 0 : fontSize: negativButtonLabel?.fontSize?.toInt() ?? 13,
103 0 : fontFamily: negativButtonLabel?.fontFamily,
104 : );
105 : }
106 :
107 1 : factory FullscreenHelperViewModel.fromHelperViewModel(HelperViewModel model) {
108 1 : final fullscreenHelper = FullscreenHelperViewModel(
109 1 : id: model.id,
110 1 : name: model.name,
111 1 : triggerType: model.triggerType,
112 1 : priority: model.priority,
113 1 : maxVersionCode: model.maxVersionCode,
114 1 : minVersionCode: model.minVersionCode,
115 1 : helperTheme: model.helperTheme,
116 : );
117 :
118 1 : if (model is FullscreenHelperViewModel) {
119 0 : fullscreenHelper.bodyBox = model?.bodyBox;
120 0 : fullscreenHelper.language = model?.language;
121 0 : fullscreenHelper.titleField = model?.titleField;
122 0 : fullscreenHelper.descriptionField = model?.descriptionField;
123 0 : fullscreenHelper.positivButtonField = model?.positivButtonField;
124 0 : fullscreenHelper.negativButtonField = model?.negativButtonField;
125 0 : fullscreenHelper.media = model?.media;
126 : }
127 :
128 : return fullscreenHelper;
129 : }
130 :
131 1 : factory FullscreenHelperViewModel.fromHelperEntity(HelperEntity helperEntity) =>
132 1 : FullscreenHelperViewModel(
133 1 : id: helperEntity?.id,
134 1 : name: helperEntity?.name,
135 1 : triggerType: helperEntity?.triggerType,
136 1 : priority: helperEntity?.priority,
137 1 : minVersionCode: helperEntity?.versionMin,
138 1 : maxVersionCode: helperEntity?.versionMax,
139 : helperTheme: null,
140 1 : boxViewModel: HelperSharedFactory.parseBoxBackground(
141 : SimpleHelperKeys.BACKGROUND_KEY,
142 1 : helperEntity?.helperBoxes,
143 : ),
144 1 : titleViewModel: HelperSharedFactory.parseTextLabel(
145 : FullscreenHelperKeys.TITLE_KEY,
146 1 : helperEntity?.helperTexts,
147 : ),
148 1 : descriptionLabel: HelperSharedFactory.parseTextLabel(
149 : FullscreenHelperKeys.DESCRIPTION_KEY,
150 1 : helperEntity?.helperTexts,
151 : ),
152 1 : positivButtonLabel: HelperSharedFactory.parseTextLabel(
153 : FullscreenHelperKeys.POSITIV_KEY,
154 1 : helperEntity?.helperTexts,
155 : ),
156 1 : negativButtonLabel: HelperSharedFactory.parseTextLabel(
157 : FullscreenHelperKeys.NEGATIV_KEY,
158 1 : helperEntity?.helperTexts,
159 : ),
160 1 : helperImageViewModel: HelperSharedFactory.parseImageUrl(
161 : FullscreenHelperKeys.IMAGE_KEY,
162 1 : helperEntity?.helperImages,
163 : ),
164 : );
165 : }
|