329 lines
12 KiB
Dart
329 lines
12 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("-");
|
|
|
|
Future<String> 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 ?? "",
|
|
);
|
|
},
|
|
),
|
|
],
|
|
),
|
|
),
|
|
);
|
|
}
|
|
}
|