Unverified Commit f12c83ea authored by Casey Rogers's avatar Casey Rogers Committed by GitHub

Fix animate to curve argument (#96627)

* copied over changes from

* copied over changes from
parent b17a531d
......@@ -117,7 +117,7 @@ class DraggableScrollableController extends ChangeNotifier {
animationController.stop();
}
});
CurvedAnimation(parent: animationController, curve: curve).addListener(() {
animationController.addListener(() {
_attachedController!.extent.updateSize(
animationController.value,
_attachedController!.position.context.notificationContext!,
......@@ -128,7 +128,7 @@ class DraggableScrollableController extends ChangeNotifier {
animationController.stop(canceled: false);
}
});
await animationController.animateTo(size, duration: duration);
await animationController.animateTo(size, duration: duration, curve: curve);
}
/// Jumps the attached sheet from its current size to the given [size], a
......
......@@ -785,6 +785,53 @@ void main() {
});
}
testWidgets('Can animateTo with a nonlinear curve', (WidgetTester tester) async {
const Key stackKey = ValueKey<String>('stack');
const Key containerKey = ValueKey<String>('container');
final DraggableScrollableController controller = DraggableScrollableController();
await tester.pumpWidget(_boilerplate(
null,
controller: controller,
stackKey: stackKey,
containerKey: containerKey,
));
await tester.pumpAndSettle();
final double screenHeight = tester.getSize(find.byKey(stackKey)).height;
controller.animateTo(.6, curve: Curves.linear, duration: const Duration(milliseconds: 100));
// We need to call one pump first to get the animation to start.
await tester.pump();
await tester.pump(const Duration(milliseconds: 50));
expect(
tester.getSize(find.byKey(containerKey)).height / screenHeight,
closeTo(.55, precisionErrorTolerance),
);
await tester.pumpAndSettle();
expect(
tester.getSize(find.byKey(containerKey)).height / screenHeight,
closeTo(.6, precisionErrorTolerance),
);
controller.animateTo(.7, curve: const Interval(.5, 1), duration: const Duration(milliseconds: 100));
await tester.pump();
await tester.pump(const Duration(milliseconds: 50));
// The curve should result in the sheet not moving for the first 50 ms.
expect(
tester.getSize(find.byKey(containerKey)).height / screenHeight,
closeTo(.6, precisionErrorTolerance),
);
await tester.pump(const Duration(milliseconds: 25));
expect(
tester.getSize(find.byKey(containerKey)).height / screenHeight,
closeTo(.65, precisionErrorTolerance),
);
await tester.pumpAndSettle();
expect(
tester.getSize(find.byKey(containerKey)).height / screenHeight,
closeTo(.7, precisionErrorTolerance),
);
});
testWidgets('Can reuse a controller after the old controller is disposed', (WidgetTester tester) async {
const Key stackKey = ValueKey<String>('stack');
const Key containerKey = ValueKey<String>('container');
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment