361 lines
12 KiB
Dart
361 lines
12 KiB
Dart
|
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<HomeDrawer> {
|
||
|
List<DrawerList>? drawerList;
|
||
|
final Future<SharedPreferences> _prefs = SharedPreferences.getInstance();
|
||
|
late Future<String> _useremail;
|
||
|
late Future<String> _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>[
|
||
|
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: <Widget>[
|
||
|
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: <Widget>[
|
||
|
AnimatedBuilder(
|
||
|
animation: widget.iconAnimationController!,
|
||
|
builder: (BuildContext context, Widget? child) {
|
||
|
return ScaleTransition(
|
||
|
scale: AlwaysStoppedAnimation<double>(1.0 -
|
||
|
(widget.iconAnimationController!.value) * 0.2),
|
||
|
child: RotationTransition(
|
||
|
turns: AlwaysStoppedAnimation<double>(Tween<double>(
|
||
|
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>[
|
||
|
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: <Widget>[
|
||
|
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: <Widget>[
|
||
|
Container(
|
||
|
padding: const EdgeInsets.only(top: 8.0, bottom: 8.0),
|
||
|
child: Row(
|
||
|
children: <Widget>[
|
||
|
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<void> 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;
|
||
|
}
|