Skip to content
This repository was archived by the owner on May 14, 2023. It is now read-only.

Commit 0a4cecd

Browse files
authored
[adaptive_breakpoints] Refactoring (#30)
* Refactoring of enum to a class * refactor: remove unnecessary consts
1 parent 6ae4baf commit 0a4cecd

File tree

3 files changed

+82
-103
lines changed

3 files changed

+82
-103
lines changed

adaptive_breakpoints/CHANGELOG.md

+4
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
# [0.1.0] - August 9, 2021
2+
3+
**BREAKING CHANGE:** Big refactoring. Changes enums for classes
4+
15
# [0.0.5] - July 14, 2021
26

37
Adopt `flutter_lints` and `dart format`.

adaptive_breakpoints/lib/src/adaptive_breakpoints.dart

+77-102
Original file line numberDiff line numberDiff line change
@@ -13,108 +13,83 @@ import 'package:flutter/material.dart';
1313
/// Extra large represents large computer screens.
1414
///
1515
/// https://material.io/design/layout/responsive-layout-grid.html#breakpoints
16-
enum AdaptiveWindowType {
17-
xsmall,
18-
small,
19-
medium,
20-
large,
21-
xlarge,
22-
}
16+
class AdaptiveWindowType {
17+
const AdaptiveWindowType._({
18+
required this.name,
19+
required this.relativeSize,
20+
required this.widthRangeValues,
21+
required this.heightLandscapeRangeValues,
22+
required this.heightPortraitRangeValues,
23+
});
2324

24-
/// Used to set custom comparison operators for the [AdaptiveWindowType] enum.
25-
final Map<AdaptiveWindowType, int> _operatorMap = {
26-
AdaptiveWindowType.xsmall: 0,
27-
AdaptiveWindowType.small: 1,
28-
AdaptiveWindowType.medium: 2,
29-
AdaptiveWindowType.large: 3,
30-
AdaptiveWindowType.xlarge: 4,
31-
};
25+
/// Name based on the [AdaptiveWindowType].
26+
///
27+
/// Can be: xsmall, small, medium, large or xlarge
28+
final String name;
3229

33-
int _relativeSize(AdaptiveWindowType adaptiveWindowType) {
34-
return _operatorMap[adaptiveWindowType]!;
35-
}
30+
/// Used to set custom comparison operators for the [AdaptiveWindowType] enum.
31+
final int relativeSize;
3632

37-
/// This extension lets you access variables associated with each window type.
38-
extension AdaptiveWindowTypeExtension on AdaptiveWindowType {
39-
String get name {
40-
switch (this) {
41-
case AdaptiveWindowType.xsmall:
42-
return 'xsmall';
43-
case AdaptiveWindowType.small:
44-
return 'small';
45-
case AdaptiveWindowType.medium:
46-
return 'medium';
47-
case AdaptiveWindowType.large:
48-
return 'large';
49-
case AdaptiveWindowType.xlarge:
50-
return 'xlarge';
51-
default:
52-
throw AssertionError('Unsupported AdaptiveWindowType');
53-
}
54-
}
33+
/// Valid range of width for this window type.
34+
final RangeValues widthRangeValues;
5535

56-
RangeValues get widthRangeValues {
57-
switch (this) {
58-
case AdaptiveWindowType.xsmall:
59-
return const RangeValues(0, 599);
60-
case AdaptiveWindowType.small:
61-
return const RangeValues(600, 1023);
62-
case AdaptiveWindowType.medium:
63-
return const RangeValues(1024, 1439);
64-
case AdaptiveWindowType.large:
65-
return const RangeValues(1440, 1919);
66-
case AdaptiveWindowType.xlarge:
67-
return const RangeValues(1920, double.infinity);
68-
default:
69-
throw AssertionError('Unsupported AdaptiveWindowType');
70-
}
71-
}
36+
/// Valid range of height for this window type on landscape mode.
37+
final RangeValues heightLandscapeRangeValues;
7238

73-
RangeValues get heightLandscapeRangeValues {
74-
switch (this) {
75-
case AdaptiveWindowType.xsmall:
76-
return const RangeValues(0, 359);
77-
case AdaptiveWindowType.small:
78-
return const RangeValues(360, 719);
79-
case AdaptiveWindowType.medium:
80-
return const RangeValues(720, 959);
81-
case AdaptiveWindowType.large:
82-
return const RangeValues(960, 1279);
83-
case AdaptiveWindowType.xlarge:
84-
return const RangeValues(1280, double.infinity);
85-
default:
86-
throw AssertionError('Unsupported AdaptiveWindowType');
87-
}
88-
}
39+
/// Valid range of height for this window type on portrait mode.
40+
final RangeValues heightPortraitRangeValues;
8941

90-
RangeValues get heightPortraitRangeValues {
91-
switch (this) {
92-
case AdaptiveWindowType.xsmall:
93-
return const RangeValues(0, 959);
94-
case AdaptiveWindowType.small:
95-
return const RangeValues(360, 1599);
96-
case AdaptiveWindowType.medium:
97-
return const RangeValues(720, 1919);
98-
case AdaptiveWindowType.large:
99-
return const RangeValues(1920, double.infinity);
100-
case AdaptiveWindowType.xlarge:
101-
return const RangeValues(1920, double.infinity);
102-
default:
103-
throw AssertionError('Unsupported AdaptiveWindowType');
104-
}
105-
}
42+
static const AdaptiveWindowType xsmall = AdaptiveWindowType._(
43+
name: 'xsmall',
44+
relativeSize: 0,
45+
widthRangeValues: RangeValues(0, 599),
46+
heightLandscapeRangeValues: RangeValues(0, 359),
47+
heightPortraitRangeValues: RangeValues(0, 959),
48+
);
49+
50+
static const AdaptiveWindowType small = AdaptiveWindowType._(
51+
name: 'small',
52+
relativeSize: 1,
53+
widthRangeValues: RangeValues(600, 1023),
54+
heightLandscapeRangeValues: RangeValues(360, 719),
55+
heightPortraitRangeValues: RangeValues(360, 1599),
56+
);
57+
58+
static const AdaptiveWindowType medium = AdaptiveWindowType._(
59+
name: 'medium',
60+
relativeSize: 2,
61+
widthRangeValues: RangeValues(1024, 1439),
62+
heightLandscapeRangeValues: RangeValues(720, 959),
63+
heightPortraitRangeValues: RangeValues(720, 1919),
64+
);
65+
66+
static const AdaptiveWindowType large = AdaptiveWindowType._(
67+
name: 'large',
68+
relativeSize: 3,
69+
widthRangeValues: RangeValues(1440, 1919),
70+
heightLandscapeRangeValues: RangeValues(960, 1279),
71+
heightPortraitRangeValues: RangeValues(1920, double.infinity),
72+
);
73+
74+
static const AdaptiveWindowType xlarge = AdaptiveWindowType._(
75+
name: 'xlarge',
76+
relativeSize: 4,
77+
widthRangeValues: RangeValues(1920, double.infinity),
78+
heightLandscapeRangeValues: RangeValues(1280, double.infinity),
79+
heightPortraitRangeValues: RangeValues(1920, double.infinity),
80+
);
10681

10782
bool operator <=(AdaptiveWindowType other) =>
108-
_relativeSize(this) <= _relativeSize(other);
83+
relativeSize <= other.relativeSize;
10984

11085
bool operator <(AdaptiveWindowType other) =>
111-
_relativeSize(this) < _relativeSize(other);
86+
relativeSize < other.relativeSize;
11287

11388
bool operator >=(AdaptiveWindowType other) =>
114-
_relativeSize(this) >= _relativeSize(other);
89+
relativeSize >= other.relativeSize;
11590

11691
bool operator >(AdaptiveWindowType other) =>
117-
_relativeSize(this) > _relativeSize(other);
92+
relativeSize > other.relativeSize;
11893
}
11994

12095
/// This class represents the Material breakpoint system entry.
@@ -171,32 +146,32 @@ class BreakpointSystemEntry {
171146
/// https://material.io/design/layout/responsive-layout-grid.html#breakpoints
172147
///
173148
/// This list is in sequential order.
174-
List<BreakpointSystemEntry> breakpointSystem = [
175-
const BreakpointSystemEntry(
149+
const List<BreakpointSystemEntry> breakpointSystem = [
150+
BreakpointSystemEntry(
176151
range: RangeValues(0, 359),
177152
portrait: 'small handset',
178153
adaptiveWindowType: AdaptiveWindowType.xsmall,
179154
columns: 4,
180155
margin: 16.0,
181156
gutter: 16.0,
182157
),
183-
const BreakpointSystemEntry(
158+
BreakpointSystemEntry(
184159
range: RangeValues(360, 399),
185160
portrait: 'medium handset',
186161
adaptiveWindowType: AdaptiveWindowType.xsmall,
187162
columns: 4,
188163
margin: 16.0,
189164
gutter: 16.0,
190165
),
191-
const BreakpointSystemEntry(
166+
BreakpointSystemEntry(
192167
range: RangeValues(400, 479),
193168
portrait: 'large handset',
194169
adaptiveWindowType: AdaptiveWindowType.xsmall,
195170
columns: 4,
196171
margin: 16.0,
197172
gutter: 16.0,
198173
),
199-
const BreakpointSystemEntry(
174+
BreakpointSystemEntry(
200175
range: RangeValues(480, 599),
201176
portrait: 'large handset',
202177
landscape: 'small handset',
@@ -205,7 +180,7 @@ List<BreakpointSystemEntry> breakpointSystem = [
205180
margin: 16.0,
206181
gutter: 16.0,
207182
),
208-
const BreakpointSystemEntry(
183+
BreakpointSystemEntry(
209184
range: RangeValues(600, 719),
210185
portrait: 'small tablet',
211186
landscape: 'medium handset',
@@ -214,7 +189,7 @@ List<BreakpointSystemEntry> breakpointSystem = [
214189
margin: 16.0,
215190
gutter: 16.0,
216191
),
217-
const BreakpointSystemEntry(
192+
BreakpointSystemEntry(
218193
range: RangeValues(720, 839),
219194
portrait: 'large tablet',
220195
landscape: 'large handset',
@@ -223,7 +198,7 @@ List<BreakpointSystemEntry> breakpointSystem = [
223198
margin: 24.0,
224199
gutter: 24.0,
225200
),
226-
const BreakpointSystemEntry(
201+
BreakpointSystemEntry(
227202
range: RangeValues(840, 959),
228203
portrait: 'large tablet',
229204
landscape: 'large handset',
@@ -232,47 +207,47 @@ List<BreakpointSystemEntry> breakpointSystem = [
232207
margin: 24.0,
233208
gutter: 24.0,
234209
),
235-
const BreakpointSystemEntry(
210+
BreakpointSystemEntry(
236211
range: RangeValues(960, 1023),
237212
landscape: 'small tablet',
238213
adaptiveWindowType: AdaptiveWindowType.small,
239214
columns: 12,
240215
margin: 24.0,
241216
gutter: 24.0,
242217
),
243-
const BreakpointSystemEntry(
218+
BreakpointSystemEntry(
244219
range: RangeValues(1024, 1279),
245220
landscape: 'large tablet',
246221
adaptiveWindowType: AdaptiveWindowType.medium,
247222
columns: 12,
248223
margin: 24.0,
249224
gutter: 24.0,
250225
),
251-
const BreakpointSystemEntry(
226+
BreakpointSystemEntry(
252227
range: RangeValues(1280, 1439),
253228
landscape: 'large tablet',
254229
adaptiveWindowType: AdaptiveWindowType.medium,
255230
columns: 12,
256231
margin: 24.0,
257232
gutter: 24.0,
258233
),
259-
const BreakpointSystemEntry(
234+
BreakpointSystemEntry(
260235
range: RangeValues(1440, 1599),
261236
portrait: 'small handset',
262237
adaptiveWindowType: AdaptiveWindowType.large,
263238
columns: 12,
264239
margin: 24.0,
265240
gutter: 24.0,
266241
),
267-
const BreakpointSystemEntry(
242+
BreakpointSystemEntry(
268243
range: RangeValues(1600, 1919),
269244
portrait: 'small handset',
270245
adaptiveWindowType: AdaptiveWindowType.large,
271246
columns: 12,
272247
margin: 24.0,
273248
gutter: 24.0,
274249
),
275-
const BreakpointSystemEntry(
250+
BreakpointSystemEntry(
276251
range: RangeValues(1920, double.infinity),
277252
portrait: 'small handset',
278253
adaptiveWindowType: AdaptiveWindowType.xlarge,

adaptive_breakpoints/pubspec.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: adaptive_breakpoints
22
description: A Flutter package for adaptive breakpoints following the Material guidelines.
3-
version: 0.0.5
3+
version: 0.1.0
44
homepage: https://github.com/material-components/material-components-flutter-adaptive
55

66
environment:

0 commit comments

Comments
 (0)