@@ -39,6 +39,25 @@ final class GameDialog with GameDialogMappable {
3939 ),
4040 );
4141
42+ GameDialog checkbox (String label, {String ? id, bool initialValue = false }) =>
43+ copyWith.components.add (
44+ GameDialogCheckboxComponent (label, id: id, initialValue: initialValue),
45+ );
46+
47+ GameDialog dropdown (
48+ String label,
49+ List <GameDialogDropdownOption > options, {
50+ String ? id,
51+ String ? initialValue,
52+ }) => copyWith.components.add (
53+ GameDialogDropdownComponent (
54+ label,
55+ options,
56+ id: id,
57+ initialValue: initialValue,
58+ ),
59+ );
60+
4261 GameDialog action (GameDialogButton action) =>
4362 copyWith (actions: [...(actions ?? []), action]);
4463
@@ -53,6 +72,13 @@ final class GameDialog with GameDialogMappable {
5372 return e.label.length <= 50 &&
5473 (e.id? .length ?? 0 ) <= 100 &&
5574 (e.placeholder? .length ?? 0 ) <= 50 ;
75+ case GameDialogCheckboxComponent ():
76+ return e.label.length <= 50 && (e.id? .length ?? 0 ) <= 100 ;
77+ case GameDialogDropdownComponent ():
78+ return e.label.length <= 50 &&
79+ (e.id? .length ?? 0 ) <= 100 &&
80+ e.options.length <= 20 &&
81+ e.options.every ((o) => o.isValid ());
5682 }
5783 }) &&
5884 (actions ?? []).every (
@@ -91,6 +117,48 @@ final class GameDialogTextFieldComponent extends GameDialogComponent
91117 String get idOrLabel => id ?? label;
92118}
93119
120+ @MappableClass ()
121+ final class GameDialogCheckboxComponent extends GameDialogComponent
122+ with GameDialogCheckboxComponentMappable {
123+ final String label;
124+ final String ? id;
125+ final bool initialValue;
126+
127+ GameDialogCheckboxComponent (this .label, {this .id, this .initialValue = false });
128+
129+ String get idOrLabel => id ?? label;
130+ }
131+
132+ @MappableClass ()
133+ final class GameDialogDropdownComponent extends GameDialogComponent
134+ with GameDialogDropdownComponentMappable {
135+ final String label;
136+ final String ? id;
137+ final List <GameDialogDropdownOption > options;
138+ final String ? initialValue;
139+
140+ GameDialogDropdownComponent (
141+ this .label,
142+ this .options, {
143+ this .id,
144+ this .initialValue,
145+ });
146+
147+ String get idOrLabel => id ?? label;
148+ }
149+
150+ @MappableClass ()
151+ final class GameDialogDropdownOption with GameDialogDropdownOptionMappable {
152+ final String ? label;
153+ final String value;
154+
155+ GameDialogDropdownOption ({this .label, required this .value});
156+
157+ bool isValid () => (label? .length ?? 0 ) <= 50 && value.length <= 50 ;
158+
159+ String get idOrLabel => label ?? value;
160+ }
161+
94162@MappableClass ()
95163final class GameDialogButton with GameDialogButtonMappable {
96164 final String label;
@@ -137,3 +205,33 @@ final class GameDialogTextFieldValue extends GameDialogComponentValue
137205 @override
138206 int getAsInt () => int .tryParse (value) ?? 0 ;
139207}
208+
209+ @MappableClass ()
210+ final class GameDialogCheckboxValue extends GameDialogComponentValue
211+ with GameDialogCheckboxValueMappable {
212+ final bool value;
213+
214+ GameDialogCheckboxValue ({required this .value, required super .component});
215+
216+ @override
217+ String getAsString () => value.toString ();
218+ @override
219+ bool getAsBool () => value;
220+ @override
221+ int getAsInt () => value ? 1 : 0 ;
222+ }
223+
224+ @MappableClass ()
225+ final class GameDialogDropdownValue extends GameDialogComponentValue
226+ with GameDialogDropdownValueMappable {
227+ final String value;
228+
229+ GameDialogDropdownValue ({required this .value, required super .component});
230+
231+ @override
232+ String getAsString () => value;
233+ @override
234+ bool getAsBool () => value.isNotEmpty;
235+ @override
236+ int getAsInt () => int .tryParse (value) ?? 0 ;
237+ }
0 commit comments