Skip to content

Commit

Permalink
Jump to Page with Controller
Browse files Browse the repository at this point in the history
  • Loading branch information
iamSahdeep committed May 5, 2020
1 parent 724dc31 commit ed3328a
Show file tree
Hide file tree
Showing 4 changed files with 98 additions and 35 deletions.
19 changes: 18 additions & 1 deletion example/lib/main.dart
Expand Up @@ -22,9 +22,15 @@ class MyApp extends StatefulWidget {

class _MyAppState extends State<MyApp> {
int page = 0;

LiquidController liquidController;
UpdateType updateType;

@override
void initState() {
liquidController = LiquidController();
super.initState();
}

final pages = [
Container(
color: Colors.pink,
Expand Down Expand Up @@ -231,6 +237,7 @@ class _MyAppState extends State<MyApp> {
onPageChangeCallback: pageChangeCallback,
currentUpdateTypeCallback: updateTypeCallback,
waveType: WaveType.liquidReveal,
liquidController: liquidController,
),
Padding(
padding: EdgeInsets.all(20),
Expand All @@ -244,6 +251,16 @@ class _MyAppState extends State<MyApp> {
],
),
),
Align(
alignment: Alignment.center,
child: FlatButton(
onPressed: () {
liquidController.animateToPage(4);
},
child: Text("fafsdfadsfdsaf"),
color: Colors.white,
),
)
],
),
),
Expand Down
21 changes: 21 additions & 0 deletions lib/PageHelpers/LiquidController.dart
@@ -0,0 +1,21 @@
import 'package:flutter/material.dart';
import 'package:liquid_swipe/Provider/iamariderprovider.dart';
import 'package:provider/provider.dart';

class LiquidController {
BuildContext context;

LiquidController();

setContext(BuildContext c) {
context = c;
}

jumpToPage(int page) {
Provider.of<IAmARiderProvider>(context, listen: false).jumpToPage(page);
}

animateToPage(int page) {
Provider.of<IAmARiderProvider>(context, listen: false).animateToPage(page);
}
}
21 changes: 19 additions & 2 deletions lib/Provider/iamariderprovider.dart
Expand Up @@ -29,7 +29,7 @@ class IAmARiderProvider extends ChangeNotifier {
double slideIcon,
OnPageChangeCallback onPageChangeCallback,
CurrentUpdateTypeCallback currentUpdateTypeCallback) {
slidePercentHor = slidePercentVer = 0;
slidePercentHor = slidePercentVer = 0.5;
activePageIndex = initialPage;
nextPageIndex = initialPage;
enableLoop = loop;
Expand All @@ -40,6 +40,23 @@ class IAmARiderProvider extends ChangeNotifier {
_onPageChangeCallback = onPageChangeCallback;
}

animateToPage(int page) {
// new Timer.periodic(const Duration(seconds: 1), (t) {
// updateSlide(SlideUpdate(
// SlideDirection.rightToLeft, 1, 0.5, UpdateType.doneAnimating));
// if (activePageIndex == page) {
// t.cancel();
// }
// });
}

jumpToPage(int page) {
activePageIndex = page - 1;
nextPageIndex = page;
updateSlide(SlideUpdate(
SlideDirection.rightToLeft, 1, 0.5, UpdateType.doneAnimating));
}

updateSlide(SlideUpdate slidUpdate) {
slideUpdate = slidUpdate;
updateData(slidUpdate);
Expand Down Expand Up @@ -128,7 +145,7 @@ class IAmARiderProvider extends ChangeNotifier {
_onPageChangeCallback(activePageIndex);
}
slideDirection = SlideDirection.none;
slidePercentHor = 0.5;
slidePercentHor = 0.0;
slidePercentVer = positionSlideIcon;
return;
}
Expand Down
72 changes: 40 additions & 32 deletions lib/liquid_swipe.dart
@@ -1,13 +1,15 @@
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:liquid_swipe/Helpers/Helpers.dart';
import 'package:liquid_swipe/PageHelpers/LiquidController.dart';
import 'package:liquid_swipe/PageHelpers/page.dart';
import 'package:liquid_swipe/PageHelpers/page_dragger.dart';
import 'package:liquid_swipe/PageHelpers/page_reveal.dart';
import 'package:liquid_swipe/Provider/iamariderprovider.dart';
import 'package:provider/provider.dart';

export 'package:liquid_swipe/Helpers/Helpers.dart';
export 'package:liquid_swipe/PageHelpers/LiquidController.dart';

final key = new GlobalKey<_LiquidSwipe>();

Expand All @@ -22,6 +24,7 @@ class LiquidSwipe extends StatefulWidget {
final Widget slideIconWidget;
final double positionSlideIcon;
final bool enableLoop;
final LiquidController liquidController;
final WaveType waveType;
final OnPageChangeCallback onPageChangeCallback;
final CurrentUpdateTypeCallback currentUpdateTypeCallback;
Expand All @@ -35,6 +38,7 @@ class LiquidSwipe extends StatefulWidget {
this.slideIconWidget = const Icon(Icons.arrow_back_ios),
this.positionSlideIcon = 0.54,
this.enableLoop = true,
this.liquidController,
this.waveType = WaveType.liquidReveal,
this.onPageChangeCallback,
this.currentUpdateTypeCallback,
Expand All @@ -51,8 +55,11 @@ class LiquidSwipe extends StatefulWidget {
}

class _LiquidSwipe extends State<LiquidSwipe> with TickerProviderStateMixin {
LiquidController liquidController;

@override
void initState() {
liquidController = widget.liquidController ?? LiquidController();
super.initState();
}

Expand All @@ -70,39 +77,40 @@ class _LiquidSwipe extends State<LiquidSwipe> with TickerProviderStateMixin {
widget.onPageChangeCallback,
widget.currentUpdateTypeCallback);
},
child: Consumer(
builder: (BuildContext context, IAmARiderProvider model, _) =>
Stack(
children: <Widget>[
CustomPage(
pageView: model.slideDirection == SlideDirection.leftToRight
? pages[model.activePageIndex]
: pages[model.nextPageIndex],
),
//Pages
PageReveal(
//next page reveal
revealPercent: model.slidePercentHor,
child: CustomPage(
pageView: model.slideDirection == SlideDirection.leftToRight
? pages[model.nextPageIndex]
: pages[model.activePageIndex],
),
slideDirection: model.slideDirection,
iconPosition: widget.positionSlideIcon,
waveType: widget.waveType,
vertReveal: model.slidePercentVer,
),
PageDragger(
//Used for gesture control
fullTransitionPX: widget.fullTransitionValue,
enableSlideIcon: widget.enableSlideIcon,
slideIconWidget: widget.slideIconWidget,
iconPosition: widget.positionSlideIcon,
), //PageDragger
], //Widget//Stack
child:
Consumer(builder: (BuildContext context, IAmARiderProvider model, _) {
liquidController.setContext(context);
return Stack(
children: <Widget>[
CustomPage(
pageView: model.slideDirection == SlideDirection.leftToRight
? pages[model.activePageIndex]
: pages[model.nextPageIndex],
),
//Pages
PageReveal(
//next page reveal
revealPercent: model.slidePercentHor,
child: CustomPage(
pageView: model.slideDirection == SlideDirection.leftToRight
? pages[model.nextPageIndex]
: pages[model.activePageIndex],
),
slideDirection: model.slideDirection,
iconPosition: widget.positionSlideIcon,
waveType: widget.waveType,
vertReveal: model.slidePercentVer,
),
),
PageDragger(
//Used for gesture control
fullTransitionPX: widget.fullTransitionValue,
enableSlideIcon: widget.enableSlideIcon,
slideIconWidget: widget.slideIconWidget,
iconPosition: widget.positionSlideIcon,
), //PageDragger
], //Widget//Stack
);
}),
); //Scaffold
}
}

0 comments on commit ed3328a

Please sign in to comment.