Skip to content

Commit 81c1fa0

Browse files
committed
ResponsiveScaledBox Null Default Support
- Pass null to not do any scaling.
1 parent 4583f6b commit 81c1fa0

1 file changed

Lines changed: 51 additions & 47 deletions

File tree

lib/responsive_scaled_box.dart

Lines changed: 51 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import 'dart:math';
33
import 'package:flutter/material.dart';
44

55
class ResponsiveScaledBox extends StatelessWidget {
6-
final double width;
6+
final double? width;
77
final Widget child;
88
final bool autoCalculateMediaQueryData;
99

@@ -16,54 +16,58 @@ class ResponsiveScaledBox extends StatelessWidget {
1616

1717
@override
1818
Widget build(BuildContext context) {
19-
return LayoutBuilder(
20-
builder: (context, constraints) {
21-
MediaQueryData mediaQueryData = MediaQuery.of(context);
22-
23-
double aspectRatio = constraints.maxWidth / constraints.maxHeight;
24-
double scaledWidth = width;
25-
double scaledHeight = width / aspectRatio;
26-
27-
bool overrideMediaQueryData = autoCalculateMediaQueryData &&
28-
(mediaQueryData.size ==
29-
Size(constraints.maxWidth, constraints.maxHeight));
30-
31-
EdgeInsets scaledViewInsets = getScaledViewInsets(
32-
mediaQueryData: mediaQueryData,
33-
screenSize: mediaQueryData.size,
34-
scaledSize: Size(scaledWidth, scaledHeight));
35-
EdgeInsets scaledViewPadding = getScaledViewPadding(
36-
mediaQueryData: mediaQueryData,
37-
screenSize: mediaQueryData.size,
38-
scaledSize: Size(scaledWidth, scaledHeight));
39-
EdgeInsets scaledPadding = getScaledPadding(
40-
padding: scaledViewPadding, insets: scaledViewInsets);
41-
42-
Widget childHolder = FittedBox(
43-
fit: BoxFit.fitWidth,
44-
alignment: Alignment.topCenter,
45-
child: Container(
46-
width: width,
47-
height: scaledHeight,
48-
alignment: Alignment.center,
49-
child: child,
50-
),
51-
);
52-
53-
if (overrideMediaQueryData) {
54-
return MediaQuery(
55-
data: mediaQueryData.copyWith(
56-
size: Size(scaledWidth, scaledHeight),
57-
viewInsets: scaledViewInsets,
58-
viewPadding: scaledViewPadding,
59-
padding: scaledPadding),
60-
child: childHolder,
19+
if (width != null) {
20+
return LayoutBuilder(
21+
builder: (context, constraints) {
22+
MediaQueryData mediaQueryData = MediaQuery.of(context);
23+
24+
double aspectRatio = constraints.maxWidth / constraints.maxHeight;
25+
double scaledWidth = width!;
26+
double scaledHeight = width! / aspectRatio;
27+
28+
bool overrideMediaQueryData = autoCalculateMediaQueryData &&
29+
(mediaQueryData.size ==
30+
Size(constraints.maxWidth, constraints.maxHeight));
31+
32+
EdgeInsets scaledViewInsets = getScaledViewInsets(
33+
mediaQueryData: mediaQueryData,
34+
screenSize: mediaQueryData.size,
35+
scaledSize: Size(scaledWidth, scaledHeight));
36+
EdgeInsets scaledViewPadding = getScaledViewPadding(
37+
mediaQueryData: mediaQueryData,
38+
screenSize: mediaQueryData.size,
39+
scaledSize: Size(scaledWidth, scaledHeight));
40+
EdgeInsets scaledPadding = getScaledPadding(
41+
padding: scaledViewPadding, insets: scaledViewInsets);
42+
43+
Widget childHolder = FittedBox(
44+
fit: BoxFit.fitWidth,
45+
alignment: Alignment.topCenter,
46+
child: Container(
47+
width: width,
48+
height: scaledHeight,
49+
alignment: Alignment.center,
50+
child: child,
51+
),
6152
);
62-
}
6353

64-
return childHolder;
65-
},
66-
);
54+
if (overrideMediaQueryData) {
55+
return MediaQuery(
56+
data: mediaQueryData.copyWith(
57+
size: Size(scaledWidth, scaledHeight),
58+
viewInsets: scaledViewInsets,
59+
viewPadding: scaledViewPadding,
60+
padding: scaledPadding),
61+
child: childHolder,
62+
);
63+
}
64+
65+
return childHolder;
66+
},
67+
);
68+
}
69+
70+
return child;
6771
}
6872

6973
EdgeInsets getScaledViewInsets(

0 commit comments

Comments
 (0)