@@ -7,21 +7,51 @@ import '../../gen/assets.gen.dart';
77
88const _imageOpacity = 0.6 ;
99
10- class HomePagesWidget extends StatelessWidget {
10+ class HomePagesWidget extends StatefulWidget {
1111 final List <SurveyModel > surveys;
1212 final ValueNotifier <int > currentPage;
13- final PageController _pageController = PageController ();
13+ final VoidCallback onNextButtonPressed;
14+ final bool isRefreshing;
15+ final VoidCallback onLoadMore;
1416
15- HomePagesWidget ({
17+ const HomePagesWidget ({
1618 Key ? key,
1719 required this .surveys,
1820 required this .currentPage,
21+ required this .onNextButtonPressed,
22+ required this .onLoadMore,
23+ required this .isRefreshing,
1924 }) : super (key: key);
2025
26+ @override
27+ State <HomePagesWidget > createState () => _HomePagesWidgetState ();
28+ }
29+
30+ class _HomePagesWidgetState extends State <HomePagesWidget > {
31+ final PageController _pageController = PageController (initialPage: 0 );
32+
33+ @override
34+ void dispose () {
35+ _pageController.dispose ();
36+ super .dispose ();
37+ }
38+
39+ void _handlePageChanged (int index) {
40+ widget.currentPage.value = index;
41+
42+ if (index == widget.surveys.length - 1 ) {
43+ widget.onLoadMore ();
44+ }
45+ }
46+
2147 @override
2248 Widget build (BuildContext context) {
49+ if (widget.isRefreshing && widget.surveys.isNotEmpty) {
50+ _pageController.jumpToPage (0 );
51+ }
52+
2353 return PageView .builder (
24- itemCount: surveys.length,
54+ itemCount: widget. surveys.length,
2555 controller: _pageController,
2656 itemBuilder: (_, int index) {
2757 return Container (
@@ -32,7 +62,7 @@ class HomePagesWidget extends StatelessWidget {
3262 opacity: _imageOpacity,
3363 child: FadeInImage .assetNetwork (
3464 placeholder: Assets .images.placeholder.path,
35- image: surveys[index].coverImageUrl,
65+ image: widget. surveys[index].coverImageUrl,
3666 fit: BoxFit .cover,
3767 width: double .infinity,
3868 height: double .infinity,
@@ -49,13 +79,8 @@ class HomePagesWidget extends StatelessWidget {
4979 right: 0 ,
5080 ),
5181 child: HomeFooterWidget (
52- survey: surveys[index],
53- onNextButtonPressed: () {
54- if (currentPage.value < surveys.length - 1 ) {
55- currentPage.value = index + 1 ;
56- _pageController.jumpToPage (currentPage.value);
57- }
58- },
82+ survey: widget.surveys[index],
83+ onNextButtonPressed: widget.onNextButtonPressed,
5984 ),
6085 ),
6186 ),
@@ -65,9 +90,7 @@ class HomePagesWidget extends StatelessWidget {
6590 ),
6691 );
6792 },
68- onPageChanged: (int index) {
69- currentPage.value = index;
70- },
93+ onPageChanged: _handlePageChanged,
7194 );
7295 }
7396}
0 commit comments