@@ -13,6 +13,49 @@ enum BuildMode {
1313 debug
1414}
1515
16+ /// Build mode extension
17+ extension BuildModeX on BuildMode {
18+ /// Is release build mode
19+ bool get isRelease => this == BuildMode .release;
20+
21+ /// Is profile build mode
22+ bool get isProfile => this == BuildMode .profile;
23+
24+ /// Is debug build mode
25+ bool get isDebug => this == BuildMode .debug;
26+
27+ /// Run callback on specific build mode
28+ BuildModeResult when < BuildModeResult extends Object ? > ({
29+ required BuildModeResult Function () release,
30+ required BuildModeResult Function () profile,
31+ required BuildModeResult Function () debug,
32+ }) {
33+ switch (this ) {
34+ case BuildMode .profile:
35+ return profile ();
36+ case BuildMode .debug:
37+ return debug ();
38+ case BuildMode .release:
39+ default :
40+ return release ();
41+ }
42+ }
43+
44+ /// Run callback on specific build mode,
45+ /// if not specified run orElse
46+ BuildModeResult maybeWhen <BuildModeResult extends Object ?>({
47+ required BuildModeResult Function () orElse,
48+ BuildModeResult Function ()? release,
49+ BuildModeResult Function ()? profile,
50+ BuildModeResult Function ()? debug,
51+ }) =>
52+ when < BuildModeResult > (
53+ debug: debug ?? orElse,
54+ profile: profile ?? orElse,
55+ release: release ?? orElse,
56+ );
57+ }
58+
1659/// Host platform type
1760/// + io (vm, desktops, mobile, console)
1861/// + web (html, js, browser)
@@ -24,6 +67,22 @@ enum HostPlatformType {
2467 web,
2568}
2669
70+ /// Host platform extension
71+ extension HostPlatformTypeX on HostPlatformType {
72+ /// Is I/O (vm, desktops, mobile, console)
73+ bool get isIO => this == HostPlatformType .io;
74+
75+ /// Is Web (html, js, browser)
76+ bool get isWeb => this == HostPlatformType .web;
77+
78+ /// Run callback on specific host platform
79+ HostPlatformTypeResult when < HostPlatformTypeResult extends Object ? > ({
80+ required HostPlatformTypeResult Function () io,
81+ required HostPlatformTypeResult Function () web,
82+ }) =>
83+ this == HostPlatformType .web ? web () : io ();
84+ }
85+
2786/// Operation system
2887/// + Fuchsia
2988/// + Linux
@@ -54,3 +113,77 @@ enum OperatingSystem {
54113 /// Fuchsia
55114 fuchsia,
56115}
116+
117+ /// Operation system extension
118+ extension OperatingSystemX on OperatingSystem {
119+ /// Android
120+ bool get isAndroid => this == OperatingSystem .android;
121+
122+ /// Fuchsia
123+ bool get isFuchsia => this == OperatingSystem .fuchsia;
124+
125+ /// iOS
126+ bool get isIOS => this == OperatingSystem .iOS;
127+
128+ /// Linux
129+ bool get isLinux => this == OperatingSystem .linux;
130+
131+ /// MacOS
132+ bool get isMacOS => this == OperatingSystem .macOS;
133+
134+ /// Windows
135+ bool get isWindows => this == OperatingSystem .windows;
136+
137+ /// Unknown
138+ bool get isUnknown => this == OperatingSystem .unknown;
139+
140+ /// Run callback on specific operation system
141+ OperatingSystemResult when < OperatingSystemResult extends Object ? > ({
142+ required OperatingSystemResult Function () android,
143+ required OperatingSystemResult Function () fuchsia,
144+ required OperatingSystemResult Function () iOS,
145+ required OperatingSystemResult Function () linux,
146+ required OperatingSystemResult Function () macOS,
147+ required OperatingSystemResult Function () windows,
148+ required OperatingSystemResult Function () unknown,
149+ }) {
150+ switch (this ) {
151+ case OperatingSystem .windows:
152+ return windows ();
153+ case OperatingSystem .linux:
154+ return linux ();
155+ case OperatingSystem .macOS:
156+ return macOS ();
157+ case OperatingSystem .iOS:
158+ return iOS ();
159+ case OperatingSystem .android:
160+ return android ();
161+ case OperatingSystem .fuchsia:
162+ return fuchsia ();
163+ case OperatingSystem .unknown:
164+ default :
165+ return unknown ();
166+ }
167+ }
168+
169+ /// Run callback on specific operation system,
170+ /// if not specified run orElse
171+ OperatingSystemResult maybeWhen <OperatingSystemResult extends Object ?>({
172+ required OperatingSystemResult Function () orElse,
173+ OperatingSystemResult Function ()? android,
174+ OperatingSystemResult Function ()? fuchsia,
175+ OperatingSystemResult Function ()? iOS,
176+ OperatingSystemResult Function ()? linux,
177+ OperatingSystemResult Function ()? macOS,
178+ OperatingSystemResult Function ()? windows,
179+ }) =>
180+ when < OperatingSystemResult > (
181+ android: android ?? orElse,
182+ fuchsia: fuchsia ?? orElse,
183+ iOS: iOS ?? orElse,
184+ linux: linux ?? orElse,
185+ macOS: macOS ?? orElse,
186+ windows: windows ?? orElse,
187+ unknown: orElse,
188+ );
189+ }
0 commit comments