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("-"); // useEffect(() { // WidgetsBinding.instance.addPostFrameCallback((timeStamp) async { // final staffID = ref.read(currentUserProvider)?.model.staffId ?? "0"; // if (staffID == "0") { // //not login // Navigator.of(context) // .pushNamedAndRemoveUntil(loginRoute, (route) => true); // // Navigator.popAndPushNamed(context, loginRoute); // return; // } // }); // 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 Container( width: Constant.getActualXPhone(context: context, x: 300), height: Constant.getActualYPhone(context: context, y: 844), child: Drawer( elevation: 0, shape: RoundedRectangleBorder( borderRadius: BorderRadius.all(Radius.circular(0))), child: Column( children: [ Expanded( child: ListView( children: [ // Container( // 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), ), ), Chip( backgroundColor: Constant.textLightGrey.withOpacity(0.16), label: Text( M_CompanyName.value, overflow: TextOverflow.ellipsis, style: TextStyle( color: Constant.textLightGrey, ), ), ), ListTile( leading: Icon( Icons.home, color: (currentMenu == 0) ? Constant.textOrange : Constant.textLightGrey, ), title: Text( 'Home', style: TextStyle( color: (currentMenu == 0) ? Constant.textOrange : Constant.textLightGrey, ), ), onTap: () { // Handle navigation to Home screen Navigator.pop(context); ref.read(currentPageProvider.state).update((state) => 0); Navigator.pushNamed(context, homeRoute); }, ), ListTile( leading: Icon( Icons.logout, color: Constant.textLightGrey, ), title: Text( 'Logout', style: TextStyle(color: Constant.textLightGrey), ), 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 ?? "", // ); }, ), ], ), ), // Versi Aplikasi Padding( padding: EdgeInsets.only( right: Constant.getActualXPhone(context: context, x: 20), bottom: Constant.getActualYPhone(context: context, y: 10), ), child: Align( alignment: Alignment.bottomRight, child: Text( 'Versi ${Constant.version}', style: Constant.titleH1_700(context: context) .copyWith(color: Constant.textLightGrey), ), ), ), ], ), ), ); } }