@@ -159,7 +159,7 @@ class _ResponsiveWrapperState extends State<ResponsiveWrapper>
159159 if (widget.maxWidth != null && windowWidth > widget.maxWidth) {
160160 // Check if there is an active breakpoint with autoScale set to true.
161161 if (activeBreakpointSegment.breakpoint >= widget.maxWidth &&
162- activeBreakpointSegment.isAutoScale) {
162+ activeBreakpointSegment.responsiveBreakpoint. isAutoScale) {
163163 return widget.maxWidth +
164164 (windowWidth -
165165 activeBreakpointSegment.responsiveBreakpoint.breakpoint);
@@ -181,7 +181,7 @@ class _ResponsiveWrapperState extends State<ResponsiveWrapper>
181181 if (widget.maxWidth != null ) if (windowWidth > widget.maxWidth) {
182182 // Check if there is an active breakpoint with autoScale set to true.
183183 if (activeBreakpointSegment.breakpoint > widget.maxWidth &&
184- activeBreakpointSegment.isAutoScale) {
184+ activeBreakpointSegment.responsiveBreakpoint. isAutoScale) {
185185 // Scale screen height by the amount the width was scaled.
186186 return windowHeight / (screenWidth / widget.maxWidth);
187187 }
@@ -207,7 +207,7 @@ class _ResponsiveWrapperState extends State<ResponsiveWrapper>
207207 double scaledWidth = 0 ;
208208 double getScaledWidth () {
209209 // If widget should resize, use screenWidth.
210- if (activeBreakpointSegment.isResize)
210+ if (activeBreakpointSegment.responsiveBreakpoint. isResize)
211211 return screenWidth /
212212 activeBreakpointSegment.responsiveBreakpoint.scaleFactor;
213213
@@ -241,7 +241,7 @@ class _ResponsiveWrapperState extends State<ResponsiveWrapper>
241241 double scaledHeight = 0 ;
242242 double getScaledHeight () {
243243 // If widget should resize, use screenHeight.
244- if (activeBreakpointSegment.isResize)
244+ if (activeBreakpointSegment.responsiveBreakpoint. isResize)
245245 return screenHeight /
246246 activeBreakpointSegment.responsiveBreakpoint.scaleFactor;
247247
@@ -503,21 +503,57 @@ class _ResponsiveWrapperState extends State<ResponsiveWrapper>
503503 behavior: _ResponsiveBreakpointBehavior .AUTOSCALE ,
504504 scaleFactor: breakpoint.scaleFactor));
505505 } else {
506- // Construct midway breakpoint segment.
507- _ResponsiveBreakpointSegment midwayBreakpointSegment =
508- _ResponsiveBreakpointSegment (
509- breakpoint:
510- (breakpoint.breakpoint - breakpointHolder.breakpoint) /
511- 2 +
512- breakpointHolder.breakpoint,
513- responsiveBreakpointBehavior:
514- _ResponsiveBreakpointBehavior .AUTOSCALEDOWN ,
515- responsiveBreakpoint: ResponsiveBreakpoint ._(
516- breakpoint: breakpoint.breakpoint,
517- name: breakpointHolder.name,
518- behavior: _ResponsiveBreakpointBehavior .AUTOSCALE ,
519- scaleFactor: breakpoint.scaleFactor));
520- breakpointSegments.add (midwayBreakpointSegment);
506+ // Split AutoScale behavior between autoScale and autoScaleDown.
507+ if (breakpointHolder.isAutoScale) {
508+ // Construct midway breakpoint segment.
509+ _ResponsiveBreakpointSegment midwayBreakpointSegment =
510+ _ResponsiveBreakpointSegment (
511+ breakpoint: (breakpoint.breakpoint -
512+ breakpointHolder.breakpoint) /
513+ 2 +
514+ breakpointHolder.breakpoint,
515+ responsiveBreakpointBehavior:
516+ _ResponsiveBreakpointBehavior .AUTOSCALEDOWN ,
517+ responsiveBreakpoint: ResponsiveBreakpoint ._(
518+ breakpoint: breakpoint.breakpoint,
519+ name: breakpointHolder.name,
520+ behavior: _ResponsiveBreakpointBehavior .AUTOSCALE ,
521+ scaleFactor: breakpoint.scaleFactor));
522+ breakpointSegments.add (midwayBreakpointSegment);
523+ }
524+ // AutoScaleDown overrides resize behavior.
525+ if (breakpointHolder.isResize) {
526+ // Construct override breakpoint segment.
527+ int overrideBreakpointIndex = breakpointSegments.lastIndexWhere (
528+ (element) =>
529+ element.breakpoint == breakpointHolder.breakpoint &&
530+ element.isResize);
531+ _ResponsiveBreakpointSegment overrideBreakpointSegment =
532+ breakpointSegments[overrideBreakpointIndex];
533+ overrideBreakpointSegment = overrideBreakpointSegment.copyWith (
534+ responsiveBreakpoint:
535+ overrideBreakpointSegment.responsiveBreakpoint.copyWith (
536+ breakpoint: breakpoint.breakpoint,
537+ behavior: _ResponsiveBreakpointBehavior .AUTOSCALE ));
538+ breakpointSegments[overrideBreakpointIndex] =
539+ overrideBreakpointSegment;
540+ // Remap all tags with override behavior.
541+ breakpointSegments = breakpointSegments.map ((element) {
542+ if (element.breakpoint >= breakpointHolder.breakpoint &&
543+ element.isTag) {
544+ return element.copyWith (
545+ responsiveBreakpointBehavior:
546+ _ResponsiveBreakpointBehavior .AUTOSCALE ,
547+ responsiveBreakpoint: element.responsiveBreakpoint
548+ .copyWith (
549+ breakpoint: breakpoint.breakpoint,
550+ behavior:
551+ _ResponsiveBreakpointBehavior .AUTOSCALE ));
552+ }
553+ return element;
554+ }).toList ();
555+ }
556+ // Construct autoScaleDown breakpoint.
521557 breakpointSegmentHolder = _ResponsiveBreakpointSegment (
522558 breakpoint: breakpoint.breakpoint,
523559 responsiveBreakpointBehavior: breakpoint.behavior,
@@ -535,7 +571,7 @@ class _ResponsiveWrapperState extends State<ResponsiveWrapper>
535571 breakpointSegmentHolder = _ResponsiveBreakpointSegment (
536572 breakpoint: breakpoint.breakpoint,
537573 // Tag inherits behavior from previous breakpoint.
538- responsiveBreakpointBehavior: breakpointHolder .behavior,
574+ responsiveBreakpointBehavior: breakpoint .behavior,
539575 responsiveBreakpoint: breakpointHolder,
540576 );
541577 break ;
@@ -762,6 +798,15 @@ class ResponsiveBreakpoint {
762798 'Breakpoints cannot be negative. To control behavior from 0, set `default` parameters in `ResponsiveWrapper`.' ),
763799 assert (name != null , 'Breakpoint tags must be named.' );
764800
801+ get isResize => behavior == _ResponsiveBreakpointBehavior .RESIZE ;
802+
803+ get isAutoScale => behavior == _ResponsiveBreakpointBehavior .AUTOSCALE ;
804+
805+ get isAutoScaleDown =>
806+ behavior == _ResponsiveBreakpointBehavior .AUTOSCALEDOWN ;
807+
808+ get isTag => behavior == _ResponsiveBreakpointBehavior .TAG ;
809+
765810 ResponsiveBreakpoint copyWith ({
766811 double breakpoint,
767812 String name,
@@ -775,15 +820,6 @@ class ResponsiveBreakpoint {
775820 scaleFactor: scaleFactor ?? this .scaleFactor,
776821 );
777822
778- get isResize => behavior == _ResponsiveBreakpointBehavior .RESIZE ;
779-
780- get isAutoScale => behavior == _ResponsiveBreakpointBehavior .AUTOSCALE ;
781-
782- get isAutoScaleDown =>
783- behavior == _ResponsiveBreakpointBehavior .AUTOSCALEDOWN ;
784-
785- get isTag => behavior == _ResponsiveBreakpointBehavior .TAG ;
786-
787823 @override
788824 String toString () =>
789825 'ResponsiveBreakpoint(' +
@@ -821,6 +857,18 @@ class _ResponsiveBreakpointSegment {
821857 get isTag =>
822858 responsiveBreakpointBehavior == _ResponsiveBreakpointBehavior .TAG ;
823859
860+ _ResponsiveBreakpointSegment copyWith ({
861+ double breakpoint,
862+ _ResponsiveBreakpointBehavior responsiveBreakpointBehavior,
863+ ResponsiveBreakpoint responsiveBreakpoint,
864+ }) =>
865+ _ResponsiveBreakpointSegment (
866+ breakpoint: breakpoint ?? this .breakpoint,
867+ responsiveBreakpointBehavior:
868+ responsiveBreakpointBehavior ?? this .responsiveBreakpointBehavior,
869+ responsiveBreakpoint: responsiveBreakpoint ?? this .responsiveBreakpoint,
870+ );
871+
824872 @override
825873 String toString () =>
826874 'ResponsiveBreakpointSegment(' +
0 commit comments