-[Implement][Feature] shadow,shadow color,shadowBlurRadius,shadowSpread

master
NikhilVadoliya 5 years ago
parent 3ebccaefdc
commit 57c72c90fb

@ -32,25 +32,30 @@ dependencies:
# Code # Code
``` ```
SliderMenuContainer( Scaffold(
body: SliderMenuContainer(
appBarColor: Colors.white, appBarColor: Colors.white,
key: _key, key: _key,
appBarPadding: const EdgeInsets.only(top: 20), sliderOpen: SliderOpen.TOP_TO_BOTTOM,
sliderMenuOpenOffset: 250, appBarPadding: const EdgeInsets.only(top: 10),
sliderMenuOpenOffset: 210,
appBarHeight: 60, appBarHeight: 60,
title: Text( title: Text(
title, title,
style: TextStyle(fontSize: 22, fontWeight: FontWeight.w700), style: TextStyle(fontSize: 22, fontWeight: FontWeight.w700),
), ),
sliderMenuWidget: MenuWidget( sliderMenu: MenuWidget(
onProfilePictureClick: () {},
onItemClick: (title) { onItemClick: (title) {
_key.currentState.closeDrawer(); _key.currentState.closeDrawer();
setState(() { setState(() {
this.title = title; this.title = title;
}); });
}, },
), ),
sliderMainWidget: MainWidget()), sliderMain: MainWidget()),
),
``` ```

