From e7fd092f7f86289b7ec557c8f8bf4c7fa056a337 Mon Sep 17 00:00:00 2001 From: Yazeed AlKhalaf Date: Wed, 4 Aug 2021 20:30:05 +0300 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=8B=20Enhance=20cupertino=20button=20f?= =?UTF-8?q?ade=20in=20and=20fade=20out=20(#87139)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../flutter/lib/src/cupertino/button.dart | 8 +++---- .../flutter/test/cupertino/button_test.dart | 22 +++++++++++-------- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/packages/flutter/lib/src/cupertino/button.dart b/packages/flutter/lib/src/cupertino/button.dart index 98341231184..10a6dbdd600 100644 --- a/packages/flutter/lib/src/cupertino/button.dart +++ b/packages/flutter/lib/src/cupertino/button.dart @@ -148,8 +148,8 @@ class CupertinoButton extends StatefulWidget { class _CupertinoButtonState extends State with SingleTickerProviderStateMixin { // Eyeballed values. Feel free to tweak. - static const Duration kFadeOutDuration = Duration(milliseconds: 10); - static const Duration kFadeInDuration = Duration(milliseconds: 100); + static const Duration kFadeOutDuration = Duration(milliseconds: 120); + static const Duration kFadeInDuration = Duration(milliseconds: 180); final Tween _opacityTween = Tween(begin: 1.0); late AnimationController _animationController; @@ -213,8 +213,8 @@ class _CupertinoButtonState extends State with SingleTickerProv return; final bool wasHeldDown = _buttonHeldDown; final TickerFuture ticker = _buttonHeldDown - ? _animationController.animateTo(1.0, duration: kFadeOutDuration) - : _animationController.animateTo(0.0, duration: kFadeInDuration); + ? _animationController.animateTo(1.0, duration: kFadeOutDuration, curve: Curves.easeInOutCubicEmphasized) + : _animationController.animateTo(0.0, duration: kFadeInDuration, curve: Curves.easeOutCubic); ticker.then((void value) { if (mounted && wasHeldDown != _buttonHeldDown) _animate(); diff --git a/packages/flutter/test/cupertino/button_test.dart b/packages/flutter/test/cupertino/button_test.dart index 3055e2e603d..5e39bb9734f 100644 --- a/packages/flutter/test/cupertino/button_test.dart +++ b/packages/flutter/test/cupertino/button_test.dart @@ -205,23 +205,27 @@ void main() { await tester.pump(); FadeTransition transition = tester.firstWidget(find.byType(FadeTransition)); - await tester.pump(const Duration(milliseconds: 25)); + await tester.pump(const Duration(milliseconds: 50)); transition = tester.firstWidget(find.byType(FadeTransition)); - expect(transition.opacity.value, moreOrLessEquals(0.4, epsilon: 0.001)); + expect(transition.opacity.value, moreOrLessEquals(0.403, epsilon: 0.001)); - await tester.pump(const Duration(milliseconds: 25)); + await tester.pump(const Duration(milliseconds: 100)); transition = tester.firstWidget(find.byType(FadeTransition)); - expect(transition.opacity.value, moreOrLessEquals(0.437, epsilon: 0.001)); + expect(transition.opacity.value, moreOrLessEquals(0.400, epsilon: 0.001)); - await tester.pump(const Duration(milliseconds: 25)); + await tester.pump(const Duration(milliseconds: 50)); transition = tester.firstWidget(find.byType(FadeTransition)); - expect(transition.opacity.value, moreOrLessEquals(0.55, epsilon: 0.001)); + expect(transition.opacity.value, moreOrLessEquals(0.650, epsilon: 0.001)); - await tester.pump(const Duration(milliseconds: 25)); + await tester.pump(const Duration(milliseconds: 50)); transition = tester.firstWidget(find.byType(FadeTransition)); - expect(transition.opacity.value, moreOrLessEquals(0.737, epsilon: 0.001)); + expect(transition.opacity.value, moreOrLessEquals(0.894, epsilon: 0.001)); - await tester.pump(const Duration(milliseconds: 25)); + await tester.pump(const Duration(milliseconds: 50)); + transition = tester.firstWidget(find.byType(FadeTransition)); + expect(transition.opacity.value, moreOrLessEquals(0.988, epsilon: 0.001)); + + await tester.pump(const Duration(milliseconds: 50)); transition = tester.firstWidget(find.byType(FadeTransition)); expect(transition.opacity.value, moreOrLessEquals(1.0, epsilon: 0.001)); });