From dde063b30da4cf7ba4813e2b3cc353e7b79651e9 Mon Sep 17 00:00:00 2001 From: Pooria Amini Date: Thu, 28 Nov 2024 21:50:38 +0330 Subject: [PATCH 1/2] add scaling up the responsive box to fill available space --- lib/src/responsive_scaled_box.dart | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/lib/src/responsive_scaled_box.dart b/lib/src/responsive_scaled_box.dart index 4d08675..a691a1a 100644 --- a/lib/src/responsive_scaled_box.dart +++ b/lib/src/responsive_scaled_box.dart @@ -6,11 +6,13 @@ class ResponsiveScaledBox extends StatelessWidget { final double? width; final Widget child; final bool autoCalculateMediaQueryData; + final bool autoScaleUp; const ResponsiveScaledBox( {super.key, required this.width, required this.child, + this.autoScaleUp = false, this.autoCalculateMediaQueryData = true}); @override @@ -20,13 +22,15 @@ class ResponsiveScaledBox extends StatelessWidget { builder: (context, constraints) { MediaQueryData mediaQueryData = MediaQuery.of(context); - double aspectRatio = constraints.maxWidth / constraints.maxHeight; + double availableWidth = constraints.maxWidth; + double availableHeight = constraints.maxHeight; + + double aspectRatio = availableWidth / availableHeight; double scaledWidth = width!; double scaledHeight = width! / aspectRatio; bool overrideMediaQueryData = autoCalculateMediaQueryData && - (mediaQueryData.size == - Size(constraints.maxWidth, constraints.maxHeight)); + (mediaQueryData.size == Size(availableWidth, availableHeight)); EdgeInsets scaledViewInsets = getScaledViewInsets( mediaQueryData: mediaQueryData, @@ -40,7 +44,7 @@ class ResponsiveScaledBox extends StatelessWidget { padding: scaledViewPadding, insets: scaledViewInsets); Widget childHolder = FittedBox( - fit: BoxFit.fitWidth, + fit: BoxFit.cover, alignment: Alignment.topCenter, child: Container( width: width, @@ -50,6 +54,13 @@ class ResponsiveScaledBox extends StatelessWidget { ), ); + if (autoScaleUp && width! < availableWidth) { + childHolder = Transform.scale( + scale: availableWidth / width!, + child: childHolder, + ); + } + if (overrideMediaQueryData) { return MediaQuery( data: mediaQueryData.copyWith( From 49231e0b04d39ea34eba95af55ff5ca788187eb5 Mon Sep 17 00:00:00 2001 From: Pooria Amini Date: Tue, 3 Dec 2024 15:14:14 +0330 Subject: [PATCH 2/2] return FittedBox.fit back to BoxFit.fitWidth --- lib/src/responsive_scaled_box.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/src/responsive_scaled_box.dart b/lib/src/responsive_scaled_box.dart index a691a1a..4ff2485 100644 --- a/lib/src/responsive_scaled_box.dart +++ b/lib/src/responsive_scaled_box.dart @@ -44,7 +44,7 @@ class ResponsiveScaledBox extends StatelessWidget { padding: scaledViewPadding, insets: scaledViewInsets); Widget childHolder = FittedBox( - fit: BoxFit.cover, + fit: BoxFit.fitWidth, alignment: Alignment.topCenter, child: Container( width: width,