Maximum bounds for the mimic in the overlay can now be specified.
This commit is contained in:
parent
c9c4852aa6
commit
a1249ad2c7
@ -15,13 +15,15 @@ class MimicOverlay extends AnimatedComponent {
|
|||||||
this.children,
|
this.children,
|
||||||
this.overlay,
|
this.overlay,
|
||||||
this.duration: const Duration(milliseconds: 200),
|
this.duration: const Duration(milliseconds: 200),
|
||||||
this.curve: linear
|
this.curve: linear,
|
||||||
|
this.targetRect
|
||||||
}) : super(key: key);
|
}) : super(key: key);
|
||||||
|
|
||||||
List<Widget> children;
|
List<Widget> children;
|
||||||
GlobalKey overlay;
|
GlobalKey overlay;
|
||||||
Duration duration;
|
Duration duration;
|
||||||
Curve curve;
|
Curve curve;
|
||||||
|
Rect targetRect;
|
||||||
|
|
||||||
void syncFields(MimicOverlay source) {
|
void syncFields(MimicOverlay source) {
|
||||||
children = source.children;
|
children = source.children;
|
||||||
@ -29,20 +31,28 @@ class MimicOverlay extends AnimatedComponent {
|
|||||||
duration = source.duration;
|
duration = source.duration;
|
||||||
_expandPerformance.duration = duration;
|
_expandPerformance.duration = duration;
|
||||||
|
|
||||||
|
targetRect = source.targetRect;
|
||||||
|
_mimicBounds.end = targetRect;
|
||||||
|
if (_expandPerformance.isCompleted) {
|
||||||
|
_mimicBounds.value = _mimicBounds.end;
|
||||||
|
}
|
||||||
|
|
||||||
curve = source.curve;
|
curve = source.curve;
|
||||||
_mimicBounds.curve = curve;
|
_mimicBounds.curve = curve;
|
||||||
|
|
||||||
if (overlay != source.overlay) {
|
if (overlay != source.overlay) {
|
||||||
overlay = source.overlay;
|
overlay = source.overlay;
|
||||||
if (_expandPerformance.isDismissed)
|
if (_expandPerformance.isDismissed) {
|
||||||
_activeOverlay = overlay;
|
_activeOverlay = overlay;
|
||||||
else
|
} else {
|
||||||
_expandPerformance.reverse();
|
_expandPerformance.reverse();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void initState() {
|
void initState() {
|
||||||
_mimicBounds = new AnimatedRect(new Rect(), curve: curve);
|
_mimicBounds = new AnimatedRect(new Rect(), curve: curve);
|
||||||
|
_mimicBounds.end = targetRect;
|
||||||
_expandPerformance = new AnimationPerformance()
|
_expandPerformance = new AnimationPerformance()
|
||||||
..duration = duration
|
..duration = duration
|
||||||
..addVariable(_mimicBounds)
|
..addVariable(_mimicBounds)
|
||||||
@ -62,14 +72,11 @@ class MimicOverlay extends AnimatedComponent {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void _handleStackSizeChanged(Size size) {
|
|
||||||
_mimicBounds.end = Point.origin & size;
|
|
||||||
}
|
|
||||||
|
|
||||||
void _handleMimicCallback(Rect globalBounds) {
|
void _handleMimicCallback(Rect globalBounds) {
|
||||||
setState(() {
|
setState(() {
|
||||||
// TODO(abarth): We need to convert global bounds into local coordinates.
|
// TODO(abarth): We need to convert global bounds into local coordinates.
|
||||||
_mimicBounds.begin = globalToLocal(globalBounds.topLeft) & globalBounds.size;
|
_mimicBounds.begin =
|
||||||
|
globalToLocal(globalBounds.topLeft) & globalBounds.size;
|
||||||
_mimicBounds.value = _mimicBounds.begin;
|
_mimicBounds.value = _mimicBounds.begin;
|
||||||
});
|
});
|
||||||
_expandPerformance.forward();
|
_expandPerformance.forward();
|
||||||
@ -78,8 +85,9 @@ class MimicOverlay extends AnimatedComponent {
|
|||||||
Widget build() {
|
Widget build() {
|
||||||
List<Widget> layers = new List<Widget>();
|
List<Widget> layers = new List<Widget>();
|
||||||
|
|
||||||
if (children != null)
|
if (children != null) {
|
||||||
layers.addAll(children);
|
layers.addAll(children);
|
||||||
|
}
|
||||||
|
|
||||||
if (_activeOverlay != null) {
|
if (_activeOverlay != null) {
|
||||||
layers.add(
|
layers.add(
|
||||||
@ -98,9 +106,6 @@ class MimicOverlay extends AnimatedComponent {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
return new SizeObserver(
|
return new Stack(layers);
|
||||||
callback: _handleStackSizeChanged,
|
|
||||||
child: new Stack(layers)
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user