import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:watermanagement/adddeliveryboy.dart'; import 'package:watermanagement/addtankers.dart'; import 'package:watermanagement/conect_request_customers.dart'; import 'package:watermanagement/getdeliveryboydata.dart'; import 'package:watermanagement/login.dart'; import 'package:watermanagement/settings.dart'; import 'package:image_picker/image_picker.dart'; import 'package:watermanagement/tankersview.dart'; import 'dart:convert'; import 'dart:io'; import 'package:watermanagement/updateprofile.dart'; import 'booking_requests.dart'; import 'package:firebase_messaging/firebase_messaging.dart'; class Dashboard extends StatefulWidget { const Dashboard({super.key}); @override State createState() => _DashboardState(); } class _DashboardState extends State { int _selectedIndex = 0; TextEditingController tankNameController = TextEditingController(); TextEditingController blockNameController = TextEditingController(); TextEditingController capacityController = TextEditingController(); static const TextStyle optionStyle = TextStyle(fontSize: 30, fontWeight: FontWeight.bold); final ImagePicker _picker = ImagePicker(); Future uploadProfileApi(image) async { var payload = new Map(); payload["imagePath"] = image.toString(); var response1= await AppSettings.updateProfilePicture(payload); print(response1); } @override void initState() { super.initState(); initialize(); } initialize() async { FirebaseMessaging messaging = FirebaseMessaging.instance; FirebaseMessaging.onMessage.listen((RemoteMessage event) { print("message recieved"); print(event.notification!.body); }); FirebaseMessaging.onMessageOpenedApp.listen((message) { print('Message clicked!'); }); FirebaseMessaging.onMessage.listen((RemoteMessage event) { print("message recieved"); print(event.notification!.body); showDialog( context: context, builder: (BuildContext context) { return AlertDialog( title: Text(event.notification!.body!), content: Text(event.notification!.title!), actions: [ TextButton( child: Text("Ok"), onPressed: () { Navigator.of(context).pop(); }, ) ], ); }); }); } Future pickImageFromGallery() async { try { final image = await _picker.pickImage(source: ImageSource.gallery); if (image == null) return; final imageTemp = File(image.path); AppSettings.preLoaderDialog(context); var res = await AppSettings.uploadImageHTTPNew(image); print(jsonDecode(res)); Navigator.of(context, rootNavigator: true).pop(); setState(() { AppSettings.profilePictureUrl = jsonDecode(res)['picture']; }); AppSettings.saveData('profile', jsonDecode(res)['picture'], 'STRING'); } on PlatformException catch (e) { print('Failed to pick image: $e'); } } Future takeImageFromCamera() async { try { final image = await _picker.pickImage(source: ImageSource.camera); if (image == null) return; final imageTemp = File(image.path); AppSettings.preLoaderDialog(context); var res = await AppSettings.uploadImageHTTPNew(image); print(jsonDecode(res)); Navigator.of(context, rootNavigator: true).pop(); setState(() { AppSettings.profilePictureUrl = jsonDecode(res)['picture']; }); AppSettings.saveData('profile', jsonDecode(res)['picture'], 'STRING'); } on PlatformException catch (e) { print('Failed to pick image: $e'); } } Widget _dashBoard() { return Container( color: screenBackgroundColor, child: Column( children: [ 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: const AssetImage('images/appbgsupplier.png'), ), fit: BoxFit.fill, ) ), SizedBox( height: 5 ), Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Expanded( child: GestureDetector( onTap: () { Navigator.push( context, MaterialPageRoute(builder: (context) => TankersView()), ); }, child: Container( padding: EdgeInsets.all(05), margin: EdgeInsets.only(left: 10, top: 10, right: 10, 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/tankersview.svg")), Text( 'Takers View', style: dashboardTextStyle(), ), ], ), ), )), SizedBox( width: MediaQuery.of(context).size.width * .02, ), Expanded( child: GestureDetector( onTap: () { Navigator.push( context, MaterialPageRoute(builder: (context) => GetDeliveryboyData()), ); }, child: Container( padding: EdgeInsets.all(05), margin: EdgeInsets.only(left:10, top:10, right: 10, 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: Center( child: Column( children: [ Container( //height: 50, padding: EdgeInsets.fromLTRB(35, 10,0,0), child: new SvgPicture.asset("assets/images/deliveryboyview.svg") ), Text('Deliveryboys View',style: dashboardTextStyle(),), ], ), ) ), ), ) ], ), Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Expanded( child: GestureDetector( onTap: () { Navigator.push( context, MaterialPageRoute(builder: (context) => ConectedPendingCustomers()), ); }, child: Container( padding: EdgeInsets.all(05), margin: EdgeInsets.only(left:10, top:10, right: 10, 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: Center( child: Column( children: [ Container( //height: 50, padding: EdgeInsets.fromLTRB(35, 10,0,0), child: new SvgPicture.asset("assets/images/customers.svg") ), Text('Customers',style: dashboardTextStyle(),), ], ), ) ), )), SizedBox( width: MediaQuery.of(context).size.width * .02, ), Expanded( child: GestureDetector( onTap: () { Navigator.push( context, MaterialPageRoute(builder: (context) => BookingRequets()), ); }, child: Container( padding: EdgeInsets.all(05), margin: EdgeInsets.only(left:10, top:10, right: 10, 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: Center( child: Column( children: [ Container( //height: 50, padding: EdgeInsets.fromLTRB(35, 10,0,0), child: new SvgPicture.asset("assets/images/booking_request.svg") ), Text('Booking Requests',style: dashboardTextStyle(),), ], ), ) ), ), ) ], ), //==============================list2 ], ), ); } 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: [ 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 route) => false,); }, ), ] ); }); } ); } @override Widget build(BuildContext context) { return WillPopScope( onWillPop: () async { if(_selectedIndex==0){ final shouldPop = await showDialog(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( backgroundColor: secondaryColor, // 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 > 600) ? MediaQuery.of(context).size.width * .30 : MediaQuery.of(context).size.width * .60, // Adjusted width for tablet height: (MediaQuery.of(context).size.width > 600) ? MediaQuery.of(context).size.height * .25 : MediaQuery.of(context).size.height * .50, // Adjusted height for tablet decoration: BoxDecoration( shape: BoxShape.rectangle, border: Border.all(width: 2, color: Colors.blueGrey), image: DecorationImage( image: (AppSettings.profilePictureUrl != '' && AppSettings.profilePictureUrl != 'null') ? NetworkImage(AppSettings.profilePictureUrl) as ImageProvider : AssetImage(" images/profile_pic.png"), // picked file fit: BoxFit.fitWidth, ), ), ), onTap: () { showModalBottomSheet( context: context, builder: (BuildContext context) { return SizedBox( height: 200, child: Center( child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ 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.suppliername, 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 Tankers',style: TextStyle(color:primaryColor)), ], ), onTap: () { Navigator.push( context, MaterialPageRoute(builder: (context) => AddTankers()), ); }, ), Divider( color: Colors.grey, ), // Add Tanks ListTile( title: Row( children: const [ Image(image: const AssetImage('images/connectionsblue.png'),height: 25,width: 25,fit: BoxFit.fill), const SizedBox( width: 10, ), Text('Add Deliveryboy',style: TextStyle(color:primaryColor)), ], ), onTap: () { Navigator.push( context, MaterialPageRoute(builder: (context) => Deliverboy()), ); }, ), 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( 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, ), ),*/ ), ); } }