@@ -7,9 +7,11 @@ import 'package:intro_views_flutter/Models/page_button_view_model.dart';
77class SkipButton extends StatelessWidget {
88 //callback for skip button
99 final VoidCallback onTap;
10+
1011 //view model
1112 final PageButtonViewModel pageButtonViewModel;
1213 final Widget child;
14+
1315 //Constructor
1416 SkipButton ({
1517 this .onTap,
@@ -50,9 +52,11 @@ class SkipButton extends StatelessWidget {
5052class DoneButton extends StatelessWidget {
5153 //Callback
5254 final VoidCallback onTap;
55+
5356 //View Model
5457 final PageButtonViewModel pageButtonViewModel;
5558 final Widget child;
59+
5660 //Constructor
5761 DoneButton ({
5862 this .onTap,
@@ -84,36 +88,122 @@ class DoneButton extends StatelessWidget {
8488 }
8589}
8690
91+ /// Nexg button class
92+
93+ class NextButton extends StatelessWidget {
94+ //callback for skip button
95+ final VoidCallback onTap;
96+
97+ //view model
98+ final PageButtonViewModel pageButtonViewModel;
99+ final Widget child;
100+
101+ //Constructor
102+ NextButton ({
103+ this .onTap,
104+ this .pageButtonViewModel,
105+ this .child,
106+ });
107+
108+ @override
109+ Widget build (BuildContext context) {
110+ //Calculating opacity to create a fade in effect
111+ double opacity = 1.0 ;
112+ final TextStyle style = DefaultTextStyle .of (context).style;
113+ if (pageButtonViewModel.activePageIndex ==
114+ pageButtonViewModel.totalPages - 2 &&
115+ pageButtonViewModel.slideDirection == SlideDirection .rightToLeft) {
116+ opacity = 1.0 - pageButtonViewModel.slidePercent;
117+ } else if (pageButtonViewModel.activePageIndex ==
118+ pageButtonViewModel.totalPages - 1 &&
119+ pageButtonViewModel.slideDirection == SlideDirection .leftToRight) {
120+ opacity = pageButtonViewModel.slidePercent;
121+ }
122+
123+ return FlatButton (
124+ onPressed: onTap,
125+ child: Opacity (
126+ opacity: opacity,
127+ child: DefaultTextStyle .merge (
128+ style: style,
129+ child: child,
130+ ), //Text
131+ ), //Opacity
132+ ); //FlatButton
133+ }
134+ }
135+
87136class PageIndicatorButtons extends StatelessWidget {
88137 //Some variables
89138 final int acitvePageIndex;
90139 final int totalPages;
91140 final VoidCallback onPressedDoneButton; //Callback for Done Button
141+ final VoidCallback onPressedNextButton;
92142 final VoidCallback onPressedSkipButton; //Callback for Skip Button
93143 final SlideDirection slideDirection;
94144 final double slidePercent;
95145 final bool showSkipButton;
146+ final bool showNextButton;
96147
97148 final Widget doneText;
98149 final Widget skipText;
150+ final Widget nextText;
99151 final TextStyle textStyle;
100152
101153 final bool doneButtonPersist;
102154
155+ Widget _getDoneORNextButton (){
156+ if (acitvePageIndex == totalPages - 1 ||
157+ (acitvePageIndex == totalPages - 2 &&
158+ slideDirection == SlideDirection .rightToLeft ||
159+ doneButtonPersist)){
160+ return DoneButton (
161+ child: doneText,
162+ onTap: onPressedDoneButton,
163+ pageButtonViewModel: PageButtonViewModel (
164+ //view Model
165+ activePageIndex: acitvePageIndex,
166+ totalPages: totalPages,
167+ slidePercent: doneButtonPersist ? 0.0 : slidePercent,
168+ slideDirection: slideDirection,
169+ ),
170+ );
171+ }else if ((acitvePageIndex < totalPages - 1 ||
172+ (acitvePageIndex == totalPages - 1 &&
173+ slideDirection == SlideDirection .leftToRight)) &&
174+ showNextButton){
175+ return NextButton (
176+ child: nextText,
177+ onTap: onPressedNextButton,
178+ pageButtonViewModel: PageButtonViewModel (
179+ //View Model
180+ activePageIndex: acitvePageIndex,
181+ totalPages: totalPages,
182+ slidePercent: slidePercent,
183+ slideDirection: slideDirection,
184+ ),
185+ );
186+ }else {
187+ return Container ();
188+ }
189+ }
190+
103191 //Constructor
104- PageIndicatorButtons ({
105- @required this .acitvePageIndex,
106- @required this .totalPages,
107- this .onPressedDoneButton,
108- this .slideDirection,
109- this .slidePercent,
110- this .onPressedSkipButton,
111- this .showSkipButton = true ,
112- this .skipText,
113- this .doneText,
114- this .textStyle,
115- this .doneButtonPersist,
116- });
192+ PageIndicatorButtons (
193+ {@required this .acitvePageIndex,
194+ @required this .totalPages,
195+ this .onPressedDoneButton,
196+ this .slideDirection,
197+ this .slidePercent,
198+ this .onPressedSkipButton,
199+ this .onPressedNextButton,
200+ this .showSkipButton = true ,
201+ this .skipText,
202+ this .nextText,
203+ this .doneText,
204+ this .textStyle,
205+ this .doneButtonPersist,
206+ this .showNextButton = true });
117207
118208 @override
119209 Widget build (BuildContext context) {
@@ -149,23 +239,8 @@ class PageIndicatorButtons extends StatelessWidget {
149239 ), //Padding
150240 Padding (
151241 padding: const EdgeInsets .only (bottom: 10.0 ),
152- child: (acitvePageIndex == totalPages - 1 ||
153- (acitvePageIndex == totalPages - 2 &&
154- slideDirection == SlideDirection .rightToLeft ||
155- doneButtonPersist))
156- ? DoneButton (
157- child: doneText,
158- onTap: onPressedDoneButton,
159- pageButtonViewModel: PageButtonViewModel (
160- //view Model
161- activePageIndex: acitvePageIndex,
162- totalPages: totalPages,
163- slidePercent: doneButtonPersist ? 0.0 : slidePercent,
164- slideDirection: slideDirection,
165- ),
166- )
167- : Container (), //Row
168- ),
242+ child: _getDoneORNextButton () //Row
243+ )
169244 ],
170245 ),
171246 ),
0 commit comments