Skip to content

Commit 0a8a708

Browse files
committed
Responsive Wrapper Test Creation #1
*Create ResponsiveWrapper test.
1 parent ae2daee commit 0a8a708

File tree

3 files changed

+66
-13
lines changed

3 files changed

+66
-13
lines changed

lib/responsive_wrapper.dart

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,8 @@ import 'package:flutter/material.dart';
4848
class ResponsiveWrapper extends StatefulWidget {
4949
final Widget child;
5050
final List<ResponsiveBreakpoint> breakpoints;
51-
final double maxWidth;
5251
final double minWidth;
52+
final double maxWidth;
5353
final String defaultName;
5454
final bool defaultScale;
5555
final double defaultScaleFactor;
@@ -60,9 +60,9 @@ class ResponsiveWrapper extends StatefulWidget {
6060
const ResponsiveWrapper({
6161
Key key,
6262
@required this.child,
63-
this.breakpoints = const [],
64-
this.maxWidth,
63+
this.breakpoints,
6564
this.minWidth = 450,
65+
this.maxWidth,
6666
this.defaultName,
6767
this.defaultScale = false,
6868
this.defaultScaleFactor = 1,
@@ -75,25 +75,20 @@ class ResponsiveWrapper extends StatefulWidget {
7575

7676
static Widget builder(
7777
Widget child, {
78-
List<ResponsiveBreakpoint> breakpoints = const [],
79-
double maxWidth,
78+
List<ResponsiveBreakpoint> breakpoints,
8079
double minWidth = 450,
80+
double maxWidth,
8181
String defaultName,
8282
bool defaultScale = false,
8383
double defaultScaleFactor = 1,
8484
Widget background,
8585
MediaQueryData mediaQueryData,
8686
}) {
87-
// Order breakpoints from largest to smallest.
88-
// Perform ordering operation to allow breakpoints
89-
// to be accepted in any order.
90-
breakpoints.sort((a, b) => b.breakpoint.compareTo(a.breakpoint));
91-
9287
return ResponsiveWrapper(
9388
child: child,
9489
breakpoints: breakpoints,
95-
maxWidth: maxWidth,
9690
minWidth: minWidth,
91+
maxWidth: maxWidth,
9792
defaultName: defaultName,
9893
defaultScale: defaultScale,
9994
defaultScaleFactor: defaultScaleFactor,
@@ -141,7 +136,7 @@ class _ResponsiveWrapperState extends State<ResponsiveWrapper>
141136
MediaQuery.of(context).size.height;
142137
}
143138

144-
get breakpoints => widget.breakpoints;
139+
List<ResponsiveBreakpoint> breakpoints;
145140

146141
/// Get screen width calculation.
147142
double screenWidth = 0;
@@ -288,7 +283,7 @@ class _ResponsiveWrapperState extends State<ResponsiveWrapper>
288283
/// Active breakpoint is the first breakpoint smaller
289284
/// or equal to the [screenWidth].
290285
ResponsiveBreakpoint getActiveBreakpoint(double screenWidth) {
291-
return widget.breakpoints.firstWhere(
286+
return breakpoints.firstWhere(
292287
(element) => screenWidth >= element.breakpoint,
293288
orElse: // No breakpoint found.
294289
() => ResponsiveBreakpoint(
@@ -298,6 +293,12 @@ class _ResponsiveWrapperState extends State<ResponsiveWrapper>
298293
@override
299294
void initState() {
300295
super.initState();
296+
// Order breakpoints from largest to smallest.
297+
// Perform ordering operation to allow breakpoints
298+
// to be accepted in any order.
299+
breakpoints = widget.breakpoints ?? [];
300+
breakpoints?.sort((a, b) => b.breakpoint.compareTo(a.breakpoint));
301+
301302
WidgetsBinding.instance.addObserver(this);
302303
WidgetsBinding.instance.addPostFrameCallback((_) {
303304
setDimensions();

test/responsive_wrapper_test.dart

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
// Test Breakpoint and MaxWidth collision.
2+
// ResponsiveBreakpoint(breakpoint: 1200, scaleFactor: 2)
3+
// maxWidth: 1200
4+
// Expected Result: UI Scales 2x at 1200.
5+
import 'package:flutter/material.dart';
6+
import 'package:flutter_test/flutter_test.dart';
7+
import 'package:responsive_framework/responsive_framework.dart';
8+
9+
import 'test_utils.dart';
10+
11+
void main() {
12+
group('Wrapper', () {
13+
/// Verify empty widget does nothing.
14+
testWidgets('Empty', (WidgetTester tester) async {
15+
setScreenSize(tester, Size(450, 1200));
16+
Key key = Key('Test');
17+
Widget widget = MaterialApp(
18+
home: ResponsiveWrapper(
19+
key: key,
20+
child: Container(),
21+
),
22+
);
23+
await tester.pumpWidget(widget);
24+
await tester.pump();
25+
ResponsiveWrapper responsiveWrapper = tester.widget(find.byKey(key));
26+
// Confirm defaults.
27+
expect(responsiveWrapper.breakpoints, null);
28+
expect(responsiveWrapper.background, null);
29+
expect(responsiveWrapper.minWidth, 450);
30+
expect(responsiveWrapper.maxWidth, null);
31+
expect(responsiveWrapper.defaultName, null);
32+
expect(responsiveWrapper.defaultScale, false);
33+
expect(responsiveWrapper.defaultScaleFactor, 1);
34+
expect(responsiveWrapper.mediaQueryData, null);
35+
// Verify dimensions unchanged.
36+
MediaQuery mediaQueryData = tester.widget(find.descendant(
37+
of: find.byKey(key), matching: find.byType(MediaQuery)));
38+
expect(mediaQueryData.data.size, Size(450, 1200));
39+
});
40+
});
41+
}

test/test_utils.dart

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import 'package:flutter/rendering.dart';
2+
import 'package:flutter_test/flutter_test.dart';
3+
4+
void setScreenSize(WidgetTester tester, Size size) {
5+
tester.binding.window.physicalSizeTestValue = size;
6+
tester.binding.window.devicePixelRatioTestValue = 1;
7+
}
8+
9+
void resetScreenSize(WidgetTester tester) {
10+
addTearDown(tester.binding.window.clearPhysicalSizeTestValue);
11+
}

0 commit comments

Comments
 (0)