Skip to content

Try using background when backgroundColor is null #82

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Feb 7, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions lib/responsive_wrapper.dart
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,8 @@ class ResponsiveWrapper extends StatefulWidget {
/// First frame initialization default background color.
/// Because layout initialization is delayed by 1 frame,
/// a solid background color is displayed instead.
/// Default white.
/// By default uses `background` widget if it is set,
/// otherwise uses white color.
final Color? backgroundColor;
final MediaQueryData? mediaQueryData;
final bool shrinkWrap;
Expand Down Expand Up @@ -661,7 +662,7 @@ class _ResponsiveWrapperState extends State<ResponsiveWrapper>
return (screenWidth ==
0) // Initialization check. Window measurements not available until postFrameCallback.
? buildBackgroundColorWidget(widget
.backgroundColor) // First frame empty background color or default white.
.backgroundColor) // First frame with empty background.
: InheritedResponsiveWrapper(
data: ResponsiveWrapperData.fromResponsiveWrapper(this),
child: Stack(
Expand Down Expand Up @@ -720,7 +721,7 @@ class _ResponsiveWrapperState extends State<ResponsiveWrapper>
/// Builds a container with [color].
/// Defaults to a white background.
Widget buildBackgroundColorWidget(Color? color) {
if (color == null) return Container(color: Color(0xFFFFFFFF));
if (color == null) return widget.background ?? Container(color: Color(0xFFFFFFFF));
return Container(color: color);
}
}
Expand Down
26 changes: 24 additions & 2 deletions test/responsive_wrapper_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -275,8 +275,11 @@ void main() {
// 0 width to simulate screen loading.
setScreenSize(tester, Size(0, 1200));
Widget widget = MaterialApp(
builder: (context, widget) =>
ResponsiveWrapper.builder(widget, backgroundColor: Colors.amber),
builder: (context, widget) => ResponsiveWrapper.builder(
widget,
background: Container(color: Colors.blue), // won't be used
backgroundColor: Colors.amber,
),
home: Container(),
);
// Pump once to trigger one frame build.
Expand All @@ -288,6 +291,25 @@ void main() {
expect(find.byWidgetPredicate(widgetPredicate), findsOneWidget);
});

testWidgets('Background Color Null Fallback', (WidgetTester tester) async {
// 0 width to simulate screen loading.
setScreenSize(tester, Size(0, 1200));
Widget widget = MaterialApp(
builder: (context, widget) => ResponsiveWrapper.builder(
widget,
background: Container(color: Colors.blue),
),
home: Container(),
);
// Pump once to trigger one frame build.
await tester.pumpWidget(widget);
// Expect only a container with default white color.
WidgetPredicate widgetPredicate = (Widget widget) =>
widget is Container && widget.color == Colors.blue;
// Confirm defaults.
expect(find.byWidgetPredicate(widgetPredicate), findsOneWidget);
});

testWidgets('Background Color Null', (WidgetTester tester) async {
// 0 width to simulate screen loading.
setScreenSize(tester, Size(0, 1200));
Expand Down