@ -2,19 +2,23 @@ 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 sliderMenuWidget; final Widget sliderMenu;
final Widget sliderMainWidget; final Widget sliderMain;
final int sliderAnimationTimeInMilliseconds; final int sliderAnimationTimeInMilliseconds;
final double sliderMenuOpenOffset; final double sliderMenuOpenOffset;
final double sliderMenuCloseOffset; final double sliderMenuCloseOffset;
/*final double sliderMainOffset;*/
final Color drawerIconColor; final Color drawerIconColor;
final Widget drawerIcon; final Widget drawerIcon;
final double drawerIconSize; final double drawerIconSize;
final double appBarHeight; final double appBarHeight;
final Widget title; final Widget title;
final bool isTitleCenter; final bool isTitleCenter;
final bool isShadow;
final Color shadowColor;
final double shadowBlurRadius;
final double shadowSpreadRadius;
final Widget trailing; final Widget trailing;
final Color appBarColor; final Color appBarColor;
final EdgeInsets appBarPadding; final EdgeInsets appBarPadding;
@ -22,8 +26,8 @@ class SliderMenuContainer extends StatefulWidget {
const SliderMenuContainer({ const SliderMenuContainer({
Key key, Key key,
this.sliderMenuWidget, this.sliderMenu,
this.sliderMainWidget, this.sliderMain,
this.sliderAnimationTimeInMilliseconds = 200, this.sliderAnimationTimeInMilliseconds = 200,
this.sliderMenuOpenOffset = 265, this.sliderMenuOpenOffset = 265,
this.drawerIconColor = Colors.black, this.drawerIconColor = Colors.black,
@ -37,9 +41,12 @@ class SliderMenuContainer extends StatefulWidget {
this.appBarHeight, this.appBarHeight,
this.sliderMenuCloseOffset = 0, this.sliderMenuCloseOffset = 0,
this.sliderOpen = SliderOpen.LEFT_TO_RIGHT, this.sliderOpen = SliderOpen.LEFT_TO_RIGHT,
/* this.sliderMainOffset = 0*/ this.isShadow = false,
}) : assert(sliderMenuWidget != null), this.shadowColor = Colors.grey,
assert(sliderMainWidget != null), this.shadowBlurRadius = 25.0,
this.shadowSpreadRadius = 5.0,
}) : assert(sliderMenu != null),
assert(sliderMain != null),
super(key: key); super(key: key);
@override @override
@ -54,10 +61,11 @@ class SliderMenuContainerState extends State<SliderMenuContainer>
AnimationController _animationController; AnimationController _animationController;
Widget drawerIcon; Widget drawerIcon;
double db = 0;
/// check whether drawer is open
bool get isDrawerOpen => _isSlideBarOpen; bool get isDrawerOpen => _isSlideBarOpen;
/// Toggle drawer
void toggle() { void toggle() {
setState(() { setState(() {
_isSlideBarOpen _isSlideBarOpen
@ -78,6 +86,7 @@ class SliderMenuContainerState extends State<SliderMenuContainer>
}); });
} }
/// Open drawer
void openDrawer() { void openDrawer() {
setState(() { setState(() {
_animationController.forward(); _animationController.forward();
@ -91,6 +100,7 @@ class SliderMenuContainerState extends State<SliderMenuContainer>
}); });
} }
/// Close drawer
void closeDrawer() { void closeDrawer() {
setState(() { setState(() {
_animationController.reverse(); _animationController.reverse();
@ -116,10 +126,35 @@ class SliderMenuContainerState extends State<SliderMenuContainer>
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
getTranslationValues(widget.sliderOpen);
return Container( return Container(
child: Stack(children: <Widget>[ child: Stack(children: <Widget>[
/// Display Menu
menuWidget(), menuWidget(),
/// Displaying the shadow
if (widget.isShadow) ...[
AnimatedContainer(
duration:
Duration(milliseconds: widget.sliderAnimationTimeInMilliseconds),
curve: Curves.easeIn,
width: double.infinity,
height: double.infinity,
transform: getTranslationValuesForShadow(widget.sliderOpen),
decoration: BoxDecoration(shape: BoxShape.rectangle, boxShadow: [
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
AnimatedContainer( AnimatedContainer(
duration: duration:
Duration(milliseconds: widget.sliderAnimationTimeInMilliseconds), Duration(milliseconds: widget.sliderAnimationTimeInMilliseconds),
@ -137,7 +172,7 @@ class SliderMenuContainerState extends State<SliderMenuContainer>
children: appBar(), children: appBar(),
), ),
), ),
Expanded(child: widget.sliderMainWidget), Expanded(child: widget.sliderMain),
], ],
)), )),
])); ]));
@ -174,18 +209,13 @@ class SliderMenuContainerState extends State<SliderMenuContainer>
return list; return list;
} }
@override /// Build and Align the Menu widget based on the slide open type
void dispose() {
super.dispose();
_animationController.dispose();
}
menuWidget() { menuWidget() {
switch (widget.sliderOpen) { switch (widget.sliderOpen) {
case SliderOpen.LEFT_TO_RIGHT: case SliderOpen.LEFT_TO_RIGHT:
return Container( return Container(
width: widget.sliderMenuOpenOffset, width: widget.sliderMenuOpenOffset,
child: widget.sliderMenuWidget, child: widget.sliderMenu,
); );
break; break;
case SliderOpen.RIGHT_TO_LEFT: case SliderOpen.RIGHT_TO_LEFT:
@ -195,7 +225,7 @@ class SliderMenuContainerState extends State<SliderMenuContainer>
bottom: 0, bottom: 0,
child: Container( child: Container(
width: widget.sliderMenuOpenOffset, width: widget.sliderMenuOpenOffset,
child: widget.sliderMenuWidget, child: widget.sliderMenu,
), ),
); );
case SliderOpen.TOP_TO_BOTTOM: case SliderOpen.TOP_TO_BOTTOM:
@ -205,15 +235,17 @@ class SliderMenuContainerState extends State<SliderMenuContainer>
top: 0, top: 0,
child: Container( child: Container(
width: widget.sliderMenuOpenOffset, width: widget.sliderMenuOpenOffset,
child: widget.sliderMenuWidget, child: widget.sliderMenu,
), ),
); );
break; break;
} }
if (widget.sliderOpen == SliderOpen.RIGHT_TO_LEFT) {
} else {}
} }
///
/// This method get Matrix4 data base on [sliderOpen] type
///
Matrix4 getTranslationValues(SliderOpen sliderOpen) { Matrix4 getTranslationValues(SliderOpen sliderOpen) {
switch (sliderOpen) { switch (sliderOpen) {
case SliderOpen.LEFT_TO_RIGHT: case SliderOpen.LEFT_TO_RIGHT:
@ -230,4 +262,27 @@ class SliderMenuContainerState extends State<SliderMenuContainer>
return Matrix4.translationValues(0, 0, 1.0); return Matrix4.translationValues(0, 0, 1.0);
} }
} }
Matrix4 getTranslationValuesForShadow(SliderOpen sliderOpen) {
switch (sliderOpen) {
case SliderOpen.LEFT_TO_RIGHT:
return Matrix4.translationValues(
_slideBarXOffset - 30, _slideBarYOffset, 1.0);
case SliderOpen.RIGHT_TO_LEFT:
return Matrix4.translationValues(
-_slideBarXOffset - 5, _slideBarYOffset, 1.0);
case SliderOpen.TOP_TO_BOTTOM:
return Matrix4.translationValues(0, _slideBarYOffset - 20, 1.0);
default:
return Matrix4.translationValues(0, 0, 1.0);
}
}
@override
void dispose() {
super.dispose();
_animationController.dispose();
}
} }

Loading…
Cancel
Save