diff --git a/packages/flutter/lib/src/material/input_decorator.dart b/packages/flutter/lib/src/material/input_decorator.dart index 8f1d531108..4a45868703 100644 --- a/packages/flutter/lib/src/material/input_decorator.dart +++ b/packages/flutter/lib/src/material/input_decorator.dart @@ -1919,6 +1919,7 @@ class _InputDecoratorState extends State with TickerProviderStat _floatingLabelAnimation.dispose(); _shakingLabelController.dispose(); _borderGap.dispose(); + _curvedAnimation?.dispose(); super.dispose(); } @@ -2150,6 +2151,23 @@ class _InputDecoratorState extends State with TickerProviderStat } } + CurvedAnimation? _curvedAnimation; + + FadeTransition _buildTransition(Widget child, Animation animation) { + if (_curvedAnimation?.parent != animation) { + _curvedAnimation?.dispose(); + _curvedAnimation = CurvedAnimation( + parent: animation, + curve: _kTransitionCurve, + ); + } + + return FadeTransition( + opacity: _curvedAnimation!, + child: child, + ); + } + @override Widget build(BuildContext context) { final ThemeData themeData = Theme.of(context); @@ -2182,15 +2200,7 @@ class _InputDecoratorState extends State with TickerProviderStat child: hintTextWidget, ) : AnimatedSwitcher( duration: decoration.hintFadeDuration ?? _kHintFadeTransitionDuration, - transitionBuilder: (Widget child, Animation animation) { - return FadeTransition( - opacity: CurvedAnimation( - parent: animation, - curve: _kTransitionCurve, - ), - child: child, - ); - }, + transitionBuilder: _buildTransition, child: showHint ? hintTextWidget : const SizedBox.shrink(), ); }