@@ -55,14 +55,28 @@ class FlutterCarousel extends StatefulWidget {
5555class FlutterCarouselState extends State <FlutterCarousel >
5656 with TickerProviderStateMixin {
5757 /// mode is related to why the page is being changed
58- CarouselPageChangedReason mode = CarouselPageChangedReason .controller;
58+ CarouselPageChangedReason changeReasonMode =
59+ CarouselPageChangedReason .controller;
5960
6061 CarouselState ? _carouselState;
6162 int _currentPage = 0 ;
6263 PageController ? _pageController;
6364 double _pageDelta = 0.0 ;
6465 Timer ? _timer;
6566
67+ void changeIndexPageDelta () {
68+ var realIndex = getRealIndex (
69+ _carouselState! .pageController! .page! .floor (),
70+ _carouselState! .realPage,
71+ widget.itemCount ?? widget.items? .length,
72+ );
73+
74+ WidgetsBinding .instance.addPostFrameCallback ((_) => setState (() {
75+ _currentPage = realIndex;
76+ _pageDelta = _pageController! .page! - _pageController! .page! .floor ();
77+ }));
78+ }
79+
6680 @override
6781 void didUpdateWidget (covariant FlutterCarousel oldWidget) {
6882 _carouselState! .options = options;
@@ -81,17 +95,7 @@ class FlutterCarouselState extends State<FlutterCarousel>
8195 /// handle autoplay when state changes
8296 _handleAutoPlay ();
8397
84- _pageController! .addListener (() {
85- var realIndex = getRealIndex (
86- _carouselState! .pageController! .page! .floor (),
87- _carouselState! .realPage,
88- widget.itemCount ?? widget.items? .length,
89- );
90- setState (() {
91- _currentPage = realIndex;
92- _pageDelta = _pageController! .page! - _pageController! .page! .floor ();
93- });
94- });
98+ _pageController! .addListener (changeIndexPageDelta);
9599
96100 super .didUpdateWidget (oldWidget);
97101 }
@@ -110,7 +114,7 @@ class FlutterCarouselState extends State<FlutterCarousel>
110114 options,
111115 _clearTimer,
112116 _resumeTimer,
113- _changeMode ,
117+ changeMode ,
114118 );
115119
116120 _carouselState! .itemCount = widget.itemCount;
@@ -130,17 +134,7 @@ class FlutterCarouselState extends State<FlutterCarousel>
130134
131135 _carouselState! .pageController = _pageController;
132136
133- _pageController! .addListener (() {
134- var realIndex = getRealIndex (
135- _carouselState! .pageController! .page! .floor (),
136- _carouselState! .realPage,
137- widget.itemCount ?? widget.items? .length,
138- );
139- setState (() {
140- _currentPage = realIndex;
141- _pageDelta = _pageController! .page! - _pageController! .page! .floor ();
142- });
143- });
137+ _pageController! .addListener (changeIndexPageDelta);
144138 }
145139
146140 CarouselControllerImpl get carouselController =>
@@ -162,8 +156,8 @@ class FlutterCarouselState extends State<FlutterCarousel>
162156 return ;
163157 }
164158
165- var previousReason = mode ;
166- _changeMode (CarouselPageChangedReason .timed);
159+ var previousReason = changeReasonMode ;
160+ changeMode (CarouselPageChangedReason .timed);
167161
168162 var itemCount = widget.itemCount ?? widget.items! .length;
169163 var nextPage = _carouselState! .pageController! .page! .round () + 1 ;
@@ -183,12 +177,12 @@ class FlutterCarouselState extends State<FlutterCarousel>
183177 duration: widget.options.autoPlayAnimationDuration,
184178 curve: widget.options.autoPlayCurve,
185179 )
186- .then ((_) => _changeMode (previousReason));
180+ .then ((_) => changeMode (previousReason));
187181 });
188182 }
189183
190- void _changeMode (CarouselPageChangedReason mode ) {
191- mode = mode ;
184+ void changeMode (CarouselPageChangedReason _mode ) {
185+ changeReasonMode = _mode ;
192186 }
193187
194188 /// Clear Timer
@@ -218,7 +212,7 @@ class FlutterCarouselState extends State<FlutterCarousel>
218212
219213 /// onStart
220214 void _onStart () {
221- _changeMode (CarouselPageChangedReason .manual);
215+ changeMode (CarouselPageChangedReason .manual);
222216 }
223217
224218 /// onPanDown
@@ -227,7 +221,7 @@ class FlutterCarouselState extends State<FlutterCarousel>
227221 _clearTimer ();
228222 }
229223
230- _changeMode (CarouselPageChangedReason .manual);
224+ changeMode (CarouselPageChangedReason .manual);
231225 }
232226
233227 /// onPanEnd
@@ -342,7 +336,10 @@ class FlutterCarouselState extends State<FlutterCarousel>
342336 );
343337
344338 if (widget.options.onPageChanged != null ) {
345- widget.options.onPageChanged !(currentPage, mode);
339+ widget.options.onPageChanged !(
340+ currentPage,
341+ changeReasonMode,
342+ );
346343 }
347344 },
348345 itemCount: widget.options.enableInfiniteScroll ? null : widget.itemCount,
0 commit comments