Skip to content

Commit 72e1874

Browse files
committed
bumped to version 2.2.0
1 parent 79626a2 commit 72e1874

File tree

3 files changed

+86
-56
lines changed

3 files changed

+86
-56
lines changed

lib/src/_expandable_carousel_widget.dart

Lines changed: 72 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,65 @@ class ExpandableCarouselState extends State<ExpandableCarousel>
7373
late List<double> _sizes;
7474
Timer? _timer;
7575

76+
CarouselOptions get options => widget.options;
77+
78+
bool get isBuilder => widget.itemBuilder != null;
79+
80+
double get _currentSize => _sizes[_currentPage];
81+
82+
double get _previousSize => _sizes[_previousPage];
83+
84+
bool get _isHorizontalScroll =>
85+
widget.options.scrollDirection == Axis.horizontal;
86+
87+
void _changeMode(CarouselPageChangedReason mode) {
88+
mode = mode;
89+
}
90+
91+
void _updatePage() {
92+
final newPage = _pageController?.page!.round();
93+
94+
WidgetsBinding.instance.addPostFrameCallback((_) {
95+
if (mounted) {
96+
setState(() {
97+
_firstPageLoaded = true;
98+
_previousPage = _currentPage;
99+
_currentPage = newPage!;
100+
});
101+
}
102+
});
103+
104+
// if (_currentPage != newPage) {
105+
// //...
106+
// }
107+
}
108+
109+
void _changeIndexPageDelta() {
110+
var realIndex = getRealIndex(
111+
_carouselState!.pageController!.page!.floor(),
112+
_carouselState!.realPage,
113+
widget.itemCount ?? widget.items?.length,
114+
);
115+
116+
WidgetsBinding.instance.addPostFrameCallback((_) {
117+
if (mounted) {
118+
setState(() {
119+
_currentPage = realIndex;
120+
_pageDelta = _pageController!.page! - _pageController!.page!.floor();
121+
});
122+
}
123+
});
124+
125+
// WidgetsBinding.instance.addPostFrameCallback((_) {
126+
// if (mounted) {
127+
// setState(() {
128+
// _currentPage = _pageController!.page!.floor();
129+
// _pageDelta = _pageController!.page! - _pageController!.page!.floor();
130+
// });
131+
// }
132+
// });
133+
}
134+
76135
@override
77136
void didUpdateWidget(covariant ExpandableCarousel oldWidget) {
78137
super.didUpdateWidget(oldWidget);
@@ -93,12 +152,7 @@ class ExpandableCarouselState extends State<ExpandableCarousel>
93152
/// handle autoplay when state changes
94153
_handleAutoPlay();
95154

96-
_pageController?.addListener(() {
97-
setState(() {
98-
_currentPage = _pageController!.page!.floor();
99-
_pageDelta = _pageController!.page! - _pageController!.page!.floor();
100-
});
101-
});
155+
_pageController?.addListener(_changeIndexPageDelta);
102156

103157
if (oldWidget.options.controller != widget.options.controller) {
104158
_pageController?.addListener(_updatePage);
@@ -110,16 +164,6 @@ class ExpandableCarouselState extends State<ExpandableCarousel>
110164
}
111165
}
112166

113-
@override
114-
void dispose() {
115-
_pageController?.removeListener(_updatePage);
116-
if (_shouldDisposePageController) {
117-
_pageController?.dispose();
118-
}
119-
_clearTimer();
120-
super.dispose();
121-
}
122-
123167
@override
124168
void initState() {
125169
super.initState();
@@ -151,12 +195,7 @@ class ExpandableCarouselState extends State<ExpandableCarousel>
151195

152196
_carouselState!.pageController = _pageController;
153197

154-
_pageController!.addListener(() {
155-
setState(() {
156-
_currentPage = _pageController!.page!.floor();
157-
_pageDelta = _pageController!.page! - _pageController!.page!.floor();
158-
});
159-
});
198+
_pageController!.addListener(_changeIndexPageDelta);
160199

161200
_sizes = _prepareSizes();
162201
_pageController?.addListener(_updatePage);
@@ -165,26 +204,22 @@ class ExpandableCarouselState extends State<ExpandableCarousel>
165204
_shouldDisposePageController = widget.options.controller == null;
166205
}
167206

