@@ -19,13 +19,20 @@ extension ScaleEffectExt on Widget {
1919 AlignmentGeometry alignment = Alignment .center,
2020 Offset origin = Offset .zero,
2121 double ? from,
22+ bool transformHitTests = true ,
2223 }) {
2324 return EffectWidget (
24- start: from == null ? null : ScaleEffect (scale: from),
25+ start: from == null
26+ ? null
27+ : ScaleEffect (
28+ scale: from,
29+ transformHitTests: transformHitTests,
30+ ),
2531 end: ScaleEffect (
2632 scale: scale,
2733 alignment: alignment,
2834 origin: origin,
35+ transformHitTests: transformHitTests,
2936 ),
3037 child: this ,
3138 );
@@ -43,13 +50,20 @@ extension ScaleEffectExt on Widget {
4350 AlignmentGeometry alignment = Alignment .center,
4451 Offset origin = Offset .zero,
4552 double ? from,
53+ bool transformHitTests = true ,
4654 }) {
4755 return EffectWidget (
48- start: from == null ? null : ScaleEffect (scaleX: from),
56+ start: from == null
57+ ? null
58+ : ScaleEffect (
59+ scaleX: from,
60+ transformHitTests: transformHitTests,
61+ ),
4962 end: ScaleEffect (
5063 scaleX: scaleX,
5164 alignment: alignment,
5265 origin: origin,
66+ transformHitTests: transformHitTests,
5367 ),
5468 child: this ,
5569 );
@@ -67,13 +81,20 @@ extension ScaleEffectExt on Widget {
6781 AlignmentGeometry alignment = Alignment .center,
6882 Offset origin = Offset .zero,
6983 double ? from,
84+ bool transformHitTests = true ,
7085 }) {
7186 return EffectWidget (
72- start: from == null ? null : ScaleEffect (scaleY: from),
87+ start: from == null
88+ ? null
89+ : ScaleEffect (
90+ scaleY: from,
91+ transformHitTests: transformHitTests,
92+ ),
7393 end: ScaleEffect (
7494 scaleY: scaleY,
7595 alignment: alignment,
7696 origin: origin,
97+ transformHitTests: transformHitTests,
7798 ),
7899 child: this ,
79100 );
@@ -93,15 +114,22 @@ extension ScaleEffectExt on Widget {
93114 AlignmentGeometry alignment = Alignment .center,
94115 Offset origin = Offset .zero,
95116 Offset ? from,
117+ bool transformHitTests = true ,
96118 }) {
97119 return EffectWidget (
98- start:
99- from == null ? null : ScaleEffect (scaleX: from.dx, scaleY: from.dy),
120+ start: from == null
121+ ? null
122+ : ScaleEffect (
123+ scaleX: from.dx,
124+ scaleY: from.dy,
125+ transformHitTests: transformHitTests,
126+ ),
100127 end: ScaleEffect (
101128 scaleX: scaleX,
102129 scaleY: scaleY,
103130 alignment: alignment,
104131 origin: origin,
132+ transformHitTests: transformHitTests,
105133 ),
106134 child: this ,
107135 );
@@ -114,11 +142,21 @@ extension ScaleEffectExt on Widget {
114142 double ? end,
115143 AlignmentGeometry alignment = Alignment .center,
116144 Offset origin = Offset .zero,
145+ bool transformHitTests = true ,
117146 }) {
118147 return EffectWidget (
119- start:
120- ScaleEffect (scale: start ?? 0 , alignment: alignment, origin: origin),
121- end: ScaleEffect (scale: end ?? 1 , alignment: alignment, origin: origin),
148+ start: ScaleEffect (
149+ scale: start ?? 0 ,
150+ alignment: alignment,
151+ origin: origin,
152+ transformHitTests: transformHitTests,
153+ ),
154+ end: ScaleEffect (
155+ scale: end ?? 1 ,
156+ alignment: alignment,
157+ origin: origin,
158+ transformHitTests: transformHitTests,
159+ ),
122160 child: this ,
123161 );
124162 }
@@ -130,11 +168,21 @@ extension ScaleEffectExt on Widget {
130168 double ? end,
131169 AlignmentGeometry alignment = Alignment .center,
132170 Offset origin = Offset .zero,
171+ bool transformHitTests = true ,
133172 }) {
134173 return EffectWidget (
135- start:
136- ScaleEffect (scale: start ?? 1 , alignment: alignment, origin: origin),
137- end: ScaleEffect (scale: end ?? 0 , alignment: alignment, origin: origin),
174+ start: ScaleEffect (
175+ scale: start ?? 1 ,
176+ alignment: alignment,
177+ origin: origin,
178+ transformHitTests: transformHitTests,
179+ ),
180+ end: ScaleEffect (
181+ scale: end ?? 0 ,
182+ alignment: alignment,
183+ origin: origin,
184+ transformHitTests: transformHitTests,
185+ ),
138186 child: this ,
139187 );
140188 }
@@ -163,13 +211,17 @@ class ScaleEffect extends Effect {
163211 /// (relative to the upper left corner of this render object)
164212 final Offset origin;
165213
214+ /// Whether to apply the transformation when performing hit tests.
215+ final bool transformHitTests;
216+
166217 /// Creates a [ScaleEffect] .
167218 ScaleEffect ({
168219 this .scale,
169220 this .scaleX,
170221 this .scaleY,
171222 this .alignment = Alignment .center,
172223 this .origin = Offset .zero,
224+ this .transformHitTests = true ,
173225 }) : assert (scale != null || scaleX != null || scaleY != null ,
174226 'At least one of scale, scaleX, or scaleY must be non-null' );
175227
@@ -187,6 +239,8 @@ class ScaleEffect extends Effect {
187239 scale: effectiveScale,
188240 alignment: effectiveAlignment,
189241 origin: effectiveOrigin,
242+ transformHitTests:
243+ value < 0.5 ? transformHitTests : other.transformHitTests,
190244 );
191245 }
192246
@@ -197,6 +251,8 @@ class ScaleEffect extends Effect {
197251 scaleY: effectiveScaleY,
198252 alignment: effectiveAlignment,
199253 origin: effectiveOrigin,
254+ transformHitTests:
255+ value < 0.5 ? transformHitTests : other.transformHitTests,
200256 );
201257 }
202258
@@ -207,6 +263,7 @@ class ScaleEffect extends Effect {
207263 scaleY: scaleY,
208264 alignment: alignment,
209265 origin: origin,
266+ transformHitTests: transformHitTests,
210267 child: child,
211268 );
212269
@@ -220,5 +277,6 @@ class ScaleEffect extends Effect {
220277 scaleY,
221278 alignment,
222279 origin,
280+ transformHitTests,
223281 ];
224282}
0 commit comments