collapsible_sidebar

Creator: coderz1093

Last updated:

Add to Cart

Description:

collapsible sidebar

collapsible_sidebar #

A collapsible sidebar for Flutter apps implementing the Material Design.

🌟 Version 2.0.7 ✨ #

Features #

Material Design
Pre-built customizable tile widgets (CollapsibleItems)
Smooth Animation
Supports both LTR & RTL languages
Supports MULTI-LEVEL Menu
Alert Badges on CollapsibleItems

Supported platforms #

Flutter Android
Flutter iOS
Flutter web
Flutter desktop

Contributors #
A big thank you to all the contributors without whom this project would be impossible to maintain and enhance. 👏👏👏 #



Live preview #
https://drunkonbytes.github.io/flutter_collapsible_sidebar
Note: this page is built with flutter-web. For a better user experience, please use a mobile device to open this link.
Installation #
Add collapsible_sidebar: ^2.0.7 to your pubspec.yaml dependencies. And import it:
import 'package:collapsible_sidebar/collapsible_sidebar.dart';
copied to clipboard
How to use #

Create a list of CollapsibleItems named _items (or whatever fancy name you like)

For a collapsible item with sub-items to be the default selected item MARK ALL OF ITS SUB-ITEMS WITH THE isSelected: true property. #
List<CollapsibleItem> get _items {
return [
CollapsibleItem(
text: 'Shop',
iconImage: AssetImage("assets/shop_icon.png"), //`iconImage` has priority over `icon` property
icon: Icons.ac_unit,
onPressed: () => setState(() => _headline = 'Shop'),
onHold: () => ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: const Text("Shop"))
),
isSelected: true,
subItems: [
CollapsibleItem(
text: 'Cart',
icon: Icons.shopping_cart,
onPressed: () => setState(() => _headline = 'Cart'),
onHold: () => ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: const Text("Cart"))
),
isSelected: true,
)
]
),
CollapsibleItem(
text: 'Dashboard',
badgeCount: 7,
icon: Icons.assessment,
onPressed: () => setState(() => _headline = 'DashBoard'),
onHold: () => ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: const Text("DashBoard"))
),
),
CollapsibleItem(
text: 'Ice-Cream',
icon: Icons.icecream,
onPressed: () => setState(() => _headline = 'Ice-Cream'),
onHold: () => ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: const Text("Ice-Cream"))
),
),
CollapsibleItem(
text: 'Search',
icon: Icons.search,
onPressed: () => setState(() => _headline = 'Search'),
onHold: () => ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: const Text("Search"))
),
),
];
}
copied to clipboard

Define the body of the app (the widget where the main working of the app will be) and name it say _body.

Widget _body(Size size, BuildContext context) {
return Container(
height: double.infinity,
width: double.infinity,
color: Colors.blueGrey[50],
child: .........,
);
}
copied to clipboard

Finally completely define the CollapsibleSidebar widget by adding the list of CollapsibleItems named _items, the body of the app named _body and the customizable parameters as needed:

CollapsibleSidebar(
items: _items,
avatarImg: _avatarImg,
title: 'John Smith',
body: _body(size, context),
)
copied to clipboard
Also you can use the isCollapsed condition depending how you want the state of the sidebar to change (collapsed/expanded)
for example [size.width]
CollapsibleSidebar(
isCollapsed: MediaQuery.of(context).size.width <= 800,
items: _items,
avatarImg: _avatarImg,
title: 'John Smith',
body: _body(size, context),
)
copied to clipboard
Parameters (customizable attributes) #



Name
Data Type
Default Value
Description




isCollapsed
bool
true
can set condition to control state of sidebar (collapsed/expanded) on some property change


collapseOnBodyTap
bool
true
flag to enable/disable tapping on the body of the app (area other than the sidebar) to collapse the sidebar


items
List<CollapsibleItems>
---
List of CollapsibleItems


showTitle
bool
true
can set to false to hide title and avatar Image


title
String
---
Title of the Collapsible Sidebar


titleBack
bool
false
set to 'true' to use a back icon instead of avatar picture


titleBackIcon
Icons
Icons.arrow_back
the back icon is 'arrow_back' by default (customizable)


onTitleTap
Function
---
custom callback function called when title avatar or back icon is pressed


onHoverPointer
SystemMouseCursors
SystemMouseCursors.click
the default hover mouse pointer is set to 'click' type by default (customizable)


textStyle
TextStyle
---
custom style for sidebar title


titleStyle
TextStyle
---
custom style for collapsible items text


toggleTitleStyle
TextStyle
---
custom style for toggle button title


avatarImg
Image
---
Image to be displayed


body
Widget
---
The main body of the app (the underlying main widget other than the sidebar)


height
double
double.infinity
height of the Sidebar


minWidth
double
80
Width of Sidebar when Collapsed


maxWidth
double
270
Width of Sidebar when Expanded


borderRadius
double
15
Radius of the borders


iconSize
double
40
Size of the icons


customContentPaddingLeft
double
-1
Padding to the left of CollapsibleItems (keep value less than 0 for default padding)


toggleTitle
String
'Collapse'
title text of Toggle Button


toggleButtonIcon
Icons
Icons.chevron_right
Icon of the Toggle button


backgroundColor
Color
Color(0xff2B3138)
The background color


avatarBackgroundColor
Color
Color(0xff6A7886)
The avatar background color


selectedIconBox
Color
Color(0xff2F4047)
Color of Icon Box when selected


selectedIconColor
Color
Color(0xff4AC6EA)
Color of Icon when selected


selectedTextColor
Color
Color(0xffF3F7F7)
Color of text when selected


unselectedIconColor
Color
Color(0xff6A7886)
Color of Icon when not selected


unselectedTextColor
Color
Color(0xffC0C7D0)
Color of text when not selected


badgeBackgroundColor
Color
Color(0xffFF6767)
Background color of badges on Collapsible Items


badgeTextColor
Color
Color(0xffF3F7F7)
Badge Text color of badges on Collapsible Items


duration
Duration
Duration(milliseconds: 500)
Animation duration for collapsed->expanded & vice-versa


curve
Curves
Curves.fastLinearToSlowEaseIn
Animation curve for collapsed->expanded & vice-versa


screenPadding
double
4
Padding to the screen


topPadding
double
0
space between image avatar and icons


bottomPadding
double
0
space between icons and toggle button


itemPadding
double
10
space between collapsible items


customItemOffsetX
double
-1
X axis offset for collapsible items (keep value less than 0 for default offset)


fitItemsToBottom
bool
true
fit all icons to the end of the space between image avatar and toggle button


showToggleButton
bool
true
flag to enable/disable showing the toggle button


sidebarBoxShadow
List<BoxShadow>
[BoxShadow(color: Colors.blue, blurRadius: 10, spreadRadius: 0.01, offset: Offset(3, 3),),]
Just like the "BoxDecoration" parameter of a "Container"



License #

Apache 2.0

License

For personal and professional use. You cannot resell or redistribute these repositories in their original state.

Customer Reviews

There are no reviews.