passo_mobile_app/lib/screens/unit2/homepage.dart/components/dashboard.dart

273 lines
13 KiB
Dart
Raw Normal View History

2023-01-23 03:02:59 +00:00
import 'package:flutter/material.dart';
2023-04-25 07:50:36 +00:00
import 'package:flutter_bloc/flutter_bloc.dart';
2023-06-06 06:54:51 +00:00
import 'package:fluttericon/font_awesome5_icons.dart';
2023-04-25 07:50:36 +00:00
import 'package:unit2/screens/docsms/index.dart';
2023-01-23 03:02:59 +00:00
import 'package:unit2/screens/unit2/homepage.dart/module-screen.dart';
import 'package:unit2/theme-data.dart/colors.dart';
import 'package:unit2/utils/global.dart';
2023-04-25 07:50:36 +00:00
import 'package:unit2/utils/global_context.dart';
import 'package:unit2/utils/qr_scanner.dart';
import '../../../../bloc/docsms/docsms_bloc.dart';
2023-01-23 03:02:59 +00:00
class DashBoard extends StatelessWidget {
final List<Module> roles;
final int userId;
const DashBoard({super.key, required this.roles,required this.userId});
2023-01-23 03:02:59 +00:00
@override
Widget build(BuildContext context) {
2023-04-25 07:50:36 +00:00
List<String> finishRoles = [];
2023-01-23 03:02:59 +00:00
return Container(
padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 24),
height: MediaQuery.of(context).size.height,
2023-04-25 07:50:36 +00:00
////listview builder
2023-01-23 03:02:59 +00:00
child: ListView.builder(
scrollDirection: Axis.vertical,
shrinkWrap: true,
itemCount: roles.length,
itemBuilder: (BuildContext context, int index) {
2023-04-25 07:50:36 +00:00
//// gridview.count
return roles[index].roles.isNotEmpty
? SizedBox(
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
roles[index].name.toUpperCase(),
style: Theme.of(context)
.textTheme
.labelLarge!
.copyWith(fontSize: 12),
),
const SizedBox(
height: 8,
),
GridView.count(
shrinkWrap: true,
crossAxisCount: 4,
crossAxisSpacing: 8,
mainAxisSpacing: 10,
physics: const BouncingScrollPhysics(),
padding: const EdgeInsets.symmetric(
vertical: 5, horizontal: 5),
children: roles[index].roles.map((role) {
if (role.role.name!.toLowerCase() ==
'qr code scanner' &&
!finishRoles.contains("security")) {
print("1 true");
2023-04-25 07:50:36 +00:00
finishRoles.add('scanner');
for (var element in role.role.modules!) {
if (element!.name!.toLowerCase() == 'unit2') {
for (var element in element.objects!) {
if (element!.id == 9 &&
2023-04-25 07:50:36 +00:00
element.operations!
.contains("read")) {
return CardLabel(
2023-06-06 06:54:51 +00:00
ontap: () {
PassCheckArguments passCheckArguments = PassCheckArguments(roleId: role.role.id!, userId: userId);
Navigator.pushNamed(context, '/pass-check',arguments: passCheckArguments);
2023-06-06 06:54:51 +00:00
},
2023-04-25 07:50:36 +00:00
icon: role.icon,
title: "Pass Check",
);
}
}
}
}
return Container();
} else if (role.role.name!.toLowerCase() ==
'security guard' &&
!finishRoles.contains('scanner')) {
print("2 true");
2023-04-25 07:50:36 +00:00
finishRoles.add('security');
for (var element in role.role.modules!) {
if (element!.name!.toLowerCase() == 'unit2') {
for (var element in element.objects!) {
if (element!.id == 9 &&
element.operations!
.contains("read")) {
return CardLabel(
ontap: () {},
icon: role.icon,
title: "Pass Check",
);
}
}
}
}
return Container(color: Colors.red,);
2023-04-25 07:50:36 +00:00
} else if (role.role.name!.toLowerCase() ==
'field surveyor') {
print("3 true");
2023-04-25 07:50:36 +00:00
for (var element in role.role.modules!) {
if (element!.name!.toLowerCase() == 'rpass') {
for (var element in element.objects!) {
if (element!.id == 11 &&
element.operations!
.contains("read")) {
return CardLabel(
ontap: () {},
icon: role.icon,
title: "Field Surveyor",
);
}
}
}
}
return Container();
} else if (role.role.name!.toLowerCase() ==
'process server') {
print("4 true");
2023-04-25 07:50:36 +00:00
for (var element in role.role.modules!) {
if (element!.name!.toLowerCase() ==
'document management') {
for (var element in element.objects!) {
if (element!.id == 3 &&
element.operations!
.contains("read")) {
return CardLabel(
ontap: () async {
String? qrBarcode =
await qrScanner();
if (qrBarcode != null) {
Navigator.push(NavigationService.navigatorKey.currentContext!, MaterialPageRoute(builder:
(BuildContext context) {
return BlocProvider(
create: (context) => DocsmsBloc()
..add(LoadDocument(
documentId: qrBarcode)),
child:
const AutoReceiveDocument(),
);
}));
}
},
icon: role.icon,
title: "Process Server",
);
}
}
}
}
return Container();
2023-06-06 06:54:51 +00:00
} else if (role.role.name!.toLowerCase() ==
'establishment point-person' &&
2023-06-06 06:54:51 +00:00
!finishRoles.contains('superadmin')) {
finishRoles.add('establishment point-person');
2023-06-06 06:54:51 +00:00
for (var element in role.role.modules!) {
print("5 true");
2023-06-06 06:54:51 +00:00
if (element!.name!.toLowerCase() == 'unit2') {
for (var element in element.objects!) {
if (element!.id == 7 &&
2023-06-06 06:54:51 +00:00
element.operations!
.contains("upload")) {
2023-06-06 06:54:51 +00:00
return CardLabel(
ontap: () {},
icon: FontAwesome5.building,
title: "Establishment",
);
}
}
}
}
return Container();
} else if (role.role.name!.toLowerCase() ==
'establishment point-person' &&
!finishRoles.contains('superadmin')) {
finishRoles.add('establishment point-person');
for (var element in role.role.modules!) {
if (element!.name!.toLowerCase() == 'unit2') {
for (var element in element.objects!) {
if (element!.id == 7 &&
element.operations!
.contains("upload")) {
return CardLabel(
ontap: () {},
icon: FontAwesome5.building,
title: "Establishment",
);
}
}
}
}
2023-04-25 07:50:36 +00:00
return Container();
} else{
return Wrap();
2023-04-25 07:50:36 +00:00
}
2023-04-25 07:50:36 +00:00
}).toList()),
const SizedBox(
height: 8,
)
],
),
)
: Container();
2023-01-23 03:02:59 +00:00
}),
);
}
}
2023-04-25 07:50:36 +00:00
class PassCheckArguments{
final int roleId;
final int userId;
const PassCheckArguments({required this.roleId, required this.userId});
}
2023-04-25 07:50:36 +00:00
// ignore: must_be_immutable
class CardLabel extends StatelessWidget {
final String title;
final IconData icon;
final Function()? ontap;
const CardLabel(
{super.key,
required this.icon,
required this.title,
required this.ontap});
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: ontap,
child: Container(
padding: const EdgeInsetsDirectional.fromSTEB(8, 5, 8, 13),
alignment: Alignment.center,
decoration: const BoxDecoration(
color: Colors.white,
boxShadow: [
BoxShadow(color: Colors.black12, spreadRadius: 2, blurRadius: 3)
],
borderRadius: BorderRadius.all(Radius.circular(8))),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Expanded(
child: Icon(
icon,
size: 20,
weight: 100,
grade: 100,
color: second,
),
),
const SizedBox(
height: 5,
),
Text(
title,
textAlign: TextAlign.center,
style: Theme.of(context).textTheme.labelLarge!.copyWith(
fontSize: blockSizeVertical * 1.2,
fontWeight: FontWeight.bold),
),
]),
),
);
}
}