207+
@override
208+
void dispose() {
209+
_pageController?.removeListener(_changeIndexPageDelta);
210+
_pageController?.removeListener(_updatePage);
211+
if (_shouldDisposePageController) {
212+
_pageController?.dispose();
213+
}
214+
_clearTimer();
215+
super.dispose();
216+
}
217+
168218
CarouselControllerImpl get carouselController =>
169219
widget.options.controller != null
170220
? widget.options.controller as CarouselControllerImpl
171221
: CarouselController() as CarouselControllerImpl;
172222

173-
CarouselOptions get options => widget.options;
174-
175-
bool get isBuilder => widget.itemBuilder != null;
176-
177-
double get _currentSize => _sizes[_currentPage];
178-
179-
double get _previousSize => _sizes[_previousPage];
180-
181-
bool get _isHorizontalScroll =>
182-
widget.options.scrollDirection == Axis.horizontal;
183-
184-
void _changeMode(CarouselPageChangedReason mode) {
185-
mode = mode;
186-
}
187-
188223
/// Timer
189224
Timer? _getTimer() {
190225
if (widget.options.autoPlay == true) {
@@ -303,17 +338,6 @@ class ExpandableCarouselState extends State<ExpandableCarousel>
303338
}
304339
}
305340

306-
void _updatePage() {
307-
final newPage = _pageController?.page!.round();
308-
if (_currentPage != newPage) {
309-
setState(() {
310-
_firstPageLoaded = true;
311-
_previousPage = _currentPage;
312-
_currentPage = newPage!;
313-
});
314-
}
315-
}
316-
317341
Widget _itemBuilder(BuildContext context, int index) {
318342
final idx = getRealIndex(
319343
index + _carouselState!.initialPage,

lib/src/_flutter_carousel_widget.dart

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -64,17 +64,21 @@ class FlutterCarouselState extends State<FlutterCarousel>
6464
double _pageDelta = 0.0;
6565
Timer? _timer;
6666

67-
void changeIndexPageDelta() {
67+
void _changeIndexPageDelta() {
6868
var realIndex = getRealIndex(
6969
_carouselState!.pageController!.page!.floor(),
7070
_carouselState!.realPage,
7171
widget.itemCount ?? widget.items?.length,
7272
);
7373

74-
WidgetsBinding.instance.addPostFrameCallback((_) => setState(() {
74+
WidgetsBinding.instance.addPostFrameCallback((_) {
75+
if (mounted) {
76+
setState(() {
7577
_currentPage = realIndex;
7678
_pageDelta = _pageController!.page! - _pageController!.page!.floor();
77-
}));
79+
});
80+
}
81+
});
7882
}
7983

8084
@override
@@ -95,13 +99,15 @@ class FlutterCarouselState extends State<FlutterCarousel>
9599
/// handle autoplay when state changes
96100
_handleAutoPlay();
97101

98-
_pageController!.addListener(changeIndexPageDelta);
102+
_pageController!.addListener(_changeIndexPageDelta);
99103

100104
super.didUpdateWidget(oldWidget);
101105
}
102106

103107
@override
104108
void dispose() {
109+
_pageController?.removeListener(_changeIndexPageDelta);
110+
_pageController?.dispose();
105111
_clearTimer();
106112
super.dispose();
107113
}
@@ -134,7 +140,7 @@ class FlutterCarouselState extends State<FlutterCarousel>
134140

135141
_carouselState!.pageController = _pageController;
136142

137-
_pageController!.addListener(changeIndexPageDelta);
143+
_pageController!.addListener(_changeIndexPageDelta);
138144
}
139145

140146
CarouselControllerImpl get carouselController =>

pubspec.yaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name: flutter_carousel_widget
22
description: A customizable carousel slider widget in Flutter which supports infinite scrolling, auto scrolling, custom child widget, custom animations and built-in indicators.
33

4-
version: 2.1.2
4+
version: 2.2.0
55

66
homepage: https://pub.dev/packages/flutter_carousel_widget
77
repository: https://github.com/nixrajput/flutter_carousel_widget
@@ -16,5 +16,5 @@ dependencies:
1616
sdk: flutter
1717

1818
dev_dependencies:
19-
test: ^1.24.8
20-
lints: ^2.1.1
19+
test: ^1.24.9
20+
lints: ^3.0.0

0 commit comments

Comments
 (0)