import 'package:flutter/material.dart'; import 'package:konectar_events/utils/apicall.dart'; import 'package:konectar_events/utils/app_theme.dart'; import 'package:konectar_events/utils/constants.dart'; import 'package:konectar_events/utils/sessionmanager.dart'; import 'package:konectar_events/view/login.dart'; import 'package:shared_preferences/shared_preferences.dart'; class HomeDrawer extends StatefulWidget { const HomeDrawer( {Key? key, this.screenIndex, this.iconAnimationController, this.callBackIndex}) : super(key: key); final AnimationController? iconAnimationController; final DrawerIndex? screenIndex; final Function(DrawerIndex)? callBackIndex; @override _HomeDrawerState createState() => _HomeDrawerState(); } class _HomeDrawerState extends State { List? drawerList; final Future _prefs = SharedPreferences.getInstance(); late Future _useremail; late Future _key; @override void initState() { setDrawerListArray(); _useremail = _prefs.then((SharedPreferences prefs) { return prefs.getString('useremail') ?? ""; }); _key = _prefs.then((SharedPreferences prefs) { return prefs.getString('token') ?? ""; }); super.initState(); } void setDrawerListArray() { drawerList = [ DrawerList( index: DrawerIndex.HOME, labelName: 'Events', //icon: Icon(Icons.home), ), // DrawerList( // index: DrawerIndex.Help, // labelName: 'Help', // isAssetsImage: true, // imageName: 'assets/images/supportIcon.png', // ), // DrawerList( // index: DrawerIndex.FeedBack, // labelName: 'FeedBack', // icon: Icon(Icons.help), // ), // DrawerList( // index: DrawerIndex.Invite, // labelName: 'Invite Friend', // icon: Icon(Icons.group), // ), // DrawerList( // index: DrawerIndex.Share, // labelName: 'Rate the app', // icon: Icon(Icons.share), // ), // DrawerList( // index: DrawerIndex.About, // labelName: 'About Us', // icon: Icon(Icons.info), // ), ]; } @override Widget build(BuildContext context) { var brightness = MediaQuery.of(context).platformBrightness; bool isLightMode = brightness == Brightness.light; return Scaffold( backgroundColor: AppTheme.notWhite.withOpacity(0.5), body: Column( crossAxisAlignment: CrossAxisAlignment.stretch, mainAxisAlignment: MainAxisAlignment.start, children: [ Container( width: double.infinity, padding: const EdgeInsets.only(top: 20.0), child: Container( padding: const EdgeInsets.all(16.0), child: Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start, children: [ AnimatedBuilder( animation: widget.iconAnimationController!, builder: (BuildContext context, Widget? child) { return ScaleTransition( scale: AlwaysStoppedAnimation(1.0 - (widget.iconAnimationController!.value) * 0.2), child: RotationTransition( turns: AlwaysStoppedAnimation(Tween( begin: 0.0, end: 24.0) .animate(CurvedAnimation( parent: widget.iconAnimationController!, curve: Curves.fastOutSlowIn)) .value / 360), child: Container( height: 100, width: 100, decoration: BoxDecoration( shape: BoxShape.circle, boxShadow: [ BoxShadow( color: AppTheme.grey.withOpacity(0.6), offset: const Offset(2.0, 4.0), blurRadius: 8), ], ), child: ClipRRect( borderRadius: const BorderRadius.all(Radius.circular(60.0)), child: CircleAvatar( radius: 24, backgroundColor: Constants.blueColor, // child: Icon( // Icons.person, // size: 18, // color: Colors.white, // ), child: Text( "S", style: TextStyle( fontSize: 24, fontWeight: FontWeight.bold, color: Colors.white), ), ), ), ), ), ); }, ), Padding( padding: const EdgeInsets.only(top: 8, left: 4), child: Text( 'Snehalatha Desai', style: TextStyle( fontWeight: FontWeight.w600, color: isLightMode ? AppTheme.grey : AppTheme.white, fontSize: 18, ), ), ), ], ), ), ), const SizedBox( height: 4, ), Divider( height: 1, color: AppTheme.grey.withOpacity(0.6), ), Expanded( child: ListView.builder( physics: const BouncingScrollPhysics(), padding: const EdgeInsets.all(0.0), itemCount: drawerList?.length, itemBuilder: (BuildContext context, int index) { return inkwell(drawerList![index]); }, ), ), Divider( height: 1, color: AppTheme.grey.withOpacity(0.6), ), Column( children: [ ListTile( title: Text( 'Sign Out', style: TextStyle( fontFamily: AppTheme.fontName, fontWeight: FontWeight.w600, fontSize: 16, color: AppTheme.darkText, ), textAlign: TextAlign.left, ), trailing: Icon( Icons.power_settings_new, color: Colors.red, ), onTap: () { onTapped(); }, ), SizedBox( height: MediaQuery.of(context).padding.bottom, ) ], ), ], ), ); } void onTapped() async { final resp = ApiCall().logout(await _key); print("resp:$resp"); await SessionManager().logoutSession(false).then((value) { Navigator.of(context).popUntil((route) => route.isFirst); // Navigator.of(context, rootNavigator: true).pushReplacementNamed("/"); Navigator.pushReplacement( context, MaterialPageRoute(builder: (context) => LoginScreen()), ); }); } Widget inkwell(DrawerList listData) { return Material( color: Colors.transparent, child: InkWell( splashColor: Colors.grey.withOpacity(0.1), highlightColor: Colors.transparent, onTap: () { navigationtoScreen(listData.index!); }, child: Stack( children: [ Container( padding: const EdgeInsets.only(top: 8.0, bottom: 8.0), child: Row( children: [ Container( width: 6.0, height: 46.0, // decoration: BoxDecoration( // color: widget.screenIndex == listData.index // ? Colors.blue // : Colors.transparent, // borderRadius: new BorderRadius.only( // topLeft: Radius.circular(0), // topRight: Radius.circular(16), // bottomLeft: Radius.circular(0), // bottomRight: Radius.circular(16), // ), // ), ), const Padding( padding: EdgeInsets.all(4.0), ), listData.isAssetsImage ? Container( width: 24, height: 24, child: Image.asset(listData.imageName, color: widget.screenIndex == listData.index ? Colors.blue : AppTheme.nearlyBlack), ) : Icon(listData.icon?.icon, color: widget.screenIndex == listData.index ? Colors.blue : AppTheme.nearlyBlack), const Padding( padding: EdgeInsets.all(4.0), ), Text( listData.labelName, style: TextStyle( fontWeight: FontWeight.w500, fontSize: 16, color: widget.screenIndex == listData.index ? Colors.black : AppTheme.nearlyBlack, ), textAlign: TextAlign.left, ), ], ), ), widget.screenIndex == listData.index ? AnimatedBuilder( animation: widget.iconAnimationController!, builder: (BuildContext context, Widget? child) { return Transform( transform: Matrix4.translationValues( (MediaQuery.of(context).size.width * 0.75 - 64) * (1.0 - widget.iconAnimationController!.value - 1.0), 0.0, 0.0), child: Padding( padding: EdgeInsets.only(top: 8, bottom: 8), child: Container( width: MediaQuery.of(context).size.width * 0.75 - 64, height: 46, decoration: BoxDecoration( color: Colors.blue.withOpacity(0.2), borderRadius: new BorderRadius.only( topLeft: Radius.circular(0), topRight: Radius.circular(28), bottomLeft: Radius.circular(0), bottomRight: Radius.circular(28), ), ), ), ), ); }, ) : const SizedBox() ], ), ), ); } Future navigationtoScreen(DrawerIndex indexScreen) async { widget.callBackIndex!(indexScreen); } } enum DrawerIndex { HOME, FeedBack, Help, Share, About, Invite, Testing, } class DrawerList { DrawerList({ this.isAssetsImage = false, this.labelName = '', this.icon, this.index, this.imageName = '', }); String labelName; Icon? icon; bool isAssetsImage; String imageName; DrawerIndex? index; }