From b0be1b56fcc461822297a085097ece8417955fcc Mon Sep 17 00:00:00 2001 From: Sneha Date: Mon, 27 Mar 2023 16:16:50 +0530 Subject: [PATCH] added functionality for update tanker --- images/profile_pic.png | Bin 0 -> 7579 bytes lib/addtankers.dart | 14 +- lib/dashboard.dart | 6 +- lib/models/tankersModel.dart | 112 --- ...view_model.dart => tankersview_model.dart} | 15 + lib/settings.dart | 38 +- lib/tankersview.dart | 657 ++++++++++++++++++ lib/tanksview.dart | 272 -------- 8 files changed, 723 insertions(+), 391 deletions(-) create mode 100644 images/profile_pic.png delete mode 100644 lib/models/tankersModel.dart rename lib/models/{tanksview_model.dart => tankersview_model.dart} (70%) create mode 100644 lib/tankersview.dart delete mode 100644 lib/tanksview.dart diff --git a/images/profile_pic.png b/images/profile_pic.png new file mode 100644 index 0000000000000000000000000000000000000000..3fd3f73bef2a4a3a89e3fd91b2eb2730dba2233c GIT binary patch literal 7579 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 literal 0 HcmV?d00001 diff --git a/lib/addtankers.dart b/lib/addtankers.dart index 8806a2c..592a0f2 100644 --- a/lib/addtankers.dart +++ b/lib/addtankers.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:watermanagement/settings.dart'; +import 'package:watermanagement/tankersview.dart'; import 'dashboard.dart'; @@ -73,6 +74,7 @@ class _AddTankersState extends State { @override Widget build(BuildContext context) { return Scaffold( + appBar: AppSettings.appBar('Add Tanker'), body: SafeArea( child: SingleChildScrollView( child: Column( @@ -455,9 +457,9 @@ class _AddTankersState extends State { payload["phoneNumber"] = tankerPhoneNumberController.text.toString(); payload["alternative_phoneNumber"] = tankerAlternativePhoneNumberController.text.toString(); payload["capacity"] = tankerCapacityController.text.toString(); - payload["typeofwater"] = waterTypes; + payload["typeofwater"] = waterTypes; payload["price"] = waterPrice; - payload["supplier_address"] = ''; + payload["supplier_address"] = AppSettings.supplierAddress; payload["supplier_name"] = AppSettings.suppliername; bool tankStatus = await AppSettings.addTankers(payload); @@ -469,12 +471,18 @@ class _AddTankersState extends State { tankerNameController.text = ''; tankerPhoneNumberController.text = ''; tankerCapacityController.text = ''; + tankerAlternativePhoneNumberController.text=''; + tankerDrinkingPriceController.text=''; + tankerBorePriceController.text=''; waterPrice=[]; waterTypes=[]; + isDrinkingChecked=false; + isBoreChecked=false; + Navigator.pop(context); await Navigator.push( context, MaterialPageRoute( - builder: (context) => const Dashboard()), + builder: (context) => TankersView()), ); } diff --git a/lib/dashboard.dart b/lib/dashboard.dart index ad79a99..f03f829 100644 --- a/lib/dashboard.dart +++ b/lib/dashboard.dart @@ -7,7 +7,7 @@ import 'package:watermanagement/login.dart'; import 'package:watermanagement/place_picker.dart'; import 'package:watermanagement/settings.dart'; import 'package:image_picker/image_picker.dart'; -import 'package:watermanagement/tanksview.dart'; +import 'package:watermanagement/tankersview.dart'; import 'dart:io'; @@ -367,13 +367,13 @@ class _DashboardState extends State { const SizedBox( width: 10, ), - Text('Get All Tanks',style: TextStyle(color:primaryColor)), + Text('Tankers View',style: TextStyle(color:primaryColor)), ], ), onTap: () { Navigator.push( context, - MaterialPageRoute(builder: (context) => TanksView()), + MaterialPageRoute(builder: (context) => TankersView()), ); }, ), diff --git a/lib/models/tankersModel.dart b/lib/models/tankersModel.dart deleted file mode 100644 index 9901080..0000000 --- a/lib/models/tankersModel.dart +++ /dev/null @@ -1,112 +0,0 @@ - -import 'package:watermanagement/settings.dart'; - -class TankersModel { - String tanker_name = ''; - var capacity=''; - String type_of_water=''; - String phone_number=''; - List capacitiesOfTanker=[]; - List showCapacity=[]; - List waterType=[]; - List showTypeofWater=[]; - var typeOfWaterForBooking=[]; - var capacitiesForBooking=[]; - - bool isFiveChecked=false; - bool isTenChecked=false; - bool isFifteenChecked=false; - bool isTwentyChecked=false; - bool isDrinkingChecked=false; - bool isBoreChecked=false; - List updatedCapacities=[]; - List updatedWaterTypes=[]; - - - TankersModel(); - - - factory TankersModel.fromJson(Map json){ - TankersModel rtvm = new TankersModel(); - - rtvm.tanker_name = json['tankerName'] ?? ''; - rtvm.phone_number = json['phoneNumber'] ?? ''; - rtvm.capacitiesOfTanker = json['capacity']??[]; - - rtvm.capacitiesOfTanker.forEach((element) { - - rtvm.showCapacity.add(element['capacity']); - - rtvm.capacitiesForBooking.add(element['capacity']); - - rtvm.capacity=rtvm.showCapacity.join(","); - - if(element['capacity']=='5000'){ - - rtvm.isFiveChecked=true; - rtvm.updatedCapacities.add({'capacity': '5000'}); - } - else if(element['capacity']=='10000'){ - rtvm.isTenChecked=true; - rtvm.updatedCapacities.add({'capacity': '10000'}); - } - else if(element['capacity']=='15000'){ - rtvm.isFifteenChecked=true; - rtvm.updatedCapacities.add({'capacity': '15000'}); - } - else if(element['capacity']=='20000'){ - rtvm.isTwentyChecked=true; - rtvm.updatedCapacities.add({'capacity': '20000'}); - } - else{ - rtvm.isFiveChecked=false; - rtvm.isFiveChecked=false; - rtvm.isFiveChecked=false; - rtvm.isTwentyChecked=false; - - rtvm.updatedCapacities.remove({'capacity': '5000'}); - rtvm.updatedCapacities.remove({'capacity': '10000'}); - rtvm.updatedCapacities.remove({'capacity': '15000'}); - rtvm.updatedCapacities.remove({'capacity': '20000'}); - } - - }); - - rtvm.waterType = json['typeofwater']??[]; - rtvm.waterType.forEach((element) { - - rtvm.showTypeofWater.add(element['typeofwater']); - - rtvm.typeOfWaterForBooking.add(element['typeofwater']); - - rtvm.type_of_water=rtvm.showTypeofWater.join(","); - - if(element['typeofwater'].toString().toUpperCase()=='DRINKING WATER'){ - - rtvm.isDrinkingChecked=true; - rtvm.updatedWaterTypes.add({'typeofwater': 'Drinking Water'}); - } - else if(element['typeofwater'].toString().toUpperCase()=='BORE WATER'){ - - rtvm.isBoreChecked=true; - rtvm.updatedWaterTypes.add({'typeofwater': 'Bore Water'}); - } - else{ - rtvm.isBoreChecked=false; - rtvm.isDrinkingChecked=false; - rtvm.updatedWaterTypes.remove({'typeofwater': 'Drinking Water'}); - rtvm.updatedWaterTypes.remove({'typeofwater': 'Bore Water'}); - } - }); - - return rtvm; - } - Map toJson() => { - "tankerName":this.tanker_name, - "capacity": this.capacity, - "typeofwater": this.type_of_water , - "phoneNumber": this.phone_number, - "capacity": this.capacitiesOfTanker, - "typeofwater": this.waterType, - }; -} \ No newline at end of file diff --git a/lib/models/tanksview_model.dart b/lib/models/tankersview_model.dart similarity index 70% rename from lib/models/tanksview_model.dart rename to lib/models/tankersview_model.dart index 57f548d..8dfcc4f 100644 --- a/lib/models/tanksview_model.dart +++ b/lib/models/tankersview_model.dart @@ -17,6 +17,10 @@ class GetTanksDetailsModel { String price_ui=''; Color cardColor=Colors.white; + bool isDrinking=false; + bool isBore=false; + List updatedWaterTypes=[]; + List updatePrice=[]; GetTanksDetailsModel(); @@ -35,6 +39,17 @@ class GetTanksDetailsModel { rtvm.water_type=rtvm.showTypeofWater.join(","); + + if(element['typeofwater'].toString().toLowerCase()=='drinking water'){ + rtvm.isDrinking=true; + rtvm.updatedWaterTypes.add({'typeofwater': 'Drinking Water'}); + } + else if(element['typeofwater'].toString().toLowerCase()=='bore water'){ + rtvm.isBore=true; + rtvm.updatedWaterTypes.add({'typeofwater': 'Bore Water'}); + } + + }); rtvm.price = json['price'] ?? []; diff --git a/lib/settings.dart b/lib/settings.dart index f0645f6..a63e8bc 100644 --- a/lib/settings.dart +++ b/lib/settings.dart @@ -64,6 +64,7 @@ class AppSettings { static String accessToken = ''; static String customerId = ''; static String supplierId = ''; + static String supplierAddress = ''; static String customerIdsign = ''; static List storedPreferenceValidKeys = ['suppliername', 'access_token']; static String preloadText = 'Please wait'; @@ -84,6 +85,7 @@ class AppSettings { static String verifyPhnUrl = host+'supplierphone'; static String resetTokenUrl = host+'reset_token'; static String addTankerUrl = host + 'addTankers'; + static String UpdateTankerUrl = host + 'updateTankers'; static String getTankersDataUrl = host + 'getTankers'; static String deleteTankerUrl = host + 'deleteTanker'; @@ -346,6 +348,38 @@ class AppSettings { } } + static Future updateTanker(tankerName, payload) async { + var uri = Uri.parse(UpdateTankerUrl + '/' + supplierId); + uri = uri.replace(query: 'tankerName=$tankerName'); + + try { + var response = await http.put(uri, + body: json.encode(payload), headers: await buildRequestHeaders()); + + if (response.statusCode == 200) { + return true; + } else if (response.statusCode == 401) { + bool status = await AppSettings.resetToken(); + if (status) { + response = await http.put(uri, + body: json.encode(payload), headers: await buildRequestHeaders()); + if (response.statusCode == 200) { + return true; + } else { + return false; + } + } else { + return false; + } + } else { + return false; + } + } catch (e) { + print(e); + return false; + } + } + static Future deleteTanker(tankerName) async { var uri = Uri.parse(deleteTankerUrl + '/' + supplierId); uri = uri.replace(query: 'tankerName=$tankerName'); @@ -378,7 +412,6 @@ class AppSettings { } } - static Future addDeliverboy(payload) async { var response = await http.post(Uri.parse(addDeliveryboyUrl + '/' + supplierId), body: json.encode(payload), headers: await buildRequestHeaders()); @@ -425,6 +458,8 @@ class AppSettings { await saveData('phone', input['simplydata']['phone'], 'STRING'); await saveData('email', input['simplydata']['email'][0]['email'], 'STRING'); await saveData('supplierId', input['simplydata']['supplierId'], 'STRING'); + await saveData('supplieraddress', input['simplydata']['office_address'], 'STRING'); + await loadDataFromMemory(); } static Future saveProfile(dynamic image) async { @@ -439,6 +474,7 @@ class AppSettings { email=await getData('email', 'STRING'); phoneNumber=await getData('phone', 'STRING'); supplierId=await getData('supplierId', 'STRING'); + supplierAddress=await getData('supplieraddress', 'STRING'); } //assign saved values to variables diff --git a/lib/tankersview.dart b/lib/tankersview.dart new file mode 100644 index 0000000..4cdf0ff --- /dev/null +++ b/lib/tankersview.dart @@ -0,0 +1,657 @@ +import 'dart:convert'; + +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:watermanagement/addtankers.dart'; + +import 'package:watermanagement/settings.dart'; + +import 'models/tankersview_model.dart'; + +class TankersView extends StatefulWidget { + + + + @override + State createState() => _TankersViewState(); +} + +class _TankersViewState extends State { + + List modelTanksViewList = []; + TextEditingController tankerNameController = TextEditingController(); + TextEditingController tankerPhoneController = TextEditingController(); + TextEditingController tankerAlterPhoneController = TextEditingController(); + TextEditingController updateTankerNameController = TextEditingController(); + TextEditingController updateTankerDescriptionController = TextEditingController(); + TextEditingController updateTankerPhoneNumberController = TextEditingController(); + TextEditingController updateTankerAlternatePhoneNumberController = TextEditingController(); + TextEditingController updateTankerCapacityController = TextEditingController(); + TextEditingController tankerBorePriceController = TextEditingController(); + TextEditingController tankerDrinkingPriceController = TextEditingController(); + + bool isLoading=false; + bool isDrinkingChecked = false; + bool isBoreChecked = false; + List waterTypes = []; + List waterPrice = []; + + List updateWaterTypes = []; + + + Future readJson() async { + var response1= await AppSettings.getTankers(); + print(response1); + setState(() { + modelTanksViewList = + ((jsonDecode(response1)['data']) as List).map((dynamic model) { + return GetTanksDetailsModel.fromJson(model); + }).toList(); + isLoading=false; + }); + } + + @override + void initState() { + isLoading=true; + readJson(); + super.initState(); + } + showUpdateTankerDialog(var object) async { + updateTankerNameController.text = object.tanker_name; + updateTankerDescriptionController.text = ''; + updateTankerPhoneNumberController.text = object.tanker_phone; + updateTankerCapacityController.text=object.capacity; + updateTankerAlternatePhoneNumberController.text = object.tanker_alterphone; + isDrinkingChecked=object.isDrinking; + isBoreChecked = object.isBore; + tankerDrinkingPriceController.text=object.pricetype[0].toString(); + tankerBorePriceController.text=object.pricetype[1].toString(); + + return showDialog( + context: context, + barrierDismissible: false, + builder: (BuildContext context) { + return StatefulBuilder( + builder: (BuildContext context, StateSetter setState) { + return AlertDialog( + title: const Text('Update Tanker'), + content: SingleChildScrollView( + child: ListBody( + children: [ + Container( + //padding: const EdgeInsets.fromLTRB(10, 10, 10, 0), + child: TextFormField( + cursorColor: greyColor, + controller: updateTankerNameController, + textCapitalization: TextCapitalization.characters, + decoration: const InputDecoration( + prefixIcon: Icon( + Icons.ac_unit_outlined, + color: greyColor, + ), + border: OutlineInputBorder( + borderSide: BorderSide(color: greyColor)), + focusedBorder: OutlineInputBorder( + borderSide: BorderSide(color: greyColor), + ), + enabledBorder: OutlineInputBorder( + borderSide: BorderSide(color: greyColor), + ), + labelText: 'Enter update tanker supplier name', + labelStyle: TextStyle( + color: greyColor, //<-- SEE HERE + ), + ), + ), //tanker name + ), + const SizedBox( + height: 30, + ), + Container( + //padding: const EdgeInsets.fromLTRB(10, 10, 10, 0), + child: TextFormField( + cursorColor: greyColor, + controller: updateTankerPhoneNumberController, + keyboardType: TextInputType.number, + decoration: const InputDecoration( + prefixIcon: Icon( + Icons.phone_android, + color: greyColor, + ), + border: OutlineInputBorder( + borderSide: BorderSide(color: greyColor)), + focusedBorder: OutlineInputBorder( + borderSide: BorderSide(color: greyColor), + ), + enabledBorder: OutlineInputBorder( + borderSide: BorderSide(color: greyColor), + ), + labelText: 'Enter phone number', + labelStyle: TextStyle( + color: greyColor, //<-- SEE HERE + ), + ), + ), + ), //phone number + const SizedBox( + height: 30, + ), + Visibility( + visible: true, + child: Container( + //padding: const EdgeInsets.fromLTRB(10, 10, 10, 0), + child: TextFormField( + cursorColor: greyColor, + controller: + updateTankerAlternatePhoneNumberController, + keyboardType: TextInputType.number, + decoration: const InputDecoration( + prefixIcon: Icon( + Icons.phone_android, + color: greyColor, + ), + border: OutlineInputBorder( + borderSide: BorderSide(color: greyColor)), + focusedBorder: OutlineInputBorder( + borderSide: BorderSide(color: greyColor), + ), + enabledBorder: OutlineInputBorder( + borderSide: BorderSide(color: greyColor), + ), + labelText: 'Enter alternate phone number', + labelStyle: TextStyle( + color: greyColor, //<-- SEE HERE + ), + ), + ), + )), //alternate phone number + const SizedBox( + height: 30, + ), + Visibility( + visible: true, + child: Container( + //padding: const EdgeInsets.fromLTRB(10, 10, 10, 0), + child: TextFormField( + onChanged: (value) { + value = '${AppSettings.formNum( + value.replaceAll(',', ''), + )}'; + updateTankerCapacityController.value = TextEditingValue( + text: value, + selection: TextSelection.collapsed( + offset: value.length, + ), + ); + }, + cursorColor: greyColor, + controller: updateTankerCapacityController, + keyboardType: TextInputType.number, + decoration: InputDecoration( + prefixIcon: Icon( + Icons.ac_unit_outlined, + color: greyColor, + ), + suffix: capacitySuffixText(), + border: OutlineInputBorder( + borderSide: BorderSide(color: greyColor)), + focusedBorder: OutlineInputBorder( + borderSide: BorderSide(color: greyColor), + ), + enabledBorder: OutlineInputBorder( + borderSide: BorderSide(color: greyColor), + ), + labelText: 'Enter Capacity', + labelStyle: TextStyle( + color: greyColor, //<-- SEE HERE + ), + ), + ), + )), //capacity + const SizedBox( + height: 30, + ), + Container( + padding: EdgeInsets.fromLTRB(20, 0, 20, 0), + child: Visibility( + visible: true, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + 'Choose type of water', + style: TextStyle(color: primaryColor,fontSize: 20), + ), + + SizedBox(height:10), + Row( + children: [ + Text( + 'Drinking', + style: TextStyle(color: Colors.black,fontSize: 20), + ), + Checkbox( + checkColor: Colors.white, + activeColor: primaryColor, + value: isDrinkingChecked, + onChanged: (bool? value) { + setState(() { + isDrinkingChecked = value!; + }); + if (isDrinkingChecked) { + + object.updatedWaterTypes + .add({'typeofwater': 'Drinking Water'}); + // waterPrice.add({'price': tankerDrinkingPriceController.text.toString()}); + + } else { + + object.updatedWaterTypes.removeWhere((e) => e['typeofwater'].toString().toUpperCase() == 'DRINKING WATER'); + // waterPrice.removeWhere((e) => e['price'].toString().toUpperCase() == tankerDrinkingPriceController.text.toString()); + } + }, + ), + + + + Visibility( + visible: isDrinkingChecked, + child: Container( + height: 40, + width:200, + child:TextFormField( + cursorColor: greyColor, + controller: tankerDrinkingPriceController, + keyboardType: TextInputType.number, + decoration: const InputDecoration( + prefixIcon: Icon( + Icons.currency_rupee, + color: greyColor, + ), + border: OutlineInputBorder( + borderSide: BorderSide(color: greyColor)), + focusedBorder: OutlineInputBorder( + borderSide: BorderSide(color: greyColor), + ), + enabledBorder: OutlineInputBorder( + borderSide: BorderSide(color: greyColor), + ), + labelText: 'Enter Price', + labelStyle: TextStyle( + color: greyColor, //<-- SEE HERE + ), + contentPadding: EdgeInsets.all(5), + ), + ), + + ), + ) + + ], + ), + + SizedBox(height:10), + + Row( + children: [ + Text( + 'Bore', + style: TextStyle(color: Colors.black,fontSize: 20), + ), + SizedBox(width: 35), + Checkbox( + checkColor: Colors.white, + activeColor: primaryColor, + value: isBoreChecked, + onChanged: (bool? value) { + setState(() { + isBoreChecked = value!; + }); + if (isBoreChecked) { + + object.updatedWaterTypes + .add({'typeofwater': 'Bore Water'}); + } else { + + object.updatedWaterTypes.removeWhere((e) => e['typeofwater'].toString().toUpperCase() == 'BORE WATER'); + } + }, + ), + + Visibility( + visible: isBoreChecked, + child: Container( + height: 40, + width:200, + child:TextFormField( + cursorColor: greyColor, + controller: tankerBorePriceController, + keyboardType: TextInputType.number, + decoration: const InputDecoration( + prefixIcon: Icon( + Icons.currency_rupee, + color: greyColor, + ), + border: OutlineInputBorder( + borderSide: BorderSide(color: greyColor)), + focusedBorder: OutlineInputBorder( + borderSide: BorderSide(color: greyColor), + ), + enabledBorder: OutlineInputBorder( + borderSide: BorderSide(color: greyColor), + ), + labelText: 'Enter Price', + labelStyle: TextStyle( + color: greyColor, //<-- SEE HERE + ), + contentPadding: EdgeInsets.all(5), + ), + ), + + ),) + + ], + ) + ], + )) + ), + ], + ), + ), + actions: [ + TextButton( + child: Text('cancel', style: textButtonStyle()), + onPressed: () { + Navigator.of(context).pop(); + }, + ), + TextButton( + child: Text('Update', style: textButtonStyle()), + onPressed: () async { + if (updateTankerNameController.text != '' && + updateTankerPhoneNumberController.text != '' && + object.updatedWaterTypes.isNotEmpty ) { + + waterPrice=[]; + if(isDrinkingChecked){ + waterPrice.add({'price': tankerDrinkingPriceController.text.toString()}); + } + + if(isBoreChecked){ + waterPrice.add({'price': tankerBorePriceController.text.toString()}); + } + + AppSettings.preLoaderDialog(context); + + var payload = new Map(); + + payload["tankerName"] = updateTankerNameController.text.toString(); + payload["phoneNumber"] = updateTankerPhoneNumberController.text.toString(); + payload["alternative_phoneNumber"] = updateTankerAlternatePhoneNumberController.text.toString(); + payload["capacity"] = updateTankerCapacityController.text.toString(); + payload["typeofwater"] = object.updatedWaterTypes; + payload["price"] = waterPrice; + payload["supplier_address"] = AppSettings.supplierAddress; + payload["supplier_name"] = AppSettings.suppliername; + + + bool tankStatus = await AppSettings.updateTanker(object.tanker_name, payload); + try { + if (tankStatus) { + Navigator.of(context, rootNavigator: true).pop(); + AppSettings.longSuccessToast( + "Tanker Updated Successfully"); + updateTankerNameController.text = ''; + updateTankerPhoneNumberController.text = ''; + updateTankerAlternatePhoneNumberController.text=''; + updateTankerCapacityController.text=''; + Navigator.of(context).pop(); + await readJson(); + } else { + Navigator.of(context, rootNavigator: true).pop(); + AppSettings.longFailedStyledToast( + "Tanker upadtion failed", context); + Navigator.of(context).pop(); + } + } catch (exception) { + Navigator.of(context).pop(); + print(exception); + } + } else { + AppSettings.longFailedStyledToast("enter details", context); + } + }, + ), + ], + ); + }); + }, + ); + } + + + Widget renderzUi(){ + if(modelTanksViewList.length!=0){ + + return Column( + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + Expanded(child:ListView.builder( + padding: EdgeInsets.all(0), + itemCount: modelTanksViewList.length, + itemBuilder: (BuildContext context, int index) { + return Card( + + color: modelTanksViewList[index].cardColor, + child: Padding( + padding:EdgeInsets.all(8) , + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + + Container( + //width: MediaQuery.of(context).size.width * .55, + child: Column( + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text('tankerName :',style: labelTextStyle()), + Text('phoneNumber :',style: labelTextStyle()), + Text('alternative_phoneNumber :',style: labelTextStyle()), + Text('Capacity :',style: labelTextStyle()), + Text('Type Of Water :',style: labelTextStyle()), + Text('price :',style: labelTextStyle()), + + + + ], + ), + SizedBox(width: 5,), + Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text(modelTanksViewList[index].tanker_name,style: valuesTextStyle()), + Text(modelTanksViewList[index].tanker_phone,style: valuesTextStyle()), + Text(modelTanksViewList[index].tanker_alterphone,style: valuesTextStyle()), + Text(modelTanksViewList[index].capacity+' Ltrs',style: valuesTextStyle()), + Text(modelTanksViewList[index].water_type,style: valuesTextStyle()), + Text(modelTanksViewList[index].price_ui,style: valuesTextStyle()), + + ], + ), + ], + ), + ], + ), + + + ), + + + Expanded(child:IconButton( + icon: const Icon(Icons.edit,color: primaryColor,), + onPressed: () { + showUpdateTankerDialog(modelTanksViewList[index]); + + }, + ),), + Expanded(child:IconButton( + icon: const Icon(Icons.delete,color: primaryColor,), + + onPressed: () async{ + showDialog( + //if set to true allow to close popup by tapping out of the popup + //barrierDismissible: false, + context: context, + builder: (BuildContext context) => AlertDialog( + title: const Text('Do you want to delete tank?', + style: TextStyle( + color: primaryColor, + fontSize: 20, + )), + actionsAlignment: MainAxisAlignment.spaceBetween, + actions: [ + TextButton( + onPressed: ()async { + bool deleteTankStatus = await AppSettings.deleteTanker(modelTanksViewList[index].tanker_name); + + + if(deleteTankStatus){ + readJson(); + AppSettings.longSuccessToast('tank deleted successfully'); + Navigator.of(context).pop(true); + + } + else{ + AppSettings.longFailedToast('tank deletion failed'); + } + }, + child: const Text('Yes', + style: TextStyle( + color: primaryColor, + fontSize: 20, + )), + ), + TextButton( + onPressed: () { + Navigator.of(context).pop(true); + }, + child: const Text('No', + style: TextStyle( + color: primaryColor, + fontSize: 20, + )), + ), + ], + ), + ); + + + + }, + ),) + + ], + + ), + ), + ); + }) ), + Padding( + padding: EdgeInsets.fromLTRB(8, 8, 8, 8), + child: CircleAvatar( + backgroundColor: primaryColor, + radius: 40, + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + IconButton( + iconSize: 40, + icon: const Icon( + Icons.add, + color: Colors.white, + ), + onPressed: () async{ + Navigator.pop(context); + await Navigator.push( + context, + MaterialPageRoute( + builder: (context) => AddTankers()), + ); + //showBoreAddingDialog(); + }, + ), + /* Padding( + padding: EdgeInsets.fromLTRB(5, 0, 5, 5), + child: Text( + 'Add Tanks ', + style: TextStyle(color: Colors.white), + ), + )*/ + ], + ), + ), + ), + ]); + } + else{ + return Center( + child: Padding( + padding: EdgeInsets.fromLTRB(0, 40, 0, 0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + SizedBox(height: MediaQuery.of(context).size.height * .25,), + Text('Click below icon to add new Tanker'), + SizedBox( + height: 20, + ), + CircleAvatar( + backgroundColor: primaryColor, + radius: 40, + child: IconButton( + iconSize: 40, + icon: const Icon( + Icons.add, + color: Colors.white, + ), + onPressed: () async { + Navigator.pop(context); + await Navigator.push( + context, + MaterialPageRoute( + builder: (context) => AddTankers()), + ); + }, + ), + ) + ], + ), + ) + ); + } + } + + @override + Widget build(BuildContext context) { + return SafeArea( + child: Scaffold( + appBar: AppSettings.appBar('Tankers'), + body: isLoading?Center( + child: CircularProgressIndicator( + color: primaryColor, + strokeWidth: 5.0, + ), + ):renderzUi(), + )); + } +} diff --git a/lib/tanksview.dart b/lib/tanksview.dart deleted file mode 100644 index b44b487..0000000 --- a/lib/tanksview.dart +++ /dev/null @@ -1,272 +0,0 @@ -import 'dart:convert'; - -import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; -import 'package:watermanagement/addtankers.dart'; - -import 'package:watermanagement/settings.dart'; - -import 'models/tanksview_model.dart'; - -class TanksView extends StatefulWidget { - - - - @override - State createState() => _TanksViewState(); -} - -class _TanksViewState extends State { - - List modelTanksViewList = []; - TextEditingController tankerNameController = TextEditingController(); - TextEditingController tankerPhoneController = TextEditingController(); - TextEditingController tankerAlterPhoneController = TextEditingController(); - bool isLoading=false; - - - Future readJson() async { - var response1= await AppSettings.getTankers(); - print(response1); - setState(() { - modelTanksViewList = - ((jsonDecode(response1)['data']) as List).map((dynamic model) { - return GetTanksDetailsModel.fromJson(model); - }).toList(); - isLoading=false; - }); - } - - @override - void initState() { - isLoading=true; - readJson(); - super.initState(); - } - - - - Widget renderzUi(){ - if(modelTanksViewList.length!=0){ - - return Column( - crossAxisAlignment: CrossAxisAlignment.end, - children: [ - Expanded(child:ListView.builder( - padding: EdgeInsets.all(0), - itemCount: modelTanksViewList.length, - itemBuilder: (BuildContext context, int index) { - return Card( - - color: modelTanksViewList[index].cardColor, - child: Padding( - padding:EdgeInsets.all(8) , - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - - Container( - //width: MediaQuery.of(context).size.width * .55, - child: Column( - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Column( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text('tankerName :',style: labelTextStyle()), - Text('phoneNumber :',style: labelTextStyle()), - Text('alternative_phoneNumber :',style: labelTextStyle()), - Text('Capacity :',style: labelTextStyle()), - Text('Type Of Water :',style: labelTextStyle()), - Text('price :',style: labelTextStyle()), - - - - ], - ), - SizedBox(width: 5,), - Column( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text(modelTanksViewList[index].tanker_name,style: valuesTextStyle()), - Text(modelTanksViewList[index].tanker_phone,style: valuesTextStyle()), - Text(modelTanksViewList[index].tanker_alterphone,style: valuesTextStyle()), - Text(modelTanksViewList[index].capacity+' Ltrs',style: valuesTextStyle()), - Text(modelTanksViewList[index].water_type,style: valuesTextStyle()), - Text(modelTanksViewList[index].price_ui,style: valuesTextStyle()), - - ], - ), - ], - ), - ], - ), - - - ), - - - Expanded(child:IconButton( - icon: const Icon(Icons.edit,color: primaryColor,), - onPressed: () { - // showUpdateTankDialog(modelTanksViewList[index]); - - }, - ),), - Expanded(child:IconButton( - icon: const Icon(Icons.delete,color: primaryColor,), - - onPressed: () async{ - showDialog( - //if set to true allow to close popup by tapping out of the popup - //barrierDismissible: false, - context: context, - builder: (BuildContext context) => AlertDialog( - title: const Text('Do you want to delete tank?', - style: TextStyle( - color: primaryColor, - fontSize: 20, - )), - actionsAlignment: MainAxisAlignment.spaceBetween, - actions: [ - TextButton( - onPressed: ()async { - bool deleteTankStatus = await AppSettings.deleteTanker(modelTanksViewList[index].tanker_name); - - - if(deleteTankStatus){ - readJson(); - AppSettings.longSuccessToast('tank deleted successfully'); - Navigator.of(context).pop(true); - - } - else{ - AppSettings.longFailedToast('tank deletion failed'); - } - }, - child: const Text('Yes', - style: TextStyle( - color: primaryColor, - fontSize: 20, - )), - ), - TextButton( - onPressed: () { - Navigator.of(context).pop(true); - }, - child: const Text('No', - style: TextStyle( - color: primaryColor, - fontSize: 20, - )), - ), - ], - ), - ); - - - - }, - ),) - - ], - - ), - ), - ); - }) ), - Padding( - padding: EdgeInsets.fromLTRB(8, 8, 8, 8), - child: CircleAvatar( - backgroundColor: primaryColor, - radius: 40, - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - IconButton( - iconSize: 40, - icon: const Icon( - Icons.add, - color: Colors.white, - ), - onPressed: () async{ - Navigator.pop(context); - await Navigator.push( - context, - MaterialPageRoute( - builder: (context) => AddTankers()), - ); - //showBoreAddingDialog(); - }, - ), - /* Padding( - padding: EdgeInsets.fromLTRB(5, 0, 5, 5), - child: Text( - 'Add Tanks ', - style: TextStyle(color: Colors.white), - ), - )*/ - ], - ), - ), - ), - ]); - } - else{ - return Center( - child: Padding( - padding: EdgeInsets.fromLTRB(0, 40, 0, 0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - SizedBox(height: MediaQuery.of(context).size.height * .25,), - Text('Click below icon to add new Tanker'), - SizedBox( - height: 20, - ), - CircleAvatar( - backgroundColor: primaryColor, - radius: 40, - child: IconButton( - iconSize: 40, - icon: const Icon( - Icons.add, - color: Colors.white, - ), - onPressed: () async { - Navigator.pop(context); - await Navigator.push( - context, - MaterialPageRoute( - builder: (context) => AddTankers()), - ); - }, - ), - ) - ], - ), - ) - ); - } - } - - @override - Widget build(BuildContext context) { - return SafeArea( - child: Scaffold( - appBar: AppSettings.appBar('Tanks'), - body: isLoading?Center( - child: CircularProgressIndicator( - color: primaryColor, - strokeWidth: 5.0, - ), - ):renderzUi(), - )); - } -}