import 'dart:async'; import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:shared_preferences/shared_preferences.dart'; import '../app/constant.dart'; import '../app/route.dart'; import '../provider/current_menu_provider.dart'; import '../provider/current_user_provider.dart'; import '../screen/login/logout_provider.dart'; class CustomDrawer extends HookConsumerWidget { // final String userCompany; const CustomDrawer({ Key? key, // required this.userCompany, }) : super(key: key); @override Widget build(BuildContext context, WidgetRef ref) { final selectedUser = ref.read(currentUserProvider); final isLoading = useState(false); final errorMessage = useState(""); final successMessage = useState(""); final M_CompanyName = useState("-"); Future getCompanyName() async { final shared = await SharedPreferences.getInstance(); String M_CompanyName = "-"; if (shared != null) { final bearerString = shared.get(Constant.bearerName).toString(); final xmodel = jsonDecode(bearerString); if (xmodel != null) { M_CompanyName = xmodel["model"]["M_CompanyName"]; } } if (M_CompanyName == "0") { // throw BaseRepositoryException(message: 'Invalid Company ID'); } return M_CompanyName; } useEffect(() { WidgetsBinding.instance.addPostFrameCallback((timeStamp) async { final userID = ref.read(currentUserProvider)?.model.M_UserID ?? "0"; if (userID == "0") { //not login Navigator.of(context) .pushNamedAndRemoveUntil(loginRoute, (route) => true); // Navigator.popAndPushNamed(context, loginRoute); return; } M_CompanyName.value = await getCompanyName(); }); return () {}; }, []); ref.listen(logoutProvider, (prev, next) async { if (next is LogoutStateLoading) { isLoading.value = true; } else if (next is LogoutStateError) { isLoading.value = false; errorMessage.value = next.message; Timer(const Duration(seconds: 3), () { errorMessage.value = ""; }); } else if (next is LogoutStateDone) { isLoading.value = false; final shared = await SharedPreferences.getInstance(); final bearerString = shared.get(Constant.bearerName).toString(); // print(bearerString); if (bearerString.isNotEmpty) { shared.remove(bearerString); shared.clear(); // Navigator.popAndPushNamed(context, loginRoute); Navigator.of(context) .pushNamedAndRemoveUntil(loginRoute, (route) => false); } Timer(const Duration(seconds: 3), () async { successMessage.value = ""; }); } }); final currentMenu = ref.read(currentPageProvider); return Drawer( elevation: 0, shape: RoundedRectangleBorder( borderRadius: BorderRadius.all(Radius.circular(0))), child: Container( child: ListView( // padding: EdgeInsets.only( // top: Constant.getActualYPhone(context: context, y: 10), // ), children: [ Container( // decoration: BoxDecoration( // border: Border(bottom: BorderSide(color: Colors.transparent)) // <--- use the global theme to change the dividerColor property // ), child: Image( image: AssetImage('images/logo_sismedika_landscape.png')), ), SizedBox( height: Constant.getActualYPhone(context: context, y: 8), ), Padding( padding: EdgeInsets.only( top: Constant.getActualYPhone(context: context, y: 10), bottom: Constant.getActualYPhone(context: context, y: 10), right: Constant.getActualXPhone(context: context, x: 24), left: Constant.getActualXPhone(context: context, x: 24), ), child: Container( width: Constant.getActualXPhone(context: context, x: 300), ), ), // Expanded( // child: Padding( // padding: EdgeInsets.only( // left: Constant.getActualXPhone(context: context, x: 24), // right: Constant.getActualXPhone(context: context, x: 71), // ), // child: Container( // decoration: BoxDecoration( // borderRadius: BorderRadius.circular(6), // color: Constant.textGrey.withOpacity(0.16), // ), // child: Padding( // padding: EdgeInsets.only( // left: Constant.getActualXPhone(context: context, x: 8), // right: Constant.getActualXPhone(context: context, x: 8), // ), // child: Text( // M_CompanyName.value, // style: Constant.body3(context: context).copyWith( // fontWeight: FontWeight.w700, // color: Constant.textGreyv2, // backgroundColor: Constant.textGrey.withOpacity(0.16), // ), // ), // ), // ), // ), // ), Chip( backgroundColor: Constant.textGrey.withOpacity(0.16), label: Text( M_CompanyName.value, style: TextStyle( color: Constant.textGreyv2, ), ), ), ListTile( leading: Icon( Icons.home, color: (currentMenu == 0) ? Constant.pcBtnBackgroundColor : Constant.textGreyv2, ), title: Text( 'Home', style: TextStyle( color: (currentMenu == 0) ? Constant.pcBtnBackgroundColor : Constant.textGreyv2, ), ), // tileColor: (currentMenu == 0) // ? Constant.pcBtnBackgroundColor // : Colors.transparent, onTap: () { // Handle navigation to Home screen Navigator.pop(context); ref.read(currentPageProvider.state).update((state) => 0); Navigator.pushNamed(context, homeRoute); }, ), ListTile( leading: Icon( Icons.money, color: (currentMenu == 1) ? Constant.pcBtnBackgroundColor : Constant.textGreyv2, ), title: Text( 'Transaksi', style: TextStyle( color: (currentMenu == 1) ? Constant.pcBtnBackgroundColor : Constant.textGreyv2, ), ), // tileColor: (currentMenu == 1) // ? Constant.pcBtnBackgroundColor // : Colors.transparent, onTap: () { // Handle navigation to Transaksi screen Navigator.pop(context); ref.read(currentPageProvider.state).update((state) => 1); Navigator.pushNamed(context, transaksiRoute); }, ), ListTile( leading: Icon( Icons.history, color: (currentMenu == 2) ? Constant.pcBtnBackgroundColor : Constant.textGreyv2, ), title: Text( 'History Transaksi', style: TextStyle( color: (currentMenu == 2) ? Constant.pcBtnBackgroundColor : Constant.textGreyv2, ), ), // tileColor: (currentMenu == 2) // ? Constant.pcBtnBackgroundColor // : Colors.transparent, onTap: () { // Handle navigation to User screen Navigator.pop(context); ref.read(currentPageProvider.state).update((state) => 2); Navigator.pushNamed(context, historyTransaksiRoute); }, ), ListTile( leading: Icon( Icons.feed, color: (currentMenu == 3) ? Constant.pcBtnBackgroundColor : Constant.textGreyv2, ), title: Text( 'Report', style: TextStyle( color: (currentMenu == 3) ? Constant.pcBtnBackgroundColor : Constant.textGreyv2, ), ), // tileColor: (currentMenu == 3) // ? Constant.pcBtnBackgroundColor // : Colors.transparent, onTap: () { // Handle navigation to Transaksi screen Navigator.pop(context); ref.read(currentPageProvider.state).update((state) => 3); Navigator.pushNamed(context, reportRoute); }, ), // ListTile( // title: Text( // 'User', // style: TextStyle( // color: (currentMenu == 4) // ? Constant.textWhite // : Constant.textBlack, // ), // ), // tileColor: (currentMenu == 4) // ? Constant.pcBtnBackgroundColor // : Colors.transparent, // onTap: () { // // Handle navigation to User screen // Navigator.pop(context); // ref.read(currentPageProvider.state).update((state) => 4); // Navigator.pushNamed(context, userRoute); // }, // ), // ListTile( // title: Text( // 'Change Company', // style: TextStyle( // color: (currentMenu == 5) // ? Constant.textWhite // : Constant.textBlack, // ), // ), // tileColor: (currentMenu == 5) // ? Constant.pcBtnBackgroundColor // : Colors.transparent, // onTap: () { // // Handle navigation to User screen // Navigator.pop(context); // ref.read(currentPageProvider.state).update((state) => 5); // Navigator.pushNamed(context, changeCompanyRoute); // }, // ), ListTile( leading: Icon( Icons.logout, color: Constant.textGreyv2, ), title: Text( 'Logout', style: TextStyle(color: Constant.textGreyv2), ), onTap: () { // di set ke 0 lagi ref.read(currentPageProvider.state).update((state) => 0); ref.read(logoutProvider.notifier).logout( M_UserID: selectedUser?.model.M_UserID ?? "", M_UserUsername: selectedUser?.model.M_UserUsername ?? "", ); }, ), ], ), ), ); } }