@@ -518,6 +518,8 @@ class _SearchViewRoute extends PopupRoute<_SearchViewRoute> {
518
518
final CapturedThemes capturedThemes;
519
519
final TextInputAction ? textInputAction;
520
520
final TextInputType ? keyboardType;
521
+ CurvedAnimation ? curvedAnimation;
522
+ CurvedAnimation ? viewFadeOnIntervalCurve;
521
523
522
524
@override
523
525
Color ? get barrierColor => Colors .transparent;
@@ -561,6 +563,13 @@ class _SearchViewRoute extends PopupRoute<_SearchViewRoute> {
561
563
return super .didPop (result);
562
564
}
563
565
566
+ @override
567
+ void dispose () {
568
+ curvedAnimation? .dispose ();
569
+ viewFadeOnIntervalCurve? .dispose ();
570
+ super .dispose ();
571
+ }
572
+
564
573
void updateViewConfig (BuildContext context) {
565
574
viewDefaults = _SearchViewDefaultsM3 (context, isFullScreen: showFullScreenView);
566
575
viewTheme = SearchViewTheme .of (context);
@@ -620,23 +629,25 @@ class _SearchViewRoute extends PopupRoute<_SearchViewRoute> {
620
629
child: AnimatedBuilder (
621
630
animation: animation,
622
631
builder: (BuildContext context, Widget ? child) {
623
- final Animation < double > curvedAnimation = CurvedAnimation (
632
+ curvedAnimation ?? = CurvedAnimation (
624
633
parent: animation,
625
634
curve: Curves .easeInOutCubicEmphasized,
626
635
reverseCurve: Curves .easeInOutCubicEmphasized.flipped,
627
636
);
628
637
629
- final Rect viewRect = _rectTween.evaluate (curvedAnimation)! ;
638
+ final Rect viewRect = _rectTween.evaluate (curvedAnimation! )! ;
630
639
final double topPadding = showFullScreenView
631
- ? lerpDouble (0.0 , MediaQuery .paddingOf (context).top, curvedAnimation.value)!
640
+ ? lerpDouble (0.0 , MediaQuery .paddingOf (context).top, curvedAnimation! .value)!
632
641
: 0.0 ;
633
642
643
+ viewFadeOnIntervalCurve ?? = CurvedAnimation (
644
+ parent: animation,
645
+ curve: _kViewFadeOnInterval,
646
+ reverseCurve: _kViewFadeOnInterval.flipped,
647
+ );
648
+
634
649
return FadeTransition (
635
- opacity: CurvedAnimation (
636
- parent: animation,
637
- curve: _kViewFadeOnInterval,
638
- reverseCurve: _kViewFadeOnInterval.flipped,
639
- ),
650
+ opacity: viewFadeOnIntervalCurve! ,
640
651
child: capturedThemes.wrap (
641
652
_ViewContent (
642
653
viewOnChanged: viewOnChanged,
@@ -654,7 +665,7 @@ class _SearchViewRoute extends PopupRoute<_SearchViewRoute> {
654
665
viewHeaderHintStyle: viewHeaderHintStyle,
655
666
dividerColor: dividerColor,
656
667
showFullScreenView: showFullScreenView,
657
- animation: curvedAnimation,
668
+ animation: curvedAnimation! ,
658
669
topPadding: topPadding,
659
670
viewMaxWidth: _rectTween.end! .width,
660
671
viewRect: viewRect,
@@ -738,6 +749,9 @@ class _ViewContent extends StatefulWidget {
738
749
class _ViewContentState extends State <_ViewContent > {
739
750
Size ? _screenSize;
740
751
late Rect _viewRect;
752
+ late CurvedAnimation viewIconsFadeCurve;
753
+ late CurvedAnimation viewDividerFadeCurve;
754
+ late CurvedAnimation viewListFadeOnIntervalCurve;
741
755
late final SearchController _controller;
742
756
Iterable <Widget > result = < Widget > [];
743
757
String ? searchValue;
@@ -749,6 +763,7 @@ class _ViewContentState extends State<_ViewContent> {
749
763
_viewRect = widget.viewRect;
750
764
_controller = widget.searchController;
751
765
_controller.addListener (updateSuggestions);
766
+ _setupAnimations ();
752
767
}
753
768
754
769
@override
@@ -787,11 +802,36 @@ class _ViewContentState extends State<_ViewContent> {
787
802
@override
788
803
void dispose () {
789
804
_controller.removeListener (updateSuggestions);
805
+ _disposeAnimations ();
790
806
_timer? .cancel ();
791
807
_timer = null ;
792
808
super .dispose ();
793
809
}
794
810
811
+ void _setupAnimations () {
812
+ viewIconsFadeCurve = CurvedAnimation (
813
+ parent: widget.animation,
814
+ curve: _kViewIconsFadeOnInterval,
815
+ reverseCurve: _kViewIconsFadeOnInterval.flipped,
816
+ );
817
+ viewDividerFadeCurve = CurvedAnimation (
818
+ parent: widget.animation,
819
+ curve: _kViewDividerFadeOnInterval,
820
+ reverseCurve: _kViewFadeOnInterval.flipped,
821
+ );
822
+ viewListFadeOnIntervalCurve = CurvedAnimation (
823
+ parent: widget.animation,
824
+ curve: _kViewListFadeOnInterval,
825
+ reverseCurve: _kViewListFadeOnInterval.flipped,
826
+ );
827
+ }
828
+
829
+ void _disposeAnimations () {
830
+ viewIconsFadeCurve.dispose ();
831
+ viewDividerFadeCurve.dispose ();
832
+ viewListFadeOnIntervalCurve.dispose ();
833
+ }
834
+
795
835
Widget viewBuilder (Iterable <Widget > suggestions) {
796
836
if (widget.viewBuilder == null ) {
797
837
return MediaQuery .removePadding (
@@ -900,11 +940,7 @@ class _ViewContentState extends State<_ViewContent> {
900
940
maxWidth: math.min (widget.viewMaxWidth, _screenSize! .width),
901
941
minWidth: 0 ,
902
942
child: FadeTransition (
903
- opacity: CurvedAnimation (
904
- parent: widget.animation,
905
- curve: _kViewIconsFadeOnInterval,
906
- reverseCurve: _kViewIconsFadeOnInterval.flipped,
907
- ),
943
+ opacity: viewIconsFadeCurve,
908
944
child: Column (
909
945
crossAxisAlignment: CrossAxisAlignment .stretch,
910
946
children: < Widget > [
@@ -937,19 +973,11 @@ class _ViewContentState extends State<_ViewContent> {
937
973
),
938
974
),
939
975
FadeTransition (
940
- opacity: CurvedAnimation (
941
- parent: widget.animation,
942
- curve: _kViewDividerFadeOnInterval,
943
- reverseCurve: _kViewFadeOnInterval.flipped,
944
- ),
976
+ opacity: viewDividerFadeCurve,
945
977
child: viewDivider),
946
978
Expanded (
947
979
child: FadeTransition (
948
- opacity: CurvedAnimation (
949
- parent: widget.animation,
950
- curve: _kViewListFadeOnInterval,
951
- reverseCurve: _kViewListFadeOnInterval.flipped,
952
- ),
980
+ opacity: viewListFadeOnIntervalCurve,
953
981
child: viewBuilder (result),
954
982
),
955
983
),
0 commit comments