dev
dart 171 lines 5.31 KB
Raw
1 part of 'card_customizer_bloc.dart';
2
3 sealed class CardCustomizerState {
4 final int selectedDesignIndex;
5 final int selectedColorIndex;
6 final String accountName;
7 final int accountIndex;
8 final int cardOrder;
9 final bool displaySats;
10 final List<CardDesign> availableDesigns;
11 final List<Gradient> availableColors;
12 final List<CardIconPath> availableIconPaths;
13 final int selectedIconIndex;
14
15 CardCustomizerState(
16 this.selectedDesignIndex,
17 this.selectedColorIndex,
18 this.availableDesigns,
19 this.availableColors,
20 this.accountName,
21 this.accountIndex,
22 this.displaySats,
23 this.cardOrder, {
24 this.availableIconPaths = const [],
25 this.selectedIconIndex = 0,
26 });
27
28 CardDesign get selectedDesign {
29 final gradient = selectedColor;
30 final baseDesign = availableDesigns[selectedDesignIndex];
31
32 CardDesign design;
33 if (CardDesign.preferredColorCombinations.containsKey(gradient)) {
34 design = baseDesign.withGradient(gradient);
35 } else {
36 final specialDesign = availableDesigns.length > 2 ? availableDesigns.last : null;
37 final textColors = specialDesign?.colors ?? baseDesign.colors;
38 design = baseDesign.withGradientAndColorCombination(gradient, textColors);
39 }
40
41 if (design.backgroundType == CardDesignBackgroundTypes.svgIcon &&
42 availableIconPaths.isNotEmpty) {
43 design = design.withIcon(availableIconPaths[selectedIconIndex]);
44 }
45 return design;
46 }
47
48 CardCustomizerState copyWith({
49 int? selectedDesignIndex,
50 int? selectedColorIndex,
51 List<CardDesign>? availableDesigns,
52 List<Gradient>? availableColors,
53 String? accountName,
54 int? accountIndex,
55 int? cardOrder,
56 List<CardIconPath>? availableIconPaths,
57 int? selectedIconIndex,
58 });
59
60 Gradient get selectedColor => availableColors[selectedColorIndex];
61 }
62
63 final class CardCustomizerNotLoaded extends CardCustomizerState {
64 CardCustomizerNotLoaded(
65 super.selectedDesignIndex,
66 super.selectedColorIndex,
67 super.availableDesigns,
68 super.availableColors,
69 super.accountName,
70 super.accountIndex,
71 super.displaySats,
72 super.cardOrder);
73
74 @override
75 CardCustomizerState copyWith(
76 {int? selectedDesignIndex,
77 int? selectedColorIndex,
78 List<CardDesign>? availableDesigns,
79 List<Gradient>? availableColors,
80 String? accountName,
81 int? accountIndex,
82 int? cardOrder,
83 List<CardIconPath>? availableIconPaths,
84 int? selectedIconIndex}) {
85 // this is never gonna be copied. it's near-instantly replaced with initial
86 throw UnimplementedError();
87 }
88 }
89
90 final class CardCustomizerInitial extends CardCustomizerState {
91 CardCustomizerInitial(
92 int selectedDesignIndex,
93 int selectedColorIndex,
94 List<CardDesign> availableDesigns,
95 List<Gradient> availableColors,
96 String accountName,
97 int accountIndex,
98 bool displaySats,
99 int cardOrder, {
100 List<CardIconPath> availableIconPaths = const [],
101 int selectedIconIndex = 0,
102 }) : super(selectedDesignIndex, selectedColorIndex, availableDesigns, availableColors,
103 accountName, accountIndex, displaySats, cardOrder,
104 availableIconPaths: availableIconPaths, selectedIconIndex: selectedIconIndex);
105
106 CardCustomizerInitial copyWith({
107 int? selectedDesignIndex,
108 int? selectedColorIndex,
109 List<CardDesign>? availableDesigns,
110 List<Gradient>? availableColors,
111 String? accountName,
112 int? accountIndex,
113 bool? displaySats,
114 int? cardOrder,
115 List<CardIconPath>? availableIconPaths,
116 int? selectedIconIndex,
117 }) {
118 return CardCustomizerInitial(
119 selectedDesignIndex ?? this.selectedDesignIndex,
120 selectedColorIndex ?? this.selectedColorIndex,
121 availableDesigns ?? this.availableDesigns,
122 availableColors ?? this.availableColors,
123 accountName ?? this.accountName,
124 accountIndex ?? this.accountIndex,
125 displaySats ?? this.displaySats,
126 cardOrder ?? this.cardOrder,
127 availableIconPaths: availableIconPaths ?? this.availableIconPaths,
128 selectedIconIndex: selectedIconIndex ?? this.selectedIconIndex,
129 );
130 }
131 }
132
133 final class CardCustomizerSaved extends CardCustomizerState {
134 CardCustomizerSaved(
135 super.selectedDesignIndex,
136 super.selectedColorIndex,
137 super.availableDesigns,
138 super.availableColors,
139 super.accountName,
140 super.accountIndex,
141 super.displaySats,
142 super.cardOrder,
143 {super.availableIconPaths,
144 super.selectedIconIndex});
145
146 @override
147 CardCustomizerState copyWith(
148 {int? selectedDesignIndex,
149 int? selectedColorIndex,
150 List<CardDesign>? availableDesigns,
151 List<Gradient>? availableColors,
152 String? accountName,
153 int? accountIndex,
154 bool? displaySats,
155 int? cardOrder,
156 List<CardIconPath>? availableIconPaths,
157 int? selectedIconIndex}) {
158 return CardCustomizerSaved(
159 selectedDesignIndex ?? this.selectedDesignIndex,
160 selectedColorIndex ?? this.selectedColorIndex,
161 availableDesigns ?? this.availableDesigns,
162 availableColors ?? this.availableColors,
163 accountName ?? this.accountName,
164 accountIndex ?? this.accountIndex,
165 displaySats ?? this.displaySats,
166 cardOrder ?? this.cardOrder,
167 availableIconPaths: availableIconPaths ?? this.availableIconPaths,
168 selectedIconIndex: selectedIconIndex ?? this.selectedIconIndex,
169 );
170 }
171 }