@@ -55,14 +55,28 @@ class FlutterCarousel extends StatefulWidget {
55
55
class FlutterCarouselState extends State <FlutterCarousel >
56
56
with TickerProviderStateMixin {
57
57
/// mode is related to why the page is being changed
58
- CarouselPageChangedReason mode = CarouselPageChangedReason .controller;
58
+ CarouselPageChangedReason changeReasonMode =
59
+ CarouselPageChangedReason .controller;
59
60
60
61
CarouselState ? _carouselState;
61
62
int _currentPage = 0 ;
62
63
PageController ? _pageController;
63
64
double _pageDelta = 0.0 ;
64
65
Timer ? _timer;
65
66
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
+
66
80
@override
67
81
void didUpdateWidget (covariant FlutterCarousel oldWidget) {
68
82
_carouselState! .options = options;
@@ -81,17 +95,7 @@ class FlutterCarouselState extends State<FlutterCarousel>
81
95
/// handle autoplay when state changes
82
96
_handleAutoPlay ();
83
97
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);
95
99
96
100
super .didUpdateWidget (oldWidget);
97
101
}
@@ -110,7 +114,7 @@ class FlutterCarouselState extends State<FlutterCarousel>
110
114
options,
111
115
_clearTimer,
112
116
_resumeTimer,
113
- _changeMode ,
117
+ changeMode ,
114
118
);
115
119
116
120
_carouselState! .itemCount = widget.itemCount;
@@ -130,17 +134,7 @@ class FlutterCarouselState extends State<FlutterCarousel>
130
134
131
135
_carouselState! .pageController = _pageController;
132
136
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);
144
138
}
145
139
146
140
CarouselControllerImpl get carouselController =>
@@ -162,8 +156,8 @@ class FlutterCarouselState extends State<FlutterCarousel>
162
156
return ;
163
157
}
164
158
165
- var previousReason = mode ;
166
- _changeMode (CarouselPageChangedReason .timed);
159
+ var previousReason = changeReasonMode ;
160
+ changeMode (CarouselPageChangedReason .timed);
167
161
168
162
var itemCount = widget.itemCount ?? widget.items! .length;
169
163
var nextPage = _carouselState! .pageController! .page! .round () + 1 ;
@@ -183,12 +177,12 @@ class FlutterCarouselState extends State<FlutterCarousel>
183
177
duration: widget.options.autoPlayAnimationDuration,
184
178
curve: widget.options.autoPlayCurve,
185
179
)
186
- .then ((_) => _changeMode (previousReason));
180
+ .then ((_) => changeMode (previousReason));
187
181
});
188
182
}
189
183
190
- void _changeMode (CarouselPageChangedReason mode ) {
191
- mode = mode ;
184
+ void changeMode (CarouselPageChangedReason _mode ) {
185
+ changeReasonMode = _mode ;
192
186
}
193
187
194
188
/// Clear Timer
@@ -218,7 +212,7 @@ class FlutterCarouselState extends State<FlutterCarousel>
218
212
219
213
/// onStart
220
214
void _onStart () {
221
- _changeMode (CarouselPageChangedReason .manual);
215
+ changeMode (CarouselPageChangedReason .manual);
222
216
}
223
217
224
218
/// onPanDown
@@ -227,7 +221,7 @@ class FlutterCarouselState extends State<FlutterCarousel>
227
221
_clearTimer ();
228
222
}
229
223
230
- _changeMode (CarouselPageChangedReason .manual);
224
+ changeMode (CarouselPageChangedReason .manual);
231
225
}
232
226
233
227
/// onPanEnd
@@ -342,7 +336,10 @@ class FlutterCarouselState extends State<FlutterCarousel>
342
336
);
343
337
344
338
if (widget.options.onPageChanged != null ) {
345
- widget.options.onPageChanged !(currentPage, mode);
339
+ widget.options.onPageChanged !(
340
+ currentPage,
341
+ changeReasonMode,
342
+ );
346
343
}
347
344
},
348
345
itemCount: widget.options.enableInfiniteScroll ? null : widget.itemCount,
0 commit comments