Files
absensi_sas_flutter/lib/widget/custom_drawer.dart

216 lines
8.0 KiB
Dart

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: [
Padding(
padding: EdgeInsets.only(
top: Constant.getActualYPhone(context: context, y: 50),
bottom: Constant.getActualYPhone(context: context, y: 10),
right: Constant.getActualXPhone(context: context, x: 24),
left: Constant.getActualXPhone(context: context, x: 24),
),
child: Container(
child: Image(
fit: BoxFit.cover,
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.of(context).popAndPushNamed(homeRoute);
},
),
ListTile(
leading: Icon(
Icons.person,
color: (currentMenu == 5)
? Constant.textOrange
: Constant.textLightGrey,
),
title: Text(
'Profil',
style: TextStyle(
color: (currentMenu == 5)
? Constant.textOrange
: Constant.textLightGrey,
),
),
onTap: () {
// Handle navigation to Home screen
Navigator.pop(context);
ref.read(currentPageProvider.state).update((state) => 5);
// Navigator.of(context).popAndPushNamed(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.logintitle_700(context: context)
.copyWith(color: Constant.textLightGrey),
),
),
),
],
),
),
);
}
}