You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
healthcare-frontend/lib/dashboard.dart

580 lines
20 KiB

1 year ago
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:healthcare_user/settings.dart';
import 'package:image_picker/image_picker.dart';
import 'dart:io';
import 'dart:ui' as ui;
import 'login.dart';
class Dashboard extends StatefulWidget {
const Dashboard({super.key});
@override
State<Dashboard> createState() => _DashboardState();
}
class _DashboardState extends State<Dashboard> {
int _selectedIndex = 0;
TextEditingController tankNameController = TextEditingController();
TextEditingController blockNameController = TextEditingController();
TextEditingController capacityController = TextEditingController();
String dropdownTypeOfWater = 'General';
String dropdownTankLocation = 'Sump';
var typeOfWaterItems = [
'General',
'Bore',
'Tanker',
];
var typeOfTankLocationItems = [
'Sump',
'Overhead',
];
bool isT1Checked = false;
bool isT2Checked = false;
bool isT3Checked = false;
bool isS2T1Checked = false;
bool isS2T2Checked = false;
bool isS2T3Checked = false;
bool isS3T1Checked = false;
bool isS3T2Checked = false;
bool isS3T3Checked = false;
static const TextStyle optionStyle =
TextStyle(fontSize: 30, fontWeight: FontWeight.bold);
final ImagePicker _picker = ImagePicker();
bool isTablet = false;
bool isPhone = true;
final double devicePixelRatio = ui.window.devicePixelRatio;
static final ui.Size size1 = ui.window.physicalSize;
final double width = size1.width;
final double height = size1.height;
devicedetection() {
if (devicePixelRatio < 2 && (width >= 1000 || height >= 1000)) {
isTablet = true;
isPhone = false;
} else if (devicePixelRatio == 2 && (width >= 1920 || height >= 1920)) {
isTablet = true;
isPhone = false;
} else {
isTablet = false;
isPhone = true;
}
}
Widget _dashBoard() {
return Container(
color: screenBackgroundColor,
child: Column(
children: <Widget>[
Container(
height: MediaQuery.of(context).size.height * .250,
width: double.infinity,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(0),
),
//color: Colors.red,
child: FittedBox(
child: Image(
image: isTablet
? AssetImage('images/appbg.png')
: AssetImage('images/mobilebg.png'),
),
fit: BoxFit.fill,
)),
SizedBox(height: 5),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Expanded(
child: GestureDetector(
onTap: () {
/*Navigator.push(
context,
MaterialPageRoute(builder: (context) => TankLevelsNew()),
);*/
},
child: Container(
padding: EdgeInsets.all(05),
margin:
EdgeInsets.only(left: 15, top: 10, right: 0, bottom: 0),
//height: MediaQuery.of(context).size.height * .05,
//width: MediaQuery.of(context).size.width * .45,
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(12),
),
// Change button text when light changes state.
child: Column(
children: [
Container(
padding: EdgeInsets.fromLTRB(35, 10, 0, 0),
child: new SvgPicture.asset(
"assets/images/tanklevels.svg")),
Text(
'Tank Levels',
style: dashboardTextStyle(),
),
],
),
),
)),
],
),
],
),
);
}
@override
void initState() {
super.initState();
devicedetection();
}
showLogoutAlertDialog(context) {
return showDialog(
context: context,
barrierDismissible: false,
builder: (BuildContext context) {
return StatefulBuilder(
builder: (BuildContext context, StateSetter setState) {
return AlertDialog(
title: const Text('Do you really want to logout?'),
actions: <Widget>[
TextButton(
child: Text('No', style: textButtonStyle()),
onPressed: () {
Navigator.of(context).pop();
},
),
TextButton(
child: Text('Yes', style: textButtonStyle()),
onPressed: () async {
await AppSettings.clearSharedPreferences();
await Navigator.pushAndRemoveUntil(
context,
MaterialPageRoute(builder: (context) => Login()),
(Route<dynamic> route) => false,
);
},
),
]);
});
});
}
@override
Widget build(BuildContext context) {
return WillPopScope(
onWillPop: () async {
if (_selectedIndex == 0) {
final shouldPop = await showDialog<bool>(
context: context,
builder: (context) {
return AlertDialog(
title: const Text('Do you want to exit app?',
style: TextStyle(
color: primaryColor,
fontSize: 20,
)),
actionsAlignment: MainAxisAlignment.spaceBetween,
actions: [
TextButton(
onPressed: () {
SystemNavigator.pop();
},
child: const Text('Yes',
style: TextStyle(
color: primaryColor,
fontSize: 20,
)),
),
TextButton(
onPressed: () {
Navigator.of(context).pop(false);
},
child: const Text('No',
style: TextStyle(
color: primaryColor,
fontSize: 20,
)),
),
],
);
},
);
return shouldPop!;
} else {
setState(() {
_selectedIndex = 0;
});
return false;
}
},
child: Scaffold(
resizeToAvoidBottomInset: false,
appBar: AppSettings.appBar('Arminta Water Management'),
drawer: Drawer(
// Add a ListView to the drawer. This ensures the user can scroll
// through the options in the drawer if there isn't enough vertical
// space to fit everything.
//backgroundColor: screenBackgroundColor,
child: ListView(
// Important: Remove any padding from the ListView.
padding: EdgeInsets.zero,
children: [
DrawerHeader(
decoration: const BoxDecoration(
color: primaryColor,
),
child: Row(
children: [
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Expanded(
child: GestureDetector(
child: Container(
width: MediaQuery.of(context).size.width * .20,
height:
MediaQuery.of(context).size.height * .15,
decoration: BoxDecoration(
shape: BoxShape.circle,
image: DecorationImage(
image: (AppSettings.updatedImage !=
null)
? FileImage(
AppSettings.updatedImage!)
as ImageProvider
: AssetImage(
"images/profile_pic.png"), // picked file
fit: BoxFit.cover)),
),
onTap: () {
/*showModalBottomSheet<void>(
context: context,
builder: (BuildContext context) {
return SizedBox(
height: 200,
child: Center(
child: Row(
mainAxisAlignment:
MainAxisAlignment.center,
children: <Widget>[
GestureDetector(
child: Icon(
Icons.camera_alt_outlined,
size: 100,
color: greyColor,
),
onTap: () async {
await takeImageFromCamera();
Navigator.pop(context);
},
),
SizedBox(
width: MediaQuery.of(context)
.size
.width *
.20,
),
GestureDetector(
child: Icon(
Icons.photo,
size: 100,
color: greyColor,
),
onTap: () async {
await pickImageFromGallery();
Navigator.pop(context);
},
),
],
),
),
);
});*/
},
),
),
Text(
AppSettings.userName,
style: TextStyle(color: Colors.white, fontSize: 15),
),
Text(
AppSettings.phoneNumber,
style: TextStyle(color: Colors.white, fontSize: 15),
),
Text(
AppSettings.email,
style: TextStyle(color: Colors.white, fontSize: 15),
),
],
),
Container()
],
)),
ListTile(
title: Row(
children: const [
Image(
image: const AssetImage('images/editprofileblue.png'),
height: 25,
width: 25,
fit: BoxFit.fill),
const SizedBox(
width: 10,
),
const SizedBox(
width: 10,
),
Text('Edit Profile', style: TextStyle(color: primaryColor)),
],
),
onTap: () {
/* Navigator.push(
context,
MaterialPageRoute(builder: (context) => UpdateProfile()),
);*/
},
),
Divider(
color: Colors.grey,
),
// Add Tanks
ListTile(
title: Row(
children: const [
Image(
image: const AssetImage('images/addtankerblue.png'),
height: 25,
width: 25,
fit: BoxFit.fill),
const SizedBox(
width: 10,
),
Text('Add Tanks', style: TextStyle(color: primaryColor)),
],
),
onTap: () {
/*Navigator.push(
context,
MaterialPageRoute(builder: (context) => AddTanks()),
);*/
},
),
Divider(
color: Colors.grey,
),
ListTile(
title: Row(
children: const [
Image(
image: const AssetImage('images/tankviewblue.png'),
height: 25,
width: 25,
fit: BoxFit.fill),
const SizedBox(
width: 10,
),
Text('Tanks View', style: TextStyle(color: primaryColor)),
],
),
onTap: () {
/*Navigator.push(
context,
MaterialPageRoute(builder: (context) => TanksView()),
);*/
},
),
Divider(
color: Colors.grey,
),
//Add Tanker
ListTile(
title: Row(
children: const [
Image(
image: const AssetImage('images/suppliersblue.png'),
height: 25,
width: 25,
fit: BoxFit.fill),
const SizedBox(
width: 10,
),
Text('Add Water Suppliers',
style: TextStyle(color: primaryColor)),
],
),
onTap: () {
/* Navigator.push(
context,
MaterialPageRoute(builder: (context) => Suppliers()),
);*/
},
),
Divider(
color: Colors.grey,
),
ListTile(
title: Row(
children: const [
Image(
image: const AssetImage('images/connectionsblue.png'),
height: 25,
width: 25,
fit: BoxFit.fill),
const SizedBox(
width: 10,
),
Text('Connections', style: TextStyle(color: primaryColor)),
],
),
onTap: () {
/* Navigator.push(
context,
MaterialPageRoute(builder: (context) => ConnectionsView()),
);*/
},
),
Divider(
color: Colors.grey,
),
ListTile(
title: Row(
children: const [
Image(
image: const AssetImage('images/resourceblue.png'),
height: 25,
width: 25,
fit: BoxFit.fill),
const SizedBox(
width: 10,
),
Text('Resources', style: TextStyle(color: primaryColor)),
],
),
onTap: () {
/*Navigator.push(
context,
MaterialPageRoute(builder: (context) => Resources()),
);*/
},
),
Divider(
color: Colors.grey,
),
ListTile(
title: Row(
children: const [
Image(
image: const AssetImage('images/customercareblue.png'),
height: 25,
width: 25,
fit: BoxFit.fill),
const SizedBox(
width: 10,
),
Text('Accounts', style: TextStyle(color: primaryColor)),
],
),
onTap: () {
/*Navigator.push(
context,
MaterialPageRoute(builder: (context) => UserAccounts()),
);*/
},
),
Divider(
color: Colors.grey,
),
ListTile(
title: Row(
children: const [
Image(
image: const AssetImage('images/customercareblue.png'),
height: 25,
width: 25,
fit: BoxFit.fill),
const SizedBox(
width: 10,
),
Text('Customer Support',
style: TextStyle(color: primaryColor)),
],
),
onTap: () {},
),
Divider(
color: Colors.grey,
),
ListTile(
title: Row(
children: const [
Image(
image: const AssetImage('images/logoutblue.png'),
height: 25,
width: 25,
fit: BoxFit.fill),
const SizedBox(
width: 10,
),
Text('Logout', style: TextStyle(color: primaryColor)),
],
),
onTap: () async {
showLogoutAlertDialog(context);
},
),
],
),
),
body: _dashBoard(),
/*body: IndexedStack(
index: _selectedIndex,
children: screens,
),*/
/* bottomNavigationBar: Container(
//height: MediaQuery.of(context).size.height,
child: BottomNavigationBar(
items: const <BottomNavigationBarItem>[
BottomNavigationBarItem(
icon: Icon(
Icons.home,
),
label: 'Home',
),
BottomNavigationBarItem(
icon: Icon(Icons.propane_tank),
label: 'Add Tanks',
),
*/ /*BottomNavigationBarItem(
icon: Icon(Icons.private_connectivity_outlined),
label: 'CreateConnections',
),*/ /*
BottomNavigationBarItem(
icon: Icon(Icons.list_alt),
label: 'Add Tanker',
),
],
currentIndex: _selectedIndex,
selectedItemColor: primaryColor,
unselectedItemColor: greyColor,
showUnselectedLabels: true,
onTap: _onItemTapped,
),
),*/
),
);
}
}