Code Refactor Deprecated parameter : sliderMenuOpenOffset and sliderMenuCloseOffset . You can use sliderMenuOpenSize and sliderMenuCloseOffset Deprecated SliderOpen . You can use SlideDirection. Remove AnimationContainer and used AnimationBuilder Deprecated sliderAnimationTimeInMilliseconds. You can use animationDuration

master
NikhilVadoliya 5 years ago
parent aaaf597989
commit 124225e272

@ -34,8 +34,11 @@ class _MyAppState extends State<MyApp> {
appBarColor: Colors.white, appBarColor: Colors.white,
key: _key, key: _key,
appBarPadding: const EdgeInsets.only(top: 20), appBarPadding: const EdgeInsets.only(top: 20),
sliderMenuOpenOffset: 250, sliderMenuOpenSize: 200,
sliderMenuCloseSize: 60,
// slideDirection: SlideDirection.TOP_TO_BOTTOM,
appBarHeight: 60, appBarHeight: 60,
// isShadow: true,
title: Text( title: Text(
title, title,
style: TextStyle(fontSize: 22, fontWeight: FontWeight.w700), style: TextStyle(fontSize: 22, fontWeight: FontWeight.w700),

@ -1,12 +1,13 @@
import 'package:flutter/animation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_slider_drawer/flutter_slider_drawer.dart'; import 'package:flutter_slider_drawer/flutter_slider_drawer.dart';
class SliderMenuContainer extends StatefulWidget { class SliderMenuContainer extends StatefulWidget {
final Widget sliderMenu; final Widget sliderMenu;
final Widget sliderMain; final Widget sliderMain;
final int sliderAnimationTimeInMilliseconds; final int animationDuration;
final double sliderMenuOpenOffset; final double sliderMenuOpenSize;
final double sliderMenuCloseOffset; final double sliderMenuCloseSize;
final Color drawerIconColor; final Color drawerIconColor;
final Widget drawerIcon; final Widget drawerIcon;
@ -23,14 +24,14 @@ class SliderMenuContainer extends StatefulWidget {
final Widget trailing; final Widget trailing;
final Color appBarColor; final Color appBarColor;
final EdgeInsets appBarPadding; final EdgeInsets appBarPadding;
final SliderOpen sliderOpen; final SlideDirection slideDirection;
const SliderMenuContainer({ const SliderMenuContainer({
Key key, Key key,
this.sliderMenu, this.sliderMenu,
this.sliderMain, this.sliderMain,
this.sliderAnimationTimeInMilliseconds = 200, this.animationDuration = 200,
this.sliderMenuOpenOffset = 265, this.sliderMenuOpenSize = 265,
this.drawerIconColor = Colors.black, this.drawerIconColor = Colors.black,
this.drawerIcon, this.drawerIcon,
this.splashColor, this.splashColor,
@ -41,8 +42,8 @@ class SliderMenuContainer extends StatefulWidget {
this.title, this.title,
this.drawerIconSize = 27, this.drawerIconSize = 27,
this.appBarHeight, this.appBarHeight,
this.sliderMenuCloseOffset = 0, this.sliderMenuCloseSize = 0,
this.sliderOpen = SliderOpen.LEFT_TO_RIGHT, this.slideDirection = SlideDirection.LEFT_TO_RIGHT,
this.isShadow = false, this.isShadow = false,
this.shadowColor = Colors.grey, this.shadowColor = Colors.grey,
this.shadowBlurRadius = 25.0, this.shadowBlurRadius = 25.0,
@ -56,23 +57,29 @@ class SliderMenuContainer extends StatefulWidget {
} }
class SliderMenuContainerState extends State<SliderMenuContainer> class SliderMenuContainerState extends State<SliderMenuContainer>
with SingleTickerProviderStateMixin { with TickerProviderStateMixin {
double _slideBarXOffset = 0; double _slideBarXOffset = 0;
double _slideBarYOffset = 0; double _slideBarYOffset = 0;
bool _isSlideBarOpen = false; bool _isSlideBarOpen = false;
AnimationController _animationController;
// AnimationController _animationButtonController;
AnimationController _animationDrawerController;
Animation animation;
Widget drawerIcon; Widget drawerIcon;
/// check whether drawer is open /// check whether drawer is open
bool get isDrawerOpen => _isSlideBarOpen; bool get isDrawerOpen => _animationDrawerController.isCompleted;
/// Toggle drawer /// Toggle drawer
void toggle() { void toggle() {
setState(() { _animationDrawerController.isCompleted
? _animationDrawerController.reverse()
: _animationDrawerController.forward();
/*setState(() {
_isSlideBarOpen _isSlideBarOpen
? _animationController.reverse() ? _animationButtonController.reverse()
: _animationController.forward(); : _animationButtonController.forward();
if (widget.sliderOpen == SliderOpen.LEFT_TO_RIGHT || if (widget.sliderOpen == SliderOpen.LEFT_TO_RIGHT ||
widget.sliderOpen == SliderOpen.RIGHT_TO_LEFT) { widget.sliderOpen == SliderOpen.RIGHT_TO_LEFT) {
_slideBarXOffset = _isSlideBarOpen _slideBarXOffset = _isSlideBarOpen
@ -85,13 +92,14 @@ class SliderMenuContainerState extends State<SliderMenuContainer>
} }
_isSlideBarOpen = !_isSlideBarOpen; _isSlideBarOpen = !_isSlideBarOpen;
}); });*/
} }
/// Open drawer /// Open drawer
void openDrawer() { void openDrawer() {
setState(() { _animationDrawerController.forward();
_animationController.forward(); /*setState(() {
_animationButtonController.forward();
if (widget.sliderOpen == SliderOpen.LEFT_TO_RIGHT || if (widget.sliderOpen == SliderOpen.LEFT_TO_RIGHT ||
widget.sliderOpen == SliderOpen.RIGHT_TO_LEFT) { widget.sliderOpen == SliderOpen.RIGHT_TO_LEFT) {
_slideBarXOffset = widget.sliderMenuOpenOffset; _slideBarXOffset = widget.sliderMenuOpenOffset;
@ -99,13 +107,14 @@ class SliderMenuContainerState extends State<SliderMenuContainer>
_slideBarYOffset = widget.sliderMenuOpenOffset; _slideBarYOffset = widget.sliderMenuOpenOffset;
} }
_isSlideBarOpen = true; _isSlideBarOpen = true;
}); });*/
} }
/// Close drawer /// Close drawer
void closeDrawer() { void closeDrawer() {
setState(() { _animationDrawerController.reverse();
_animationController.reverse(); /* setState(() {
_animationButtonController.reverse();
if (widget.sliderOpen == SliderOpen.LEFT_TO_RIGHT || if (widget.sliderOpen == SliderOpen.LEFT_TO_RIGHT ||
widget.sliderOpen == SliderOpen.RIGHT_TO_LEFT) { widget.sliderOpen == SliderOpen.RIGHT_TO_LEFT) {
_slideBarXOffset = widget.sliderMenuCloseOffset; _slideBarXOffset = widget.sliderMenuCloseOffset;
@ -113,17 +122,27 @@ class SliderMenuContainerState extends State<SliderMenuContainer>
_slideBarYOffset = widget.sliderMenuCloseOffset; _slideBarYOffset = widget.sliderMenuCloseOffset;
} }
_isSlideBarOpen = false; _isSlideBarOpen = false;
}); });*/
} }
@override @override
void initState() { void initState() {
super.initState(); super.initState();
/* _animationButtonController = AnimationController(
_animationController = AnimationController(
vsync: this, vsync: this,
duration: duration:
Duration(milliseconds: widget.sliderAnimationTimeInMilliseconds)); Duration(milliseconds: widget.sliderAnimationTimeInMilliseconds));*/
_animationDrawerController = AnimationController(
vsync: this,
duration: Duration(milliseconds: widget.animationDuration));
animation = Tween<double>(
begin: widget.sliderMenuCloseSize, end: widget.sliderMenuOpenSize)
.animate(CurvedAnimation(
parent: _animationDrawerController,
curve: Curves.easeIn,
reverseCurve: Curves.easeOut));
} }
@override @override
@ -133,38 +152,49 @@ class SliderMenuContainerState extends State<SliderMenuContainer>
/// Display Menu /// Display Menu
menuWidget(), menuWidget(),
/// Displaying the shadow /// Dev -Displaying the shadow
if (widget.isShadow) ...[ if (widget.isShadow) ...[
AnimatedContainer( AnimatedBuilder(
duration: animation: _animationDrawerController,
Duration(milliseconds: widget.sliderAnimationTimeInMilliseconds), builder: (anim, child) {
curve: Curves.easeIn, return Transform.translate(
width: double.infinity, offset: getOffsetValueForShadow(
height: double.infinity, widget.slideDirection, animation.value),
transform: getTranslationValuesForShadow(widget.sliderOpen), child: child,
decoration: BoxDecoration(shape: BoxShape.rectangle, boxShadow: [ );
BoxShadow( return child;
color: widget.shadowColor, },
blurRadius: widget.shadowBlurRadius, // soften the shadow child: Container(
spreadRadius: widget.shadowSpreadRadius, //extend the shadow width: double.infinity,
offset: Offset( height: double.infinity,
15.0, // Move to right 10 horizontally decoration: BoxDecoration(shape: BoxShape.rectangle, boxShadow: [
15.0, // Move to bottom 10 Vertically BoxShadow(
), color: widget.shadowColor,
) blurRadius: widget.shadowBlurRadius, // soften the shadow
]), spreadRadius: widget.shadowSpreadRadius, //extend the shadow
offset: Offset(
15.0, // Move to right 10 horizontally
15.0, // Move to bottom 10 Vertically
),
)
]),
),
), ),
], ],
/// Display Main Screen //Dev- Display Main Screen
AnimatedContainer( AnimatedBuilder(
duration: animation: _animationDrawerController,
Duration(milliseconds: widget.sliderAnimationTimeInMilliseconds), builder: (anim, child) {
curve: Curves.easeIn, return Transform.translate(
offset: getOffsetValues(widget.slideDirection, animation.value),
child: child,
);
},
child: Container(
width: double.infinity, width: double.infinity,
height: double.infinity, height: double.infinity,
color: widget.appBarColor, color: widget.appBarColor,
transform: getTranslationValues(widget.sliderOpen),
child: Column( child: Column(
children: <Widget>[ children: <Widget>[
Container( Container(
@ -176,7 +206,9 @@ class SliderMenuContainerState extends State<SliderMenuContainer>
), ),
Expanded(child: widget.sliderMain), Expanded(child: widget.sliderMain),
], ],
)), ),
),
),
])); ]));
} }
@ -189,10 +221,8 @@ class SliderMenuContainerState extends State<SliderMenuContainer>
icon: AnimatedIcons.menu_close, icon: AnimatedIcons.menu_close,
color: widget.drawerIconColor, color: widget.drawerIconColor,
size: widget.drawerIconSize, size: widget.drawerIconSize,
progress: _animationController), progress: _animationDrawerController),
onPressed: () { onPressed: () => toggle()),
toggle();
}),
Expanded( Expanded(
child: widget.isTitleCenter child: widget.isTitleCenter
? Center( ? Center(
@ -206,7 +236,7 @@ class SliderMenuContainerState extends State<SliderMenuContainer>
) )
]; ];
if (widget.sliderOpen == SliderOpen.RIGHT_TO_LEFT) { if (widget.slideDirection == SlideDirection.RIGHT_TO_LEFT) {
return list.reversed.toList(); return list.reversed.toList();
} }
return list; return list;
@ -214,30 +244,30 @@ class SliderMenuContainerState extends State<SliderMenuContainer>
/// Build and Align the Menu widget based on the slide open type /// Build and Align the Menu widget based on the slide open type
menuWidget() { menuWidget() {
switch (widget.sliderOpen) { switch (widget.slideDirection) {
case SliderOpen.LEFT_TO_RIGHT: case SlideDirection.LEFT_TO_RIGHT:
return Container( return Container(
width: widget.sliderMenuOpenOffset, width: widget.sliderMenuOpenSize,
child: widget.sliderMenu, child: widget.sliderMenu,
); );
break; break;
case SliderOpen.RIGHT_TO_LEFT: case SlideDirection.RIGHT_TO_LEFT:
return Positioned( return Positioned(
right: 0, right: 0,
top: 0, top: 0,
bottom: 0, bottom: 0,
child: Container( child: Container(
width: widget.sliderMenuOpenOffset, width: widget.sliderMenuOpenSize,
child: widget.sliderMenu, child: widget.sliderMenu,
), ),
); );
case SliderOpen.TOP_TO_BOTTOM: case SlideDirection.TOP_TO_BOTTOM:
return Positioned( return Positioned(
right: 0, right: 0,
left: 0, left: 0,
top: 0, top: 0,
child: Container( child: Container(
width: widget.sliderMenuOpenOffset, width: widget.sliderMenuOpenSize,
child: widget.sliderMenu, child: widget.sliderMenu,
), ),
); );
@ -246,46 +276,38 @@ class SliderMenuContainerState extends State<SliderMenuContainer>
} }
/// ///
/// This method get Matrix4 data base on [sliderOpen] type /// This method get Offset base on [sliderOpen] type
/// ///
Matrix4 getTranslationValues(SliderOpen sliderOpen) { Offset getOffsetValues(SlideDirection direction, double value) {
switch (sliderOpen) { switch (direction) {
case SliderOpen.LEFT_TO_RIGHT: case SlideDirection.LEFT_TO_RIGHT:
return Matrix4.translationValues( return Offset(value, 0);
_slideBarXOffset, _slideBarYOffset, 1.0); case SlideDirection.RIGHT_TO_LEFT:
case SliderOpen.RIGHT_TO_LEFT: return Offset(-value, 0);
return Matrix4.translationValues( case SlideDirection.TOP_TO_BOTTOM:
-_slideBarXOffset, _slideBarYOffset, 1.0); return Offset(0, value);
case SliderOpen.TOP_TO_BOTTOM:
return Matrix4.translationValues(0, _slideBarYOffset, 1.0);
default: default:
return Matrix4.translationValues(0, 0, 1.0); return Offset(value, 0);
} }
} }
Matrix4 getTranslationValuesForShadow(SliderOpen sliderOpen) { Offset getOffsetValueForShadow(SlideDirection direction, double value) {
switch (sliderOpen) { switch (direction) {
case SliderOpen.LEFT_TO_RIGHT: case SlideDirection.LEFT_TO_RIGHT:
return Matrix4.translationValues( return Offset(value - (widget.sliderMenuOpenSize > 50 ? 20 : 10), 0);
_slideBarXOffset - 30, _slideBarYOffset, 1.0); case SlideDirection.RIGHT_TO_LEFT:
case SliderOpen.RIGHT_TO_LEFT: return Offset(-value - 5, 0);
return Matrix4.translationValues( case SlideDirection.TOP_TO_BOTTOM:
-_slideBarXOffset - 5, _slideBarYOffset, 1.0); return Offset(0, value - (widget.sliderMenuOpenSize > 50 ? 15 : 5));
case SliderOpen.TOP_TO_BOTTOM:
return Matrix4.translationValues(0, _slideBarYOffset - 20, 1.0);
default: default:
return Matrix4.translationValues(0, 0, 1.0); return Offset(value - 30.0, 0);
} }
} }
@override @override
void dispose() { void dispose() {
super.dispose(); super.dispose();
_animationController.dispose(); _animationDrawerController.dispose();
} }
} }

@ -1 +1 @@
enum SliderOpen { LEFT_TO_RIGHT, RIGHT_TO_LEFT, TOP_TO_BOTTOM } enum SlideDirection { LEFT_TO_RIGHT, RIGHT_TO_LEFT, TOP_TO_BOTTOM }

Loading…
Cancel
Save