Commit ee178d55 authored by Sai Srinivas's avatar Sai Srinivas
Browse files

09-07-2025 By Sai Srinivas

Network and Finance Module issue and Back
parent 2ade5aad
import 'dart:io'; import 'dart:io';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:dropdown_button2/dropdown_button2.dart'; import 'package:dropdown_button2/dropdown_button2.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
...@@ -13,6 +14,7 @@ import 'package:get/utils.dart'; ...@@ -13,6 +14,7 @@ import 'package:get/utils.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import '../../Models/financeModels/addPaymentRequestionResponse.dart'; import '../../Models/financeModels/addPaymentRequestionResponse.dart';
import '../../Utils/commonServices.dart';
class Submitpaymentrequestionlistsbymode extends StatefulWidget { class Submitpaymentrequestionlistsbymode extends StatefulWidget {
final String mode; final String mode;
...@@ -33,14 +35,22 @@ class Submitpaymentrequestionlistsbymode extends StatefulWidget { ...@@ -33,14 +35,22 @@ class Submitpaymentrequestionlistsbymode extends StatefulWidget {
class _SubmitpaymentrequestionlistsbymodeState class _SubmitpaymentrequestionlistsbymodeState
extends State<Submitpaymentrequestionlistsbymode> { extends State<Submitpaymentrequestionlistsbymode> {
Map _source = {ConnectivityResult.mobile: true};
final MyConnectivity _connectivity = MyConnectivity.instance;
Dropdowntheme ddtheme = Dropdowntheme(); Dropdowntheme ddtheme = Dropdowntheme();
List<FocusNode> focusNodes = List.generate(11, (index) => FocusNode()); List<FocusNode> focusNodes = List.generate(11, (index) => FocusNode());
GlobalKey _globalKey = GlobalKey(); GlobalKey _globalKey = GlobalKey();
ScrollController scrollcontroller = ScrollController(); ScrollController scrollcontroller = ScrollController();
@override @override
void initState() { void initState() {
// TODO: implement initState // TODO: implement initState
super.initState(); super.initState();
_connectivity.initialise();
_connectivity.myStream.listen((source) {
setState(() => _source = source);
});
WidgetsBinding.instance.addPostFrameCallback((timeStamp) { WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
var provider = Provider.of<Requestionlistprovider>( var provider = Provider.of<Requestionlistprovider>(
context, context,
...@@ -77,6 +87,7 @@ class _SubmitpaymentrequestionlistsbymodeState ...@@ -77,6 +87,7 @@ class _SubmitpaymentrequestionlistsbymodeState
void dispose() { void dispose() {
scrollcontroller.dispose(); scrollcontroller.dispose();
focusNodes.map((e) => e.dispose()); focusNodes.map((e) => e.dispose());
_connectivity.disposeStream();
super.dispose(); super.dispose();
} }
...@@ -101,303 +112,331 @@ class _SubmitpaymentrequestionlistsbymodeState ...@@ -101,303 +112,331 @@ class _SubmitpaymentrequestionlistsbymodeState
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Consumer<Requestionlistprovider>( switch (_source.keys.toList()[0]) {
builder: (context, provider, child) { case ConnectivityResult.mobile:
return WillPopScope( connection = 'Online';
child: SafeArea( break;
top: false, case ConnectivityResult.wifi:
bottom: Platform.isIOS ? false : true, connection = 'Online';
child: Scaffold( break;
resizeToAvoidBottomInset: true, case ConnectivityResult.none:
backgroundColor: AppColors.white, default:
appBar: appbar2( connection = 'Offline';
context, }
"${widget.pageTitleName}", return connection == "Online"
provider.resetForm, ? Consumer<Requestionlistprovider>(
SizedBox(width: 0), builder: (context, provider, child) {
), return WillPopScope(
body: Container( child: SafeArea(
padding: EdgeInsets.symmetric(horizontal: 10), top: false,
decoration: BoxDecoration( bottom: Platform.isIOS ? false : true,
color: Colors.white, child: Scaffold(
borderRadius: BorderRadius.circular(20), resizeToAvoidBottomInset: true,
), backgroundColor: AppColors.white,
child: SingleChildScrollView( appBar: appbar2(
controller: scrollcontroller, context,
child: Column( "${widget.pageTitleName}",
crossAxisAlignment: CrossAxisAlignment.start, provider.resetForm,
children: [ SizedBox(width: 0),
TextWidget(context, "Select Account"), ),
DropdownButtonHideUnderline( body: Container(
child: Row( padding: EdgeInsets.symmetric(horizontal: 10),
children: [ decoration: BoxDecoration(
Expanded( color: Colors.white,
flex: 5, borderRadius: BorderRadius.circular(20),
child: DropdownButton2<Accounts>( ),
isExpanded: true, child: SingleChildScrollView(
hint: Text( controller: scrollcontroller,
'Select Account', child: Column(
style: TextStyle(fontSize: 14), crossAxisAlignment: CrossAxisAlignment.start,
overflow: TextOverflow.ellipsis, children: [
), TextWidget(context, "Select Account"),
items: DropdownButtonHideUnderline(
provider.accounts child: Row(
.map( children: [
(accs) => DropdownMenuItem<Accounts>( Expanded(
value: accs, flex: 5,
child: Text( child: DropdownButton2<Accounts>(
"${accs.name}", isExpanded: true,
style: const TextStyle( hint: Text(
fontSize: 14, 'Select Account',
), style: TextStyle(fontSize: 14),
overflow: TextOverflow.ellipsis, overflow: TextOverflow.ellipsis,
), ),
), items:
) provider.accounts
.toList(), .map(
value: provider.selectedAccount, (accs) =>
onChanged: DropdownMenuItem<Accounts>(
(widget.mode == "self" && value: accs,
provider.accounts.length == 1) child: Text(
? null "${accs.name}",
: (Accounts? value) { style: const TextStyle(
if (value != null) { fontSize: 14,
if (provider.accounts.isNotEmpty) { ),
provider.selectedAccount = value; overflow:
print( TextOverflow.ellipsis,
"Selected Complaint Type: ${value.name}, ID: ${value.id}", ),
); ),
provider.accountId = value.id!; )
print( .toList(),
"hfjkshfg" + value: provider.selectedAccount,
provider.accountId onChanged:
.toString(), (widget.mode == "self" &&
); provider.accounts.length == 1)
provider ? null
.paymentRequestionBankDetailsAPIFunction( : (Accounts? value) {
context, if (value != null) {
provider.accountId, if (provider
.accounts
.isNotEmpty) {
provider.selectedAccount =
value;
print(
"Selected Complaint Type: ${value.name}, ID: ${value.id}",
); );
} provider.accountId =
} value.id!;
}, print(
dropdownSearchData: DropdownSearchData( "hfjkshfg" +
searchInnerWidgetHeight: 50, provider.accountId
searchController: .toString(),
provider.accountSearchController, );
searchInnerWidget: Padding( provider
padding: const EdgeInsets.all(8), .paymentRequestionBankDetailsAPIFunction(
child: TextFormField( context,
controller: provider.accountId,
);
}
}
},
dropdownSearchData: DropdownSearchData(
searchInnerWidgetHeight: 50,
searchController:
provider.accountSearchController, provider.accountSearchController,
decoration: InputDecoration( searchInnerWidget: Padding(
isDense: true, padding: const EdgeInsets.all(8),
contentPadding: child: TextFormField(
const EdgeInsets.symmetric( controller:
horizontal: 10, provider.accountSearchController,
vertical: 8, decoration: InputDecoration(
isDense: true,
contentPadding:
const EdgeInsets.symmetric(
horizontal: 10,
vertical: 8,
),
hintText: 'Search account...',
border: OutlineInputBorder(
borderRadius:
BorderRadius.circular(8),
), ),
hintText: 'Search account...', ),
border: OutlineInputBorder( ),
),
searchMatchFn: (item, searchValue) {
return item.value?.name
?.toLowerCase()
.contains(
searchValue.toLowerCase(),
) ??
false;
},
// Optional: clear search text when dropdown closes
),
onMenuStateChange: (isOpen) {
if (!isOpen) {
provider.accountSearchController
.clear();
}
},
buttonStyleData: ddtheme.buttonStyleData,
iconStyleData: ddtheme.iconStyleData,
menuItemStyleData:
ddtheme.menuItemStyleData,
dropdownStyleData:
ddtheme.dropdownStyleData,
),
),
if (widget.mode == "other") ...[
SizedBox(width: 5),
Expanded(
flex: 1,
child: InkResponse(
onTap: () async {
var res = await Navigator.push(
context,
MaterialPageRoute(
builder:
(context) => Addcommonpayment(
from: "Requesition",
),
),
);
print("return Response: ${res}");
if (res != true) {
provider.addPaymentRequestionViewAPI(
context,
widget.mode,
);
if (res != null) {
print("true");
Future.delayed(
Durations.long4,
() async {
print("Long411");
autofill(res);
},
);
}
}
},
child: Container(
height: 45,
padding: EdgeInsets.all(8),
decoration: BoxDecoration(
color: AppColors.app_blue,
borderRadius: BorderRadius.circular( borderRadius: BorderRadius.circular(
8, 8,
), ),
), ),
child: SvgPicture.asset(
"assets/svg/add_account.svg",
color: Colors.white,
),
), ),
), ),
), ),
searchMatchFn: (item, searchValue) { ],
return item.value?.name ],
?.toLowerCase()
.contains(
searchValue.toLowerCase(),
) ??
false;
},
// Optional: clear search text when dropdown closes
),
onMenuStateChange: (isOpen) {
if (!isOpen) {
provider.accountSearchController.clear();
}
},
buttonStyleData: ddtheme.buttonStyleData,
iconStyleData: ddtheme.iconStyleData,
menuItemStyleData: ddtheme.menuItemStyleData,
dropdownStyleData: ddtheme.dropdownStyleData,
),
), ),
if (widget.mode == "other") ...[ ),
SizedBox(width: 5), errorWidget(context, provider.selectAccountError),
Expanded(
flex: 1, if (["self", "admin"].contains(widget.mode)) ...[
child: InkResponse( TextWidget(context, "Select Requisition Type"),
onTap: () async { DropdownButtonHideUnderline(
var res = await Navigator.push( child: Row(
context, children: [
MaterialPageRoute( Expanded(
builder: child: DropdownButton2<String>(
(context) => Addcommonpayment( isExpanded: true,
from: "Requesition", hint: Text(
), 'Select Request Type',
style: TextStyle(fontSize: 14),
overflow: TextOverflow.ellipsis,
), ),
); items:
print("return Response: ${res}"); provider.requestingPurposes
if (res != true) { .map(
provider.addPaymentRequestionViewAPI( (accs) =>
context, DropdownMenuItem<String>(
widget.mode, value: accs,
); child: Text(
if (res != null) { accs ?? '',
print("true"); style: const TextStyle(
Future.delayed( fontSize: 14,
Durations.long4, ),
() async { overflow:
print("Long411"); TextOverflow
autofill(res); .ellipsis,
}, ),
); ),
} )
} .toList(),
}, value: provider.selectReqPurpose,
child: Container(
height: 45, onChanged: (String? value) {
padding: EdgeInsets.all(8), if (value != null) {
decoration: BoxDecoration( provider.selectReqPurpose = value;
color: AppColors.app_blue, print(
borderRadius: BorderRadius.circular(8), "Selected Complaint Type: ${value},",
), );
child: SvgPicture.asset(
"assets/svg/add_account.svg", print(
color: Colors.white, "hfjkshfg" +
provider.selectReqPurpose
.toString(),
);
}
},
buttonStyleData: ddtheme.buttonStyleData,
iconStyleData: ddtheme.iconStyleData,
menuItemStyleData:
ddtheme.menuItemStyleData,
dropdownStyleData:
ddtheme.dropdownStyleData,
), ),
), ),
), ],
), ),
], ),
] else ...[
textControllerWidget(
context,
provider.reqPurposeController,
"Request Purpose",
"Enter Request Purpose",
provider.updateReqPupose,
TextInputType.text,
false,
null,
focusNodes[0],
focusNodes[1],
TextInputAction.next,
),
], ],
), errorWidget(context, provider.reqPurposeError),
),
errorWidget(context, provider.selectAccountError),
if (["self", "admin"].contains(widget.mode)) ...[ textControllerWidget(
TextWidget(context, "Select Requisition Type"), context,
DropdownButtonHideUnderline( provider.descController,
child: Row( "Description",
children: [ "Enter Description",
Expanded( provider.updateDescription,
child: DropdownButton2<String>( TextInputType.text,
isExpanded: true, false,
hint: Text( null,
'Select Request Type', focusNodes[1],
style: TextStyle(fontSize: 14), focusNodes[2],
overflow: TextOverflow.ellipsis, TextInputAction.next,
),
items:
provider.requestingPurposes
.map(
(accs) => DropdownMenuItem<String>(
value: accs,
child: Text(
accs ?? '',
style: const TextStyle(
fontSize: 14,
),
overflow: TextOverflow.ellipsis,
),
),
)
.toList(),
value: provider.selectReqPurpose,
onChanged: (String? value) {
if (value != null) {
provider.selectReqPurpose = value;
print(
"Selected Complaint Type: ${value},",
);
print(
"hfjkshfg" +
provider.selectReqPurpose
.toString(),
);
}
},
buttonStyleData: ddtheme.buttonStyleData,
iconStyleData: ddtheme.iconStyleData,
menuItemStyleData: ddtheme.menuItemStyleData,
dropdownStyleData: ddtheme.dropdownStyleData,
),
),
],
), ),
), errorWidget(context, provider.descriptionError),
] else ...[
textControllerWidget(
context,
provider.reqPurposeController,
"Request Purpose",
"Enter Request Purpose",
provider.updateReqPupose,
TextInputType.text,
false,
null,
focusNodes[0],
focusNodes[1],
TextInputAction.next,
),
],
errorWidget(context, provider.reqPurposeError),
textControllerWidget( textControllerWidget(
context, context,
provider.descController, provider.amountController,
"Description", "Amount",
"Enter Description", "Enter Amount",
provider.updateDescription, provider.updateAmount,
TextInputType.text, TextInputType.numberWithOptions(),
false, false,
null, null,
focusNodes[1], focusNodes[2],
focusNodes[2], null,
TextInputAction.next, TextInputAction.done,
), ),
errorWidget(context, provider.descriptionError), errorWidget(context, provider.amountError),
textControllerWidget(
context,
provider.amountController,
"Amount",
"Enter Amount",
provider.updateAmount,
TextInputType.numberWithOptions(),
false,
null,
focusNodes[2],
null,
TextInputAction.done,
),
errorWidget(context, provider.amountError),
TextWidget(context, "Select Payment Mode"), TextWidget(context, "Select Payment Mode"),
DropdownButtonHideUnderline( DropdownButtonHideUnderline(
child: Row( child: Row(
children: [ children: [
Expanded( Expanded(
child: DropdownButton2<PaymentModes>( child: DropdownButton2<PaymentModes>(
isExpanded: true, isExpanded: true,
hint: Text( hint: Text(
'Select Payment mode', 'Select Payment mode',
style: TextStyle(fontSize: 14), style: TextStyle(fontSize: 14),
overflow: TextOverflow.ellipsis, overflow: TextOverflow.ellipsis,
), ),
items: items:
provider.paymentModes provider.paymentModes
.map( .map(
(paymenents) => (paymenents) => DropdownMenuItem<
DropdownMenuItem<PaymentModes>( PaymentModes
>(
value: paymenents, value: paymenents,
child: Text( child: Text(
paymenents.name ?? '', paymenents.name ?? '',
...@@ -408,343 +447,365 @@ class _SubmitpaymentrequestionlistsbymodeState ...@@ -408,343 +447,365 @@ class _SubmitpaymentrequestionlistsbymodeState
TextOverflow.ellipsis, TextOverflow.ellipsis,
), ),
), ),
) )
.toList(), .toList(),
value: provider.selectedPayment, value: provider.selectedPayment,
onChanged: (PaymentModes? value) { onChanged: (PaymentModes? value) {
if (value != null) { if (value != null) {
if (provider.paymentModes.isNotEmpty) { if (provider.paymentModes.isNotEmpty) {
provider.selectedPayment = value; provider.selectedPayment = value;
print( print(
"Selected Complaint Type: ${value.name}, ID: ${value.id}", "Selected Complaint Type: ${value.name}, ID: ${value.id}",
); );
provider.paymentModeId = value.id!; provider.paymentModeId = value.id!;
provider.paymentModeValue = value.name!; provider.paymentModeValue =
print( value.name!;
"hfjkshfg" + print(
provider.paymentModeId.toString(), "hfjkshfg" +
); provider.paymentModeId
if ([ .toString(),
"Cheque", );
"RTGS", if ([
"IMPS", "Cheque",
"NEFT", "RTGS",
].contains(provider.paymentModeValue)) { "IMPS",
WidgetsBinding.instance "NEFT",
.addPostFrameCallback((_) { ].contains(
final context = provider.paymentModeValue,
_globalKey.currentContext; )) {
if (context != null) { WidgetsBinding.instance
Scrollable.ensureVisible( .addPostFrameCallback((_) {
context, final context =
duration: Duration( _globalKey.currentContext;
milliseconds: 300, if (context != null) {
), Scrollable.ensureVisible(
curve: Curves.easeInOut, context,
); duration: Duration(
} milliseconds: 300,
}); ),
curve: Curves.easeInOut,
);
}
});
}
}
} }
} },
} buttonStyleData: ddtheme.buttonStyleData,
}, iconStyleData: ddtheme.iconStyleData,
buttonStyleData: ddtheme.buttonStyleData, menuItemStyleData:
iconStyleData: ddtheme.iconStyleData, ddtheme.menuItemStyleData,
menuItemStyleData: ddtheme.menuItemStyleData, dropdownStyleData:
dropdownStyleData: ddtheme.dropdownStyleData, ddtheme.dropdownStyleData,
),
),
],
),
),
errorWidget(context, provider.selectPaymentError),
if (widget.mode == "other") ...[
TextWidget(context, "Select Approval Employee"),
DropdownButtonHideUnderline(
child: Row(
children: [
Expanded(
child: DropdownButton2<Employees>(
isExpanded: true,
hint: Text(
'Select Approval Employee',
style: TextStyle(fontSize: 14),
overflow: TextOverflow.ellipsis,
), ),
items:
provider.approvalEmployee
.map(
(paymenents) =>
DropdownMenuItem<Employees>(
value: paymenents,
child: Text(
paymenents.name ?? '',
style: const TextStyle(
fontSize: 14,
),
overflow:
TextOverflow.ellipsis,
),
),
)
.toList(),
value: provider.selectedApprovalEmployee,
onChanged: (Employees? value) {
if (value != null) {
if (provider
.approvalEmployee
.isNotEmpty) {
provider.selectedApprovalEmployee =
value;
print(
"Selected Complaint Type: ${value.name}, ID: ${value.id}",
);
provider.selectedApprovalEmployeeID =
value.id!;
provider.selectedApprovalEmployeeValue =
value.name!;
print(
"hfjkshfg" +
provider.paymentModeId.toString(),
);
}
}
},
buttonStyleData: ddtheme.buttonStyleData,
iconStyleData: ddtheme.iconStyleData,
menuItemStyleData: ddtheme.menuItemStyleData,
dropdownStyleData: ddtheme.dropdownStyleData,
), ),
), ],
],
),
),
errorWidget(context, provider.selectPaymentError),
],
InkResponse(
onTap: () {
_showAttachmentSheet(context);
},
child: Container(
margin: EdgeInsets.symmetric(vertical: 10),
height: 45,
width: MediaQuery.of(context).size.width,
decoration: BoxDecoration(
color: Color(0xFFE6F6FF),
borderRadius: BorderRadius.circular(12),
border: Border.all(
color: AppColors.app_blue,
width: 0.5,
), ),
), ),
child: Center( errorWidget(context, provider.selectPaymentError),
child: Text(
"File Attachment", if (widget.mode == "other") ...[
style: TextStyle( TextWidget(context, "Select Approval Employee"),
fontFamily: "JakartaMedium", DropdownButtonHideUnderline(
color: AppColors.app_blue, child: Row(
children: [
Expanded(
child: DropdownButton2<Employees>(
isExpanded: true,
hint: Text(
'Select Approval Employee',
style: TextStyle(fontSize: 14),
overflow: TextOverflow.ellipsis,
),
items:
provider.approvalEmployee
.map(
(paymenents) =>
DropdownMenuItem<Employees>(
value: paymenents,
child: Text(
paymenents.name ?? '',
style: const TextStyle(
fontSize: 14,
),
overflow:
TextOverflow
.ellipsis,
),
),
)
.toList(),
value: provider.selectedApprovalEmployee,
onChanged: (Employees? value) {
if (value != null) {
if (provider
.approvalEmployee
.isNotEmpty) {
provider.selectedApprovalEmployee =
value;
print(
"Selected Complaint Type: ${value.name}, ID: ${value.id}",
);
provider.selectedApprovalEmployeeID =
value.id!;
provider.selectedApprovalEmployeeValue =
value.name!;
print(
"hfjkshfg" +
provider.paymentModeId
.toString(),
);
}
}
},
buttonStyleData: ddtheme.buttonStyleData,
iconStyleData: ddtheme.iconStyleData,
menuItemStyleData:
ddtheme.menuItemStyleData,
dropdownStyleData:
ddtheme.dropdownStyleData,
),
),
],
), ),
), ),
), errorWidget(context, provider.selectPaymentError),
), ],
),
if (provider.imagePicked == 1 && InkResponse(
provider.imagePath != null) ...[ onTap: () {
Padding( _showAttachmentSheet(context);
padding: const EdgeInsets.symmetric(vertical: 4.0), },
child: Row( child: Container(
mainAxisAlignment: MainAxisAlignment.spaceBetween, margin: EdgeInsets.symmetric(vertical: 10),
children: [ height: 45,
Expanded( width: MediaQuery.of(context).size.width,
flex: 4, decoration: BoxDecoration(
color: Color(0xFFE6F6FF),
borderRadius: BorderRadius.circular(12),
border: Border.all(
color: AppColors.app_blue,
width: 0.5,
),
),
child: Center(
child: Text( child: Text(
"${provider.imagePath}", "File Attachment",
style: TextStyle( style: TextStyle(
color: AppColors.semi_black, fontFamily: "JakartaMedium",
fontSize: 11, color: AppColors.app_blue,
fontWeight: FontWeight.w600,
), ),
), ),
), ),
Expanded( ),
flex: 1, ),
child: InkResponse( if (provider.imagePicked == 1 &&
onTap: () { provider.imagePath != null) ...[
provider.imagePicked = 0; Padding(
provider.imagePath = null; padding: const EdgeInsets.symmetric(
provider.imageFilePath = null; vertical: 4.0,
}, ),
child: SvgPicture.asset( child: Row(
"assets/svg/ic_close.svg", mainAxisAlignment:
width: 15, MainAxisAlignment.spaceBetween,
height: 15, children: [
Expanded(
flex: 4,
child: Text(
"${provider.imagePath}",
style: TextStyle(
color: AppColors.semi_black,
fontSize: 11,
fontWeight: FontWeight.w600,
),
),
), ),
), Expanded(
flex: 1,
child: InkResponse(
onTap: () {
provider.imagePicked = 0;
provider.imagePath = null;
provider.imageFilePath = null;
},
child: SvgPicture.asset(
"assets/svg/ic_close.svg",
width: 15,
height: 15,
),
),
),
],
), ),
], ),
), ],
), errorWidget(context, provider.FileError),
],
errorWidget(context, provider.FileError),
if ([ if ([
"Cheque", "Cheque",
"RTGS", "RTGS",
"IMPS", "IMPS",
"NEFT", "NEFT",
].contains(provider.paymentModeValue)) ...[ ].contains(provider.paymentModeValue)) ...[
SizedBox(height: 3, key: _globalKey), SizedBox(height: 3, key: _globalKey),
textControllerWidget( textControllerWidget(
context, context,
provider.bankNameController, provider.bankNameController,
"Bank Name", "Bank Name",
"Enter Bank Name", "Enter Bank Name",
provider.updateBankName, provider.updateBankName,
TextInputType.text, TextInputType.text,
false, false,
null, null,
focusNodes[3], focusNodes[3],
focusNodes[4], focusNodes[4],
TextInputAction.next, TextInputAction.next,
), ),
errorWidget(context, provider.bankNameError), errorWidget(context, provider.bankNameError),
textControllerWidget( textControllerWidget(
context, context,
provider.bankBranchController, provider.bankBranchController,
"Bank Branch", "Bank Branch",
"Enter Bank Branch", "Enter Bank Branch",
provider.updateBankBranch, provider.updateBankBranch,
TextInputType.text, TextInputType.text,
false, false,
null, null,
focusNodes[4], focusNodes[4],
focusNodes[5], focusNodes[5],
TextInputAction.next, TextInputAction.next,
), ),
errorWidget(context, provider.bankBranchError), errorWidget(context, provider.bankBranchError),
textControllerWidget( textControllerWidget(
context, context,
provider.bankAccNumberController, provider.bankAccNumberController,
"Account Number", "Account Number",
"Enter Account Number", "Enter Account Number",
provider.updateNumber, provider.updateNumber,
TextInputType.number, TextInputType.number,
false, false,
FilteringTextInputFormatter.digitsOnly, FilteringTextInputFormatter.digitsOnly,
focusNodes[5], focusNodes[5],
focusNodes[6], focusNodes[6],
TextInputAction.next, TextInputAction.next,
), ),
errorWidget(context, provider.bankNumberError), errorWidget(context, provider.bankNumberError),
textControllerWidget( textControllerWidget(
context, context,
provider.bankIfscController, provider.bankIfscController,
"Bank IFSC", "Bank IFSC",
"Enter Bank IFSC", "Enter Bank IFSC",
provider.updateIFSC, provider.updateIFSC,
TextInputType.text, TextInputType.text,
false, false,
null, null,
focusNodes[6], focusNodes[6],
focusNodes[7], focusNodes[7],
TextInputAction.next, TextInputAction.next,
), ),
errorWidget(context, provider.bankIFSCError), errorWidget(context, provider.bankIFSCError),
], ],
if ([ if ([
"Cheque", "Cheque",
"RTGS", "RTGS",
"IMPS", "IMPS",
"NEFT", "NEFT",
"UPI", "UPI",
].contains(provider.paymentModeValue)) ...[ ].contains(provider.paymentModeValue)) ...[
textControllerWidget( textControllerWidget(
context, context,
provider.bankAcHolderController, provider.bankAcHolderController,
"Bank Account Holder Name", "Bank Account Holder Name",
"Enter Bank Account Holder Name", "Enter Bank Account Holder Name",
provider.updateHolder, provider.updateHolder,
TextInputType.text, TextInputType.text,
false, false,
null, null,
focusNodes[7], focusNodes[7],
null, null,
TextInputAction.done, TextInputAction.done,
), ),
errorWidget(context, provider.bankHolderError), errorWidget(context, provider.bankHolderError),
] else if (provider.paymentModeValue == "UPI") ...[ ] else if (provider.paymentModeValue == "UPI") ...[
textControllerWidget( textControllerWidget(
context, context,
provider.bankUpiController, provider.bankUpiController,
"UPI ID", "UPI ID",
"Enter UPI ID", "Enter UPI ID",
provider.updateUPI, provider.updateUPI,
TextInputType.text, TextInputType.text,
false, false,
null, null,
focusNodes[8], focusNodes[8],
null, null,
TextInputAction.done, TextInputAction.done,
), ),
errorWidget(context, provider.UPIError), errorWidget(context, provider.UPIError),
], ],
], ],
),
),
), ),
), floatingActionButtonLocation:
), FloatingActionButtonLocation.centerFloat,
floatingActionButtonLocation: bottomNavigationBar: InkResponse(
FloatingActionButtonLocation.centerFloat, onTap:
bottomNavigationBar: InkResponse( provider.submitClicked
onTap: ? null
provider.submitClicked : () {
? null provider.submitClicked = true;
: () {
provider.submitClicked = true;
provider.addPaymentRequestionSubmitAPI( provider.addPaymentRequestionSubmitAPI(
context, context,
widget.mode, widget.mode,
provider.selectedApprovalEmployeeID, provider.selectedApprovalEmployeeID,
); );
}, },
child: Container( child: Container(
height: 45, height: 45,
alignment: Alignment.center, alignment: Alignment.center,
margin: EdgeInsets.symmetric(horizontal: 10, vertical: 10), margin: EdgeInsets.symmetric(
padding: EdgeInsets.symmetric(horizontal: 10, vertical: 5), horizontal: 10,
decoration: BoxDecoration( vertical: 10,
color: AppColors.app_blue, ),
borderRadius: BorderRadius.circular(15), padding: EdgeInsets.symmetric(
horizontal: 10,
vertical: 5,
),
decoration: BoxDecoration(
color: AppColors.app_blue,
borderRadius: BorderRadius.circular(15),
),
child:
provider.submitClicked
? CircularProgressIndicator.adaptive(
valueColor: AlwaysStoppedAnimation(
AppColors.white,
),
)
: Text(
"Submit",
style: TextStyle(
fontSize: 15,
fontFamily: "JakartaMedium",
color: Colors.white,
),
),
),
), ),
child:
provider.submitClicked
? CircularProgressIndicator.adaptive(
valueColor: AlwaysStoppedAnimation(AppColors.white),
)
: Text(
"Submit",
style: TextStyle(
fontSize: 15,
fontFamily: "JakartaMedium",
color: Colors.white,
),
),
), ),
), ),
), onWillPop: () {
), provider.resetForm();
onWillPop: () { return onBackPressed(context);
provider.resetForm(); },
return onBackPressed(context); );
}, },
); )
}, : NoNetwork(context);
);
} }
Future<void> _showAttachmentSheet(BuildContext context) { Future<void> _showAttachmentSheet(BuildContext context) {
......
import 'dart:io'; import 'dart:io';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:generp/Utils/commonServices.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import '../../Notifiers/GeneratorDetailsProvider.dart'; import '../../Notifiers/GeneratorDetailsProvider.dart';
...@@ -18,10 +20,18 @@ class Complainthistory extends StatefulWidget { ...@@ -18,10 +20,18 @@ class Complainthistory extends StatefulWidget {
} }
class _ComplainthistoryState extends State<Complainthistory> { class _ComplainthistoryState extends State<Complainthistory> {
Map _source = {ConnectivityResult.mobile: true};
final MyConnectivity _connectivity = MyConnectivity.instance;
@override @override
void initState() { void initState() {
// TODO: implement initState // TODO: implement initState
super.initState(); super.initState();
_connectivity.initialise();
_connectivity.myStream.listen((source) {
setState(() => _source = source);
});
WidgetsBinding.instance.addPostFrameCallback((_) { WidgetsBinding.instance.addPostFrameCallback((_) {
var details = Provider.of<Generatordetailsprovider>( var details = Provider.of<Generatordetailsprovider>(
context, context,
...@@ -38,10 +48,27 @@ class _ComplainthistoryState extends State<Complainthistory> { ...@@ -38,10 +48,27 @@ class _ComplainthistoryState extends State<Complainthistory> {
); );
}); });
} }
@override
void dispose() {
// TODO: implement dispose
super.dispose();
_connectivity.disposeStream();
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Consumer<Generatordetailsprovider>( switch (_source.keys.toList()[0]) {
case ConnectivityResult.mobile:
connection = 'Online';
break;
case ConnectivityResult.wifi:
connection = 'Online';
break;
case ConnectivityResult.none:
default:
connection = 'Offline';
}
return connection=="Online"?Consumer<Generatordetailsprovider>(
builder: (context, provider, child) { builder: (context, provider, child) {
return WillPopScope( return WillPopScope(
onWillPop: () => onBackPressed(context), onWillPop: () => onBackPressed(context),
...@@ -153,6 +180,6 @@ class _ComplainthistoryState extends State<Complainthistory> { ...@@ -153,6 +180,6 @@ class _ComplainthistoryState extends State<Complainthistory> {
), ),
); );
}, },
); ):NoNetwork(context);
} }
} }
import 'dart:io'; import 'dart:io';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart'; import 'package:flutter_svg/svg.dart';
import 'package:generp/Utils/commonWidgets.dart'; import 'package:generp/Utils/commonWidgets.dart';
import 'package:generp/screens/genTracker/ScanEnterGeneratorIDScreen.dart'; import 'package:generp/screens/genTracker/ScanEnterGeneratorIDScreen.dart';
import '../../Utils/app_colors.dart'; import '../../Utils/app_colors.dart';
import '../../Utils/commonServices.dart';
class Gentrackerdashboard extends StatefulWidget { class Gentrackerdashboard extends StatefulWidget {
const Gentrackerdashboard({super.key}); const Gentrackerdashboard({super.key});
...@@ -15,14 +17,45 @@ class Gentrackerdashboard extends StatefulWidget { ...@@ -15,14 +17,45 @@ class Gentrackerdashboard extends StatefulWidget {
} }
class _GentrackerdashboardState extends State<Gentrackerdashboard> { class _GentrackerdashboardState extends State<Gentrackerdashboard> {
Map _source = {ConnectivityResult.mobile: true};
final MyConnectivity _connectivity = MyConnectivity.instance;
@override
void initState() {
// TODO: implement initState
super.initState();
_connectivity.initialise();
_connectivity.myStream.listen((source) {
setState(() => _source = source);
});
}
@override
void dispose() {
// TODO: implement dispose
super.dispose();
_connectivity.disposeStream();
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Platform.isAndroid switch (_source.keys.toList()[0]) {
case ConnectivityResult.mobile:
connection = 'Online';
break;
case ConnectivityResult.wifi:
connection = 'Online';
break;
case ConnectivityResult.none:
default:
connection = 'Offline';
}
return (connection=="Online")?Platform.isAndroid
? WillPopScope( ? WillPopScope(
onWillPop: () => onBackPressed(context), onWillPop: () => onBackPressed(context),
child: SafeArea(top: false, bottom: true, child: _scaffold(context)), child: SafeArea(top: false, bottom: true, child: _scaffold(context)),
) )
: _scaffold(context); : _scaffold(context):NoNetwork(context);
} }
Widget _scaffold(BuildContext context) { Widget _scaffold(BuildContext context) {
......
import 'dart:io'; import 'dart:io';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart'; import 'package:flutter_svg/svg.dart';
import 'package:generp/Notifiers/GeneratorDetailsProvider.dart'; import 'package:generp/Notifiers/GeneratorDetailsProvider.dart';
...@@ -9,6 +10,7 @@ import 'package:url_launcher/url_launcher.dart'; ...@@ -9,6 +10,7 @@ import 'package:url_launcher/url_launcher.dart';
import '../../Notifiers/HomeScreenNotifier.dart'; import '../../Notifiers/HomeScreenNotifier.dart';
import '../../Utils/app_colors.dart'; import '../../Utils/app_colors.dart';
import '../../Utils/commonServices.dart';
import '../../Utils/commonWidgets.dart'; import '../../Utils/commonWidgets.dart';
import 'ScanEnterGeneratorIDScreen.dart'; import 'ScanEnterGeneratorIDScreen.dart';
...@@ -29,10 +31,19 @@ class Generatordetails extends StatefulWidget { ...@@ -29,10 +31,19 @@ class Generatordetails extends StatefulWidget {
} }
class _GeneratordetailsState extends State<Generatordetails> { class _GeneratordetailsState extends State<Generatordetails> {
Map _source = {ConnectivityResult.mobile: true};
final MyConnectivity _connectivity = MyConnectivity.instance;
@override @override
void initState() { void initState() {
// TODO: implement initState // TODO: implement initState
super.initState(); super.initState();
_connectivity.initialise();
_connectivity.myStream.listen((source) {
setState(() => _source = source);
});
WidgetsBinding.instance.addPostFrameCallback((_) { WidgetsBinding.instance.addPostFrameCallback((_) {
var details = Provider.of<Generatordetailsprovider>( var details = Provider.of<Generatordetailsprovider>(
context, context,
...@@ -62,9 +73,27 @@ class _GeneratordetailsState extends State<Generatordetails> { ...@@ -62,9 +73,27 @@ class _GeneratordetailsState extends State<Generatordetails> {
}); });
} }
@override
void dispose() {
// TODO: implement dispose
super.dispose();
_connectivity.disposeStream();
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Consumer2<Generatordetailsprovider, HomescreenNotifier>( switch (_source.keys.toList()[0]) {
case ConnectivityResult.mobile:
connection = 'Online';
break;
case ConnectivityResult.wifi:
connection = 'Online';
break;
case ConnectivityResult.none:
default:
connection = 'Offline';
}
return connection=="Online"?Consumer2<Generatordetailsprovider, HomescreenNotifier>(
builder: (context, provider, Homeprovider, child) { builder: (context, provider, Homeprovider, child) {
var sendwidget = SizedBox(width: 0); var sendwidget = SizedBox(width: 0);
return WillPopScope( return WillPopScope(
...@@ -862,7 +891,7 @@ class _GeneratordetailsState extends State<Generatordetails> { ...@@ -862,7 +891,7 @@ class _GeneratordetailsState extends State<Generatordetails> {
), ),
); );
}, },
); ):NoNetwork(context);
} }
} }
......
import 'dart:io'; import 'dart:io';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:dropdown_button2/dropdown_button2.dart'; import 'package:dropdown_button2/dropdown_button2.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart'; import 'package:flutter_svg/svg.dart';
...@@ -10,6 +11,7 @@ import 'package:provider/provider.dart'; ...@@ -10,6 +11,7 @@ import 'package:provider/provider.dart';
import '../../Models/loadGeneratorDetailsResponse.dart'; import '../../Models/loadGeneratorDetailsResponse.dart';
import '../../Utils/app_colors.dart'; import '../../Utils/app_colors.dart';
import '../../Utils/commonServices.dart';
class Registercomplaint extends StatefulWidget { class Registercomplaint extends StatefulWidget {
const Registercomplaint({super.key}); const Registercomplaint({super.key});
...@@ -19,525 +21,662 @@ class Registercomplaint extends StatefulWidget { ...@@ -19,525 +21,662 @@ class Registercomplaint extends StatefulWidget {
} }
class _RegistercomplaintState extends State<Registercomplaint> { class _RegistercomplaintState extends State<Registercomplaint> {
Map _source = {ConnectivityResult.mobile: true};
final MyConnectivity _connectivity = MyConnectivity.instance;
TextEditingController running_hrs = TextEditingController(); TextEditingController running_hrs = TextEditingController();
TextEditingController Complaint_Note = TextEditingController(); TextEditingController Complaint_Note = TextEditingController();
Dropdowntheme ddtheme = Dropdowntheme(); Dropdowntheme ddtheme = Dropdowntheme();
@override @override
Widget build(BuildContext context) { void initState() {
return Consumer2<Generatordetailsprovider, HomescreenNotifier>( // TODO: implement initState
builder: (context, provider, homeProvider, child) { super.initState();
return WillPopScope( _connectivity.initialise();
onWillPop: () => onBackPressed(context), _connectivity.myStream.listen((source) {
child: SafeArea( setState(() => _source = source);
top: false, });
bottom: Platform.isIOS?false:true, }
child: Scaffold(
resizeToAvoidBottomInset: true,
backgroundColor: AppColors.scaffold_bg_color,
appBar: appbar(context, "Register Complaint"),
body: Container(
child: SingleChildScrollView(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
SizedBox(height: 5.0),
Container(
padding: EdgeInsets.fromLTRB(10, 0, 10, 0),
child: Column( @override
crossAxisAlignment: CrossAxisAlignment.start, void dispose() {
children: [ // TODO: implement dispose
SizedBox(height: 25), super.dispose();
Container( _connectivity.disposeStream();
padding: EdgeInsets.symmetric(horizontal: 10), }
child: Text(
"Customer Details",
style: TextStyle(
fontFamily: "JakartaMedium",
color: Color(0xFF818181)),
),
),
Container(
padding: EdgeInsets.fromLTRB(10, 10, 10, 10),
margin: EdgeInsets.symmetric(
horizontal: 10, vertical: 5),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(16)
),
child: Column(
children: [ @override
Row( Widget build(BuildContext context) {
crossAxisAlignment: CrossAxisAlignment.center, switch (_source.keys.toList()[0]) {
mainAxisAlignment: MainAxisAlignment.center, case ConnectivityResult.mobile:
children: [ connection = 'Online';
Expanded( break;
flex: 1, case ConnectivityResult.wifi:
child: SvgPicture.asset( connection = 'Online';
"assets/svg/se_block_head.svg", break;
), case ConnectivityResult.none:
), default:
SizedBox(width: 10), connection = 'Offline';
}
return connection == "Online"
? Consumer2<Generatordetailsprovider, HomescreenNotifier>(
builder: (context, provider, homeProvider, child) {
return WillPopScope(
onWillPop: () => onBackPressed(context),
child: SafeArea(
top: false,
bottom: Platform.isIOS ? false : true,
child: Scaffold(
resizeToAvoidBottomInset: true,
backgroundColor: AppColors.scaffold_bg_color,
appBar: appbar(context, "Register Complaint"),
body: Container(
child: SingleChildScrollView(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
SizedBox(height: 5.0),
Container(
padding: EdgeInsets.fromLTRB(10, 0, 10, 0),
Expanded( child: Column(
flex: 9, crossAxisAlignment: CrossAxisAlignment.start,
child: SizedBox( children: [
child: Column( SizedBox(height: 25),
crossAxisAlignment: Container(
CrossAxisAlignment.start, padding: EdgeInsets.symmetric(horizontal: 10),
children: [ child: Text(
Text("${provider.cname}",style: TextStyle( "Customer Details",
fontFamily: "JakartaMedium" style: TextStyle(
),), fontFamily: "JakartaMedium",
Text( color: Color(0xFF818181),
"${provider.aname}", ),
maxLines: 2, ),
overflow: TextOverflow.ellipsis, ),
style: TextStyle( Container(
color: Color(0xFF818181), padding: EdgeInsets.fromLTRB(10, 10, 10, 10),
), margin: EdgeInsets.symmetric(
), horizontal: 10,
// Text("Gen Pvt. Ltd"), vertical: 5,
], ),
), decoration: BoxDecoration(
), color: Colors.white,
), borderRadius: BorderRadius.circular(16),
],
), ),
Divider(thickness: 0.5, color: Color(0xFFD7D7D7)), child: Column(
...List.generate(2, (j) { children: [
final textheads = ["Product Name", "Engine ID"]; Row(
final textSubheads = [ crossAxisAlignment:
provider.spname, CrossAxisAlignment.center,
provider.engineNo, mainAxisAlignment:
]; MainAxisAlignment.center,
return Container(
padding: EdgeInsets.symmetric(vertical: 3),
child: Column(
children: [ children: [
Row( Expanded(
mainAxisAlignment: flex: 1,
MainAxisAlignment.spaceBetween, child: SvgPicture.asset(
children: [ "assets/svg/se_block_head.svg",
Expanded( ),
child: SizedBox( ),
child: Column( SizedBox(width: 10),
crossAxisAlignment:
Expanded(
flex: 9,
child: SizedBox(
child: Column(
crossAxisAlignment:
CrossAxisAlignment.start, CrossAxisAlignment.start,
children: [ children: [
Text(textheads[j].toString(),style: TextStyle( Text(
fontFamily: "JakartaMedium" "${provider.cname}",
),), style: TextStyle(
], fontFamily:
"JakartaMedium",
),
), ),
), Text(
), "${provider.aname}",
Expanded( maxLines: 2,
child: SizedBox( overflow:
child: Column( TextOverflow.ellipsis,
crossAxisAlignment: style: TextStyle(
CrossAxisAlignment.start, color: Color(0xFF818181),
children: [ ),
Text(
textSubheads[j].toString(),
style: TextStyle(
color: Color(0xFF818181),
),
),
],
), ),
), // Text("Gen Pvt. Ltd"),
],
), ),
], ),
), ),
], ],
), ),
); Divider(
}), thickness: 0.5,
SizedBox(height: 10.0), color: Color(0xFFD7D7D7),
),
...List.generate(2, (j) {
], final textheads = [
), "Product Name",
), "Engine ID",
Container( ];
padding: EdgeInsets.symmetric(horizontal: 10), final textSubheads = [
child: Text( provider.spname,
"Complaint Details", provider.engineNo,
style: TextStyle( ];
fontFamily: "JakartaMedium", return Container(
color: Color(0xFF818181)), padding: EdgeInsets.symmetric(
), vertical: 3,
), ),
Container( child: Column(
padding: EdgeInsets.fromLTRB(10, 10, 10, 10), children: [
margin: EdgeInsets.symmetric( Row(
horizontal: 10, vertical: 5), mainAxisAlignment:
decoration: BoxDecoration( MainAxisAlignment
color: Colors.white, .spaceBetween,
borderRadius: BorderRadius.circular(16) children: [
), Expanded(
child: Column( child: SizedBox(
crossAxisAlignment: CrossAxisAlignment.start, child: Column(
children: [ crossAxisAlignment:
Padding( CrossAxisAlignment
padding: const EdgeInsets.only(bottom: 5.0), .start,
child: Text("Complaint Type",style: TextStyle( children: [
fontFamily: "JakartaMedium", Text(
),), textheads[j]
), .toString(),
DropdownButtonHideUnderline( style: TextStyle(
child: Row( fontFamily:
children: [ "JakartaMedium",
Expanded( ),
child: DropdownButton2<ComplaintTypeList>( ),
isExpanded: true, ],
hint: const Row( ),
children: [
Expanded(
child: Text(
'Select Complaint Type',
style: TextStyle(
fontSize: 14,
), ),
overflow: TextOverflow.ellipsis,
), ),
), Expanded(
], child: SizedBox(
), child: Column(
items: crossAxisAlignment:
provider.complaintTypeDropdown CrossAxisAlignment
.map( .start,
(complaintType) => children: [
DropdownMenuItem< Text(
ComplaintTypeList>( textSubheads[j]
value: complaintType, .toString(),
child: Text( style: TextStyle(
complaintType.name ?? '', color: Color(
style: const TextStyle( 0xFF818181,
fontSize: 14, ),
),
),
],
), ),
overflow: TextOverflow
.ellipsis,
), ),
), ),
) ],
.toList(), ),
value: provider.selectedComplaintType, ],
onChanged: (ComplaintTypeList? value) {
if (value != null) {
if (provider
.complaintCategorydropdown
.isNotEmpty) {
provider.selectedComplaintType =
value;
print(
"Selected Complaint Type: ${value
.name}, ID: ${value.id}",
);
provider.selectedType =
value?.name;
provider.selectedTypeId =
value?.id;
print(
"hfjkshfg" +
provider.selectedTypeId
.toString(),
);
}
}
},
buttonStyleData: ddtheme.buttonStyleData,
iconStyleData: ddtheme.iconStyleData,
menuItemStyleData: ddtheme.menuItemStyleData,
dropdownStyleData: ddtheme.dropdownStyleData,
), ),
), );
], }),
), SizedBox(height: 10.0),
],
), ),
SizedBox(height: 10.0), ),
Padding( Container(
padding: const EdgeInsets.only(bottom: 5.0), padding: EdgeInsets.symmetric(horizontal: 10),
child: Text("Complaint Category",style: TextStyle( child: Text(
"Complaint Details",
style: TextStyle(
fontFamily: "JakartaMedium", fontFamily: "JakartaMedium",
),), color: Color(0xFF818181),
),
), ),
DropdownButtonHideUnderline( ),
child: Row( Container(
children: [ padding: EdgeInsets.fromLTRB(10, 10, 10, 10),
Expanded( margin: EdgeInsets.symmetric(
child: DropdownButton2< horizontal: 10,
ComplaintCategoryList>( vertical: 5,
isExpanded: true, ),
hint: const Row( decoration: BoxDecoration(
children: [ color: Colors.white,
Expanded( borderRadius: BorderRadius.circular(16),
child: Text( ),
'Select Complaint Category', child: Column(
style: TextStyle( crossAxisAlignment:
fontSize: 14, CrossAxisAlignment.start,
children: [
Padding(
padding: const EdgeInsets.only(
bottom: 5.0,
),
child: Text(
"Complaint Type",
style: TextStyle(
fontFamily: "JakartaMedium",
),
),
),
DropdownButtonHideUnderline(
child: Row(
children: [
Expanded(
child: DropdownButton2<
ComplaintTypeList
>(
isExpanded: true,
hint: const Row(
children: [
Expanded(
child: Text(
'Select Complaint Type',
style: TextStyle(
fontSize: 14,
),
overflow:
TextOverflow
.ellipsis,
),
), ),
overflow: TextOverflow.ellipsis, ],
),
), ),
], items:
provider
.complaintTypeDropdown
.map(
(
complaintType,
) => DropdownMenuItem<
ComplaintTypeList
>(
value:
complaintType,
child: Text(
complaintType
.name ??
'',
style:
const TextStyle(
fontSize:
14,
),
overflow:
TextOverflow
.ellipsis,
),
),
)
.toList(),
value:
provider
.selectedComplaintType,
onChanged: (
ComplaintTypeList? value,
) {
if (value != null) {
if (provider
.complaintCategorydropdown
.isNotEmpty) {
provider.selectedComplaintType =
value;
print(
"Selected Complaint Type: ${value.name}, ID: ${value.id}",
);
provider.selectedType =
value?.name;
provider.selectedTypeId =
value?.id;
print(
"hfjkshfg" +
provider
.selectedTypeId
.toString(),
);
}
}
},
buttonStyleData:
ddtheme.buttonStyleData,
iconStyleData:
ddtheme.iconStyleData,
menuItemStyleData:
ddtheme.menuItemStyleData,
dropdownStyleData:
ddtheme.dropdownStyleData,
),
), ),
items: ],
provider.complaintCategorydropdown ),
.map( ),
(Category) => SizedBox(height: 10.0),
DropdownMenuItem< Padding(
ComplaintCategoryList padding: const EdgeInsets.only(
>( bottom: 5.0,
value: Category, ),
child: Text( child: Text(
Category.name ?? "", "Complaint Category",
style: const TextStyle( style: TextStyle(
fontSize: 14, fontFamily: "JakartaMedium",
),
overflow: TextOverflow
.ellipsis,
),
),
)
.toList(),
value: provider.selectedCategoryType,
onChanged: (
ComplaintCategoryList? value) {
if (provider
.complaintCategorydropdown
.isNotEmpty) {
provider.selectedCategoryType =
value;
provider.selectedCategory =
value?.name;
provider.selectedCategoryId =
value?.id;
}
},
buttonStyleData: ddtheme.buttonStyleData,
iconStyleData: ddtheme.iconStyleData,
menuItemStyleData: ddtheme.menuItemStyleData,
dropdownStyleData: ddtheme.dropdownStyleData,
), ),
), ),
], ),
), DropdownButtonHideUnderline(
), child: Row(
children: [
SizedBox(height: 10.0), Expanded(
Padding( child: DropdownButton2<
padding: const EdgeInsets.only(bottom: 5.0), ComplaintCategoryList
child: Text("Select Description",style: TextStyle( >(
fontFamily: "JakartaMedium", isExpanded: true,
),), hint: const Row(
), children: [
DropdownButtonHideUnderline( Expanded(
child: Row( child: Text(
children: [ 'Select Complaint Category',
Expanded( style: TextStyle(
child: DropdownButton2< fontSize: 14,
ComplaintDescriptionList>( ),
isExpanded: true, overflow:
hint: const Row( TextOverflow
children: [ .ellipsis,
Expanded( ),
child: Text(
'Select Description',
style: TextStyle(
fontSize: 14,
), ),
overflow: TextOverflow.ellipsis, ],
),
), ),
], items:
provider
.complaintCategorydropdown
.map(
(
Category,
) => DropdownMenuItem<
ComplaintCategoryList
>(
value: Category,
child: Text(
Category.name ??
"",
style:
const TextStyle(
fontSize:
14,
),
overflow:
TextOverflow
.ellipsis,
),
),
)
.toList(),
value:
provider
.selectedCategoryType,
onChanged: (
ComplaintCategoryList? value,
) {
if (provider
.complaintCategorydropdown
.isNotEmpty) {
provider.selectedCategoryType =
value;
provider.selectedCategory =
value?.name;
provider.selectedCategoryId =
value?.id;
}
},
buttonStyleData:
ddtheme.buttonStyleData,
iconStyleData:
ddtheme.iconStyleData,
menuItemStyleData:
ddtheme.menuItemStyleData,
dropdownStyleData:
ddtheme.dropdownStyleData,
),
), ),
items: ],
provider.complaintDescriptionDropdown ),
.map( ),
(Description) =>
DropdownMenuItem< SizedBox(height: 10.0),
ComplaintDescriptionList Padding(
>( padding: const EdgeInsets.only(
value: Description, bottom: 5.0,
child: Text( ),
Description.name ?? "", child: Text(
style: const TextStyle( "Select Description",
fontSize: 14, style: TextStyle(
fontFamily: "JakartaMedium",
),
),
),
DropdownButtonHideUnderline(
child: Row(
children: [
Expanded(
child: DropdownButton2<
ComplaintDescriptionList
>(
isExpanded: true,
hint: const Row(
children: [
Expanded(
child: Text(
'Select Description',
style: TextStyle(
fontSize: 14,
),
overflow:
TextOverflow
.ellipsis,
), ),
overflow: TextOverflow
.ellipsis,
), ),
), ],
) ),
.toList(), items:
value: provider.selectedDescriptionType, provider
onChanged: ( .complaintDescriptionDropdown
ComplaintDescriptionList? value) { .map(
if (provider (
.complaintDescriptionDropdown Description,
.isNotEmpty) { ) => DropdownMenuItem<
provider.selectedDescriptionType = ComplaintDescriptionList
value; >(
provider.selectedDescription = value: Description,
value?.name; child: Text(
provider.selectedDescriptionId = Description
value?.id; .name ??
} "",
}, style:
buttonStyleData: ddtheme.buttonStyleData, const TextStyle(
iconStyleData: ddtheme.iconStyleData, fontSize:
menuItemStyleData: ddtheme.menuItemStyleData, 14,
dropdownStyleData: ddtheme.dropdownStyleData, ),
), overflow:
TextOverflow
.ellipsis,
),
),
)
.toList(),
value:
provider
.selectedDescriptionType,
onChanged: (
ComplaintDescriptionList?
value,
) {
if (provider
.complaintDescriptionDropdown
.isNotEmpty) {
provider.selectedDescriptionType =
value;
provider.selectedDescription =
value?.name;
provider.selectedDescriptionId =
value?.id;
}
},
buttonStyleData:
ddtheme.buttonStyleData,
iconStyleData:
ddtheme.iconStyleData,
menuItemStyleData:
ddtheme.menuItemStyleData,
dropdownStyleData:
ddtheme.dropdownStyleData,
),
),
],
), ),
], ),
),
),
SizedBox(height: 10.0),
Padding(
padding: const EdgeInsets.only(bottom: 5.0),
child: Text("Duration",style: TextStyle(
fontFamily: "JakartaMedium",
),),
),
Container(
height: 50,
alignment: Alignment.center,
decoration: BoxDecoration(
color: AppColors.text_field_color,
borderRadius:
BorderRadius.circular(14),
),
child: Padding(
padding:
const EdgeInsets.fromLTRB(
10.0, 0.0, 10, 0),
child: TextFormField(
controller:
running_hrs,
keyboardType:
TextInputType.text,
decoration: InputDecoration(
hintText: SizedBox(height: 10.0),
"Enter Running Number", Padding(
hintStyle: TextStyle( padding: const EdgeInsets.only(
fontWeight: FontWeight.w400, bottom: 5.0,
color: Color(0xFFB4BEC0), ),
fontSize: 14 child: Text(
"Duration",
style: TextStyle(
fontFamily: "JakartaMedium",
), ),
enabledBorder:
InputBorder.none,
focusedBorder:
InputBorder.none,
), ),
), ),
), Container(
), height: 50,
SizedBox(height: 10.0),
Padding(
padding: const EdgeInsets.only(bottom: 5.0),
child: Text("Message",style: TextStyle(
fontFamily: "JakartaMedium",
),),
),
Container(
height: 150,
alignment: Alignment.center, alignment: Alignment.center,
decoration: BoxDecoration( decoration: BoxDecoration(
color: AppColors.text_field_color, color: AppColors.text_field_color,
borderRadius: borderRadius: BorderRadius.circular(
BorderRadius.circular(14), 14,
), ),
child: Padding( ),
padding: child: Padding(
const EdgeInsets.fromLTRB( padding: const EdgeInsets.fromLTRB(
10.0, 0.0, 10, 0), 10.0,
child: TextFormField( 0.0,
maxLines: 6, 10,
controller: 0,
Complaint_Note, ),
keyboardType: child: TextFormField(
TextInputType.text, controller: running_hrs,
decoration: InputDecoration( keyboardType: TextInputType.text,
decoration: InputDecoration(
hintText: "Enter Running Number",
hintStyle: TextStyle(
fontWeight: FontWeight.w400,
color: Color(0xFFB4BEC0),
fontSize: 14,
),
hintText: enabledBorder: InputBorder.none,
"Enter Message", focusedBorder: InputBorder.none,
hintStyle: TextStyle( ),
fontWeight: FontWeight.w400,
color: Color(0xFFB4BEC0),
fontSize: 14
), ),
),
),
SizedBox(height: 10.0),
Padding(
padding: const EdgeInsets.only(
bottom: 5.0,
),
child: Text(
"Message",
style: TextStyle(
fontFamily: "JakartaMedium",
),
),
),
Container(
height: 150,
enabledBorder: alignment: Alignment.center,
InputBorder.none, decoration: BoxDecoration(
focusedBorder: color: AppColors.text_field_color,
InputBorder.none, borderRadius: BorderRadius.circular(
14,
),
), ),
child: Padding(
padding: const EdgeInsets.fromLTRB(
10.0,
0.0,
10,
0,
),
child: TextFormField(
maxLines: 6,
controller: Complaint_Note,
keyboardType: TextInputType.text,
decoration: InputDecoration(
hintText: "Enter Message",
hintStyle: TextStyle(
fontWeight: FontWeight.w400,
color: Color(0xFFB4BEC0),
fontSize: 14,
),
enabledBorder: InputBorder.none,
focusedBorder: InputBorder.none,
),
),
),
), ),
), ],
), ),
], ),
),
),
SizedBox(height: 65.0), SizedBox(height: 65.0),
],
], ),
), ),
],
), ),
],
),
),
),
floatingActionButton: Container(
child: InkWell(
onTap: () {
provider.SubmitComplaintFunction(
context,
homeProvider,
provider.genID,
provider.selectedTypeId,
provider.selectedDescriptionId,
running_hrs.text,
Complaint_Note.text);
},
child: Container(
alignment: Alignment.center,
height: 45,
margin: EdgeInsets.only(left: 15.0, right: 15.0),
decoration: BoxDecoration(
color: AppColors.app_blue,
borderRadius: BorderRadius.circular(10.0),
), ),
child: Text( ),
"Submit Complaint", floatingActionButton: Container(
textAlign: TextAlign.center, child: InkWell(
style: TextStyle( onTap: () {
fontFamily: "JakartaMedium", provider.SubmitComplaintFunction(
fontSize: 15, context,
color: Colors.white homeProvider,
provider.genID,
provider.selectedTypeId,
provider.selectedDescriptionId,
running_hrs.text,
Complaint_Note.text,
);
},
child: Container(
alignment: Alignment.center,
height: 45,
margin: EdgeInsets.only(left: 15.0, right: 15.0),
decoration: BoxDecoration(
color: AppColors.app_blue,
borderRadius: BorderRadius.circular(10.0),
),
child: Text(
"Submit Complaint",
textAlign: TextAlign.center,
style: TextStyle(
fontFamily: "JakartaMedium",
fontSize: 15,
color: Colors.white,
),
),
), ),
), ),
), ),
floatingActionButtonLocation:
FloatingActionButtonLocation.centerFloat,
), ),
), ),
floatingActionButtonLocation: FloatingActionButtonLocation );
.centerFloat, },
), )
), : NoNetwork(context);
);
},
);
} }
} }
import 'dart:io'; import 'dart:io';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:generp/Notifiers/GeneratorDetailsProvider.dart'; import 'package:generp/Notifiers/GeneratorDetailsProvider.dart';
import 'package:generp/Utils/commonServices.dart'; import 'package:generp/Utils/commonServices.dart';
...@@ -24,10 +25,17 @@ class _ScanentergeneratoridscreenState extends State<Scanentergeneratoridscreen> ...@@ -24,10 +25,17 @@ class _ScanentergeneratoridscreenState extends State<Scanentergeneratoridscreen>
TextEditingController genIDcontroller = TextEditingController(); TextEditingController genIDcontroller = TextEditingController();
Map _source = {ConnectivityResult.mobile: true};
final MyConnectivity _connectivity = MyConnectivity.instance;
@override @override
void initState() { void initState() {
// TODO: implement initState // TODO: implement initState
super.initState(); super.initState();
_connectivity.initialise();
_connectivity.myStream.listen((source) {
setState(() => _source = source);
});
WidgetsBinding.instance.addPostFrameCallback((_) { WidgetsBinding.instance.addPostFrameCallback((_) {
var provider = Provider.of<Generatordetailsprovider>( var provider = Provider.of<Generatordetailsprovider>(
context, context,
...@@ -50,6 +58,7 @@ class _ScanentergeneratoridscreenState extends State<Scanentergeneratoridscreen> ...@@ -50,6 +58,7 @@ class _ScanentergeneratoridscreenState extends State<Scanentergeneratoridscreen>
super.dispose(); super.dispose();
genIDcontroller.clear(); genIDcontroller.clear();
genIDcontroller.dispose(); genIDcontroller.dispose();
_connectivity.disposeStream();
} }
...@@ -57,7 +66,18 @@ class _ScanentergeneratoridscreenState extends State<Scanentergeneratoridscreen> ...@@ -57,7 +66,18 @@ class _ScanentergeneratoridscreenState extends State<Scanentergeneratoridscreen>
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Consumer<Generatordetailsprovider>( switch (_source.keys.toList()[0]) {
case ConnectivityResult.mobile:
connection = 'Online';
break;
case ConnectivityResult.wifi:
connection = 'Online';
break;
case ConnectivityResult.none:
default:
connection = 'Offline';
}
return connection=="Online"?Consumer<Generatordetailsprovider>(
builder: (context, provider, child) { builder: (context, provider, child) {
return WillPopScope( return WillPopScope(
onWillPop: () => onBackPressed(context), onWillPop: () => onBackPressed(context),
...@@ -134,7 +154,7 @@ class _ScanentergeneratoridscreenState extends State<Scanentergeneratoridscreen> ...@@ -134,7 +154,7 @@ class _ScanentergeneratoridscreenState extends State<Scanentergeneratoridscreen>
), ),
); );
}, },
); ):NoNetwork(context);
} }
Future<void> _showgenIdBottomSheet(BuildContext context) { Future<void> _showgenIdBottomSheet(BuildContext context) {
......
import 'dart:io'; import 'dart:io';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:generp/screens/finance/FileViewer.dart'; import 'package:generp/screens/finance/FileViewer.dart';
import 'package:generp/screens/notifierExports.dart'; import 'package:generp/screens/notifierExports.dart';
...@@ -23,11 +24,17 @@ class _GeneratorPartDetailsScreenState ...@@ -23,11 +24,17 @@ class _GeneratorPartDetailsScreenState
TextEditingController descriptioncontroller = TextEditingController(); TextEditingController descriptioncontroller = TextEditingController();
TextEditingController quantitycontroller = TextEditingController(); TextEditingController quantitycontroller = TextEditingController();
Map _source = {ConnectivityResult.mobile: true};
final MyConnectivity _connectivity = MyConnectivity.instance;
@override @override
void initState() { void initState() {
// TODO: implement initState // TODO: implement initState
super.initState(); super.initState();
_connectivity.initialise();
_connectivity.myStream.listen((source) {
setState(() => _source = source);
});
WidgetsBinding.instance.addPostFrameCallback((_) { WidgetsBinding.instance.addPostFrameCallback((_) {
var homeProvider = Provider.of<HomescreenNotifier>( var homeProvider = Provider.of<HomescreenNotifier>(
context, context,
...@@ -36,6 +43,12 @@ class _GeneratorPartDetailsScreenState ...@@ -36,6 +43,12 @@ class _GeneratorPartDetailsScreenState
initialiseFunction(context, homeProvider); initialiseFunction(context, homeProvider);
}); });
} }
@override
void dispose() {
// TODO: implement dispose
super.dispose();
_connectivity.disposeStream();
}
void initialiseFunction(BuildContext context, homeProvider) async { void initialiseFunction(BuildContext context, homeProvider) async {
var inventoryProvider = Provider.of<InventoryProvider>( var inventoryProvider = Provider.of<InventoryProvider>(
...@@ -52,7 +65,19 @@ class _GeneratorPartDetailsScreenState ...@@ -52,7 +65,19 @@ class _GeneratorPartDetailsScreenState
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Consumer2<InventoryProvider, HomescreenNotifier>( switch (_source.keys.toList()[0]) {
case ConnectivityResult.mobile:
connection = 'Online';
break;
case ConnectivityResult.wifi:
connection = 'Online';
break;
case ConnectivityResult.none:
default:
connection = 'Offline';
}
return connection=="Online"?
Consumer2<InventoryProvider, HomescreenNotifier>(
builder: (context, provider, homeProvider, child) { builder: (context, provider, homeProvider, child) {
return WillPopScope( return WillPopScope(
onWillPop: () => onBackPressed(context), onWillPop: () => onBackPressed(context),
...@@ -546,7 +571,8 @@ class _GeneratorPartDetailsScreenState ...@@ -546,7 +571,8 @@ class _GeneratorPartDetailsScreenState
), ),
); );
}, },
); ):
NoNetwork(context);
} }
Future<void> _showStockIssueBottomSheet(BuildContext context, type) { Future<void> _showStockIssueBottomSheet(BuildContext context, type) {
......
import 'dart:io'; import 'dart:io';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:generp/screens/notifierExports.dart'; import 'package:generp/screens/notifierExports.dart';
import 'package:generp/Utils/commonWidgets.dart'; import 'package:generp/Utils/commonWidgets.dart';
...@@ -7,6 +8,7 @@ import 'package:provider/provider.dart'; ...@@ -7,6 +8,7 @@ import 'package:provider/provider.dart';
import 'package:qr_code_scanner/qr_code_scanner.dart'; import 'package:qr_code_scanner/qr_code_scanner.dart';
import '../../Utils/app_colors.dart'; import '../../Utils/app_colors.dart';
import '../../Utils/commonServices.dart';
class InventoryScreen extends StatefulWidget { class InventoryScreen extends StatefulWidget {
const InventoryScreen({super.key}); const InventoryScreen({super.key});
...@@ -18,11 +20,17 @@ class InventoryScreen extends StatefulWidget { ...@@ -18,11 +20,17 @@ class InventoryScreen extends StatefulWidget {
class _InventoryScreenState extends State<InventoryScreen> { class _InventoryScreenState extends State<InventoryScreen> {
FocusNode partIDfocusNode = FocusNode(); FocusNode partIDfocusNode = FocusNode();
TextEditingController partIDcontroller = TextEditingController(); TextEditingController partIDcontroller = TextEditingController();
Map _source = {ConnectivityResult.mobile: true};
final MyConnectivity _connectivity = MyConnectivity.instance;
@override @override
void initState() { void initState() {
// TODO: implement initState // TODO: implement initState
super.initState(); super.initState();
_connectivity.initialise();
_connectivity.myStream.listen((source) {
setState(() => _source = source);
});
WidgetsBinding.instance.addPostFrameCallback((_) { WidgetsBinding.instance.addPostFrameCallback((_) {
var inventoryProvider = Provider.of<InventoryProvider>( var inventoryProvider = Provider.of<InventoryProvider>(
context, context,
...@@ -33,14 +41,38 @@ class _InventoryScreenState extends State<InventoryScreen> { ...@@ -33,14 +41,38 @@ class _InventoryScreenState extends State<InventoryScreen> {
}); });
} }
@override
void dispose() {
// TODO: implement dispose
super.dispose();
_connectivity.disposeStream();
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Platform.isAndroid switch (_source.keys.toList()[0]) {
? WillPopScope( case ConnectivityResult.mobile:
onWillPop: () => onBackPressed(context), connection = 'Online';
child: SafeArea(top: false, bottom: true, child: _scaffold(context)), break;
) case ConnectivityResult.wifi:
: _scaffold(context); connection = 'Online';
break;
case ConnectivityResult.none:
default:
connection = 'Offline';
}
return (connection == 'Online')
? Platform.isAndroid
? WillPopScope(
onWillPop: () => onBackPressed(context),
child: SafeArea(
top: false,
bottom: true,
child: _scaffold(context),
),
)
: _scaffold(context)
: NoNetwork(context);
} }
Widget _scaffold(BuildContext context) { Widget _scaffold(BuildContext context) {
......
...@@ -13,6 +13,8 @@ import 'package:provider/provider.dart'; ...@@ -13,6 +13,8 @@ import 'package:provider/provider.dart';
import '../../Models/ordersModels/AddOrderViewResponse.dart'; import '../../Models/ordersModels/AddOrderViewResponse.dart';
import '../../Utils/app_colors.dart'; import '../../Utils/app_colors.dart';
import '../../Utils/commonWidgets.dart'; import '../../Utils/commonWidgets.dart';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:generp/Utils/commonServices.dart';
class AddorderScreen extends StatefulWidget { class AddorderScreen extends StatefulWidget {
final pageTitleName; final pageTitleName;
...@@ -30,10 +32,17 @@ class _AddorderScreenState extends State<AddorderScreen> { ...@@ -30,10 +32,17 @@ class _AddorderScreenState extends State<AddorderScreen> {
List<FocusNode> focusNodes = List.generate(10, (index) => FocusNode()); List<FocusNode> focusNodes = List.generate(10, (index) => FocusNode());
Dropdowntheme ddtheme = Dropdowntheme(); Dropdowntheme ddtheme = Dropdowntheme();
Map _source = {ConnectivityResult.mobile: true};
final MyConnectivity _connectivity = MyConnectivity.instance;
@override @override
void initState() { void initState() {
// TODO: implement initState // TODO: implement initState
super.initState(); super.initState();
_connectivity.initialise();
_connectivity.myStream.listen((source) {
setState(() => _source = source);
});
WidgetsBinding.instance.addPostFrameCallback((timeStamp) { WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
var provider = Provider.of<Addorderprovider>(context, listen: false); var provider = Provider.of<Addorderprovider>(context, listen: false);
if (provider.dateNow == null) { if (provider.dateNow == null) {
...@@ -50,6 +59,8 @@ class _AddorderScreenState extends State<AddorderScreen> { ...@@ -50,6 +59,8 @@ class _AddorderScreenState extends State<AddorderScreen> {
focusNodes.map((e) => e.dispose()); focusNodes.map((e) => e.dispose());
focusNode.dispose(); focusNode.dispose();
focusNodetpc.dispose(); focusNodetpc.dispose();
_connectivity.disposeStream();
super.dispose(); super.dispose();
} }
...@@ -60,47 +71,45 @@ class _AddorderScreenState extends State<AddorderScreen> { ...@@ -60,47 +71,45 @@ class _AddorderScreenState extends State<AddorderScreen> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Consumer<Addorderprovider>( switch (_source.keys.toList()[0]) {
builder: (context, provider, child) { case ConnectivityResult.mobile:
return WillPopScope( connection = 'Online';
child: SafeArea( break;
top: false, case ConnectivityResult.wifi:
bottom: Platform.isIOS?false:true, connection = 'Online';
child: Scaffold( break;
resizeToAvoidBottomInset: true, case ConnectivityResult.none:
backgroundColor: AppColors.white, default:
appBar: appbar2( connection = 'Offline';
context, }
"${widget.pageTitleName}", return connection == "Online"
provider.resetForm, ? Consumer<Addorderprovider>(
SizedBox(width: 0), builder: (context, provider, child) {
), return WillPopScope(
body: Container( child: SafeArea(
padding: EdgeInsets.symmetric(horizontal: 10), top: false,
decoration: BoxDecoration( bottom: Platform.isIOS ? false : true,
color: Colors.white, child: Scaffold(
borderRadius: BorderRadius.circular(20), resizeToAvoidBottomInset: true,
), backgroundColor: AppColors.white,
child: SingleChildScrollView( appBar: appbar2(
child: Column( context,
crossAxisAlignment: CrossAxisAlignment.start, "${widget.pageTitleName}",
children: [ provider.resetForm,
TextWidget(context, "Account"), SizedBox(width: 0),
InkResponse( ),
onTap: () { body: Container(
if (focusNode.hasFocus) { padding: EdgeInsets.symmetric(horizontal: 10),
focusNode.unfocus(); decoration: BoxDecoration(
} else { color: Colors.white,
FocusScope.of(context).requestFocus(focusNode); borderRadius: BorderRadius.circular(20),
} ),
}, child: SingleChildScrollView(
child: Container( child: Column(
alignment: Alignment.center, crossAxisAlignment: CrossAxisAlignment.start,
decoration: BoxDecoration( children: [
color: AppColors.text_field_color, TextWidget(context, "Account"),
borderRadius: BorderRadius.circular(14), InkResponse(
),
child: ListTile(
onTap: () { onTap: () {
if (focusNode.hasFocus) { if (focusNode.hasFocus) {
focusNode.unfocus(); focusNode.unfocus();
...@@ -108,1331 +117,1471 @@ class _AddorderScreenState extends State<AddorderScreen> { ...@@ -108,1331 +117,1471 @@ class _AddorderScreenState extends State<AddorderScreen> {
FocusScope.of(context).requestFocus(focusNode); FocusScope.of(context).requestFocus(focusNode);
} }
}, },
title: TextFormField( child: Container(
focusNode: focusNode, alignment: Alignment.center,
onTapUpOutside: (event) { decoration: BoxDecoration(
focusNode.unfocus(); color: AppColors.text_field_color,
}, borderRadius: BorderRadius.circular(14),
controller: provider.dropDownSearchController,
onChanged: (value) async {
Future.delayed(
Duration(milliseconds: 100),
() async {
await provider
.ordersAddOrderSelectAccountAPIFunction(
context,
widget.mode,
provider.selectedAccountID,
value,
);
},
);
},
decoration: InputDecoration(
enabledBorder: InputBorder.none,
focusedBorder: InputBorder.none,
isDense: true,
contentPadding: const EdgeInsets.symmetric(
horizontal: 0,
vertical: 8,
),
hintText: 'Select Account Type',
hintStyle: const TextStyle(fontSize: 14),
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(8),
),
),
),
trailing: InkResponse(
onTap: () {
if (focusNode.hasFocus) {
focusNode.unfocus();
} else {
FocusScope.of(context).requestFocus(focusNode);
}
},
child: SvgPicture.asset(
"assets/svg/arrow_dropdown.svg",
height: 25,
width: 20,
), ),
), child: ListTile(
), onTap: () {
), if (focusNode.hasFocus) {
), focusNode.unfocus();
if (provider.accountList.isNotEmpty && } else {
focusNode.hasFocus) ...[ FocusScope.of(
Card( context,
margin: EdgeInsets.symmetric(horizontal: 0), ).requestFocus(focusNode);
child: Container( }
padding: EdgeInsets.symmetric(horizontal: 10), },
height: widget.mode == "self" ? 50 : 150, title: TextFormField(
decoration: BoxDecoration( focusNode: focusNode,
borderRadius: BorderRadius.circular(16), onTapUpOutside: (event) {
), focusNode.unfocus();
child: Scrollbar( },
thickness: 2.5, controller: provider.dropDownSearchController,
radius: Radius.circular(6), onChanged: (value) async {
thumbVisibility: true, Future.delayed(
child: ListView.builder( Duration(milliseconds: 100),
itemCount: provider.accountList.length, () async {
shrinkWrap: true, await provider
physics: AlwaysScrollableScrollPhysics(), .ordersAddOrderSelectAccountAPIFunction(
itemBuilder: (context, index) {
return InkResponse(
onTap: () async {
if (provider.accountList.isNotEmpty) {
provider.selectedAccountList =
provider.accountList[index];
print(
"Selected Complaint Type: ${provider.accountList[index].text}, ID: ${provider.accountList[index].id}",
);
provider.selectedAccountID =
provider.accountList[index].id!;
provider.selectedAccountName =
provider.accountList[index].text!;
print(
"hfjkshfg" +
provider.selectedAccountID
.toString(),
);
provider.dropDownSearchController.text =
provider.accountList[index].text!;
provider
.ordersAddOrderAccountDetailsAPIFunction(
context, context,
widget.mode,
provider.selectedAccountID, provider.selectedAccountID,
value,
); );
} },
// provider.ordersAddPaymentSelectOrderAPIFunction(context, provider.selectedAccountID); );
provider.accountList = []; },
}, decoration: InputDecoration(
child: SizedBox( enabledBorder: InputBorder.none,
height: 45, focusedBorder: InputBorder.none,
child: Align( isDense: true,
alignment: Alignment.centerLeft, contentPadding: const EdgeInsets.symmetric(
child: Text( horizontal: 0,
provider.accountList[index].text!, vertical: 8,
), ),
),
hintText: 'Select Account Type',
hintStyle: const TextStyle(fontSize: 14),
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(8),
), ),
);
},
),
),
),
),
],
errorWidget(context, provider.selectAccountError),
if (widget.mode == "admin") ...[
TextWidget(context, "Sales Person"),
DropdownButtonHideUnderline(
child: Row(
children: [
Expanded(
child: DropdownButton2<Employees>(
isExpanded: true,
hint: Text(
"Select Sales Person",
style: TextStyle(fontSize: 14),
overflow: TextOverflow.ellipsis,
), ),
items: ),
provider.employees
.map( trailing: InkResponse(
(e) => DropdownMenuItem<Employees>( onTap: () {
value: e, if (focusNode.hasFocus) {
child: Text( focusNode.unfocus();
e.name!, } else {
style: const TextStyle( FocusScope.of(
fontSize: 14, context,
), ).requestFocus(focusNode);
),
),
)
.toList(),
value: provider.selectedEmployees,
onChanged: (Employees? value) {
if (provider.employees.isNotEmpty) {
provider.selectedEmployees = value;
provider.selectedEmployeeID = value!.id!;
provider.selectedEmployeeName =
value!.name!;
} }
}, },
buttonStyleData: ddtheme.buttonStyleData, child: SvgPicture.asset(
iconStyleData: ddtheme.iconStyleData, "assets/svg/arrow_dropdown.svg",
menuItemStyleData: ddtheme.menuItemStyleData, height: 25,
dropdownStyleData: ddtheme.dropdownStyleData, width: 20,
),
), ),
), ),
], ),
), ),
), if (provider.accountList.isNotEmpty &&
], focusNode.hasFocus) ...[
TextWidget(context, "Order Received Date"), Card(
GestureDetector( margin: EdgeInsets.symmetric(horizontal: 0),
onTap: () {
provider.showDatePickerDialog(context);
},
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Expanded(
child: Container( child: Container(
height: 50, padding: EdgeInsets.symmetric(horizontal: 10),
alignment: Alignment.center, height: widget.mode == "self" ? 50 : 150,
decoration: BoxDecoration( decoration: BoxDecoration(
color: AppColors.text_field_color, borderRadius: BorderRadius.circular(16),
borderRadius: BorderRadius.circular(14),
),
child: Padding(
padding: const EdgeInsets.fromLTRB(
10.0,
0.0,
10,
0,
),
child: TextFormField(
controller:
provider.orderReceivedDateController,
keyboardType: TextInputType.text,
enabled: false,
maxLines: 1,
readOnly: true,
onChanged: (value) {},
decoration: InputDecoration(
hintText: "Enter Date",
hintStyle: TextStyle(
fontWeight: FontWeight.w400,
color: Color(0xFFB4BEC0),
fontSize: 14,
),
enabledBorder: InputBorder.none,
disabledBorder: InputBorder.none,
focusedBorder: InputBorder.none,
),
),
), ),
), child: Scrollbar(
), thickness: 2.5,
], radius: Radius.circular(6),
), thumbVisibility: true,
), child: ListView.builder(
errorWidget(context, provider.orderDateError), itemCount: provider.accountList.length,
shrinkWrap: true,
physics: AlwaysScrollableScrollPhysics(),
itemBuilder: (context, index) {
return InkResponse(
onTap: () async {
if (provider.accountList.isNotEmpty) {
provider.selectedAccountList =
provider.accountList[index];
textControllerWidget( print(
context, "Selected Complaint Type: ${provider.accountList[index].text}, ID: ${provider.accountList[index].id}",
provider.billingNameController, );
"Billing Name", provider.selectedAccountID =
"Enter Billing Name", provider.accountList[index].id!;
provider.onChangedBillingName, provider.selectedAccountName =
TextInputType.text, provider
false, .accountList[index]
null, .text!;
focusNodes[0], print(
null, "hfjkshfg" +
TextInputAction.done, provider.selectedAccountID
), .toString(),
errorWidget(context, provider.billingNameError), );
TextWidget(context, "Billing State"), provider
//dd .dropDownSearchController
DropdownButtonHideUnderline( .text = provider
child: Row( .accountList[index]
children: [ .text!;
Expanded( provider
child: DropdownButton2<States>( .ordersAddOrderAccountDetailsAPIFunction(
isExpanded: true, context,
hint: Text( provider.selectedAccountID,
"Select State", );
style: TextStyle(fontSize: 14), }
overflow: TextOverflow.ellipsis, // provider.ordersAddPaymentSelectOrderAPIFunction(context, provider.selectedAccountID);
), provider.accountList = [];
items: },
provider.billingStates child: SizedBox(
.map( height: 45,
(e) => DropdownMenuItem<States>( child: Align(
value: e, alignment: Alignment.centerLeft,
child: Text( child: Text(
e.name!, provider.accountList[index].text!,
style: const TextStyle(
fontSize: 14,
),
), ),
), ),
)
.toList(),
value: provider.selecetdBillingStates,
onChanged: (States? value) {
if (provider.billingStates.isNotEmpty) {
provider.selecetdBillingStates = value;
provider.selectedBillingStateID = value!.id!;
provider.selectedBillingStateName =
value!.name!;
if (provider.billingDistricts.isNotEmpty) {
provider.billingDistricts.clear();
// provider.selectedBillingDistricts=null;
provider.selectedBillingDistrictId = null;
provider.selectedBillingDistrictValue = "";
}
provider.getDistrictAPI(
context,
provider.selectedBillingStateID,
);
}
},
dropdownSearchData: DropdownSearchData(
searchInnerWidgetHeight: 50,
searchController:
provider.billingStateSearchController,
searchInnerWidget: Padding(
padding: const EdgeInsets.all(8),
child: TextFormField(
controller:
provider.billingStateSearchController,
decoration: InputDecoration(
isDense: true,
contentPadding:
const EdgeInsets.symmetric(
horizontal: 10,
vertical: 8,
),
hintText: 'Search Sate...',
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(8),
), ),
), );
), },
), ),
searchMatchFn: (item, searchValue) {
return item.value?.name
?.toLowerCase()
.contains(
searchValue.toLowerCase(),
) ??
false;
},
), ),
onMenuStateChange: (isOpen) {
if (!isOpen) {
provider.billingStateSearchController.clear();
}
},
buttonStyleData: ddtheme.buttonStyleData,
iconStyleData: ddtheme.iconStyleData,
menuItemStyleData: ddtheme.menuItemStyleData,
dropdownStyleData: ddtheme.dropdownStyleData,
), ),
), ),
], ],
), errorWidget(context, provider.selectAccountError),
), if (widget.mode == "admin") ...[
errorWidget(context, provider.selectedBillingStateError), TextWidget(context, "Sales Person"),
TextWidget(context, "Billing District"), DropdownButtonHideUnderline(
//dd child: Row(
DropdownButtonHideUnderline( children: [
child: Row( Expanded(
children: [ child: DropdownButton2<Employees>(
Expanded( isExpanded: true,
child: DropdownButton2<Districts>( hint: Text(
isExpanded: true, "Select Sales Person",
hint: Text( style: TextStyle(fontSize: 14),
"Select District", overflow: TextOverflow.ellipsis,
style: const TextStyle(fontSize: 14),
),
items:
provider.billingDistricts
.map(
(e) => DropdownMenuItem<Districts>(
value: e,
child: Text(
e.district!,
style: const TextStyle(
fontSize: 14,
),
),
),
)
.toList(),
value: provider.selectedBillingDistricts,
onChanged: (Districts? value) {
if (provider.billingDistricts.isNotEmpty) {
provider.selectedBillingDistricts = value;
provider.selectedBillingDistrictId =
value!.id!;
provider.selectedBillingDistrictValue =
value!.district!;
if (provider.billingSubLocations.isNotEmpty) {
provider.billingSubLocations.clear();
// provider.selectedBillingSubLocations = null;
provider.selectedBillingSubLocID = null;
provider.selectedBillingSubLocValue = "";
}
provider.getSubLocationAPI(
context,
provider.selectedBillingDistrictId,
);
}
},
dropdownSearchData: DropdownSearchData(
searchInnerWidgetHeight: 50,
searchController:
provider.billingDistrictSearchController,
searchInnerWidget: Padding(
padding: const EdgeInsets.all(8),
child: TextFormField(
controller:
provider
.billingDistrictSearchController,
decoration: InputDecoration(
isDense: true,
contentPadding:
const EdgeInsets.symmetric(
horizontal: 10,
vertical: 8,
),
hintText: 'Search District...',
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(8),
),
), ),
items:
provider.employees
.map(
(e) =>
DropdownMenuItem<Employees>(
value: e,
child: Text(
e.name!,
style: const TextStyle(
fontSize: 14,
),
),
),
)
.toList(),
value: provider.selectedEmployees,
onChanged: (Employees? value) {
if (provider.employees.isNotEmpty) {
provider.selectedEmployees = value;
provider.selectedEmployeeID =
value!.id!;
provider.selectedEmployeeName =
value!.name!;
}
},
buttonStyleData: ddtheme.buttonStyleData,
iconStyleData: ddtheme.iconStyleData,
menuItemStyleData:
ddtheme.menuItemStyleData,
dropdownStyleData:
ddtheme.dropdownStyleData,
), ),
), ),
searchMatchFn: (item, searchValue) { ],
return item.value?.district
?.toLowerCase()
.contains(
searchValue.toLowerCase(),
) ??
false;
},
),
onMenuStateChange: (isOpen) {
if (!isOpen) {
provider.billingDistrictSearchController
.clear();
}
},
buttonStyleData: ddtheme.buttonStyleData,
iconStyleData: ddtheme.iconStyleData,
menuItemStyleData: ddtheme.menuItemStyleData,
dropdownStyleData: ddtheme.dropdownStyleData,
), ),
), ),
], ],
), TextWidget(context, "Order Received Date"),
), GestureDetector(
errorWidget(context, provider.selectedBillingDistrictError), onTap: () {
TextWidget(context, "Billing Sub Location"), provider.showDatePickerDialog(context);
//dd },
DropdownButtonHideUnderline( child: Row(
child: Row( crossAxisAlignment: CrossAxisAlignment.center,
children: [ children: [
Expanded( Expanded(
child: DropdownButton2<SubLocations>( child: Container(
hint: Text( height: 50,
"Select Sub Locality", alignment: Alignment.center,
style: const TextStyle(fontSize: 14), decoration: BoxDecoration(
), color: AppColors.text_field_color,
items: borderRadius: BorderRadius.circular(14),
provider.billingSubLocations ),
.map( child: Padding(
(e) => DropdownMenuItem<SubLocations>( padding: const EdgeInsets.fromLTRB(
value: e, 10.0,
child: Text( 0.0,
e.subLocality!, 10,
style: const TextStyle( 0,
fontSize: 14, ),
), child: TextFormField(
), controller:
provider
.orderReceivedDateController,
keyboardType: TextInputType.text,
enabled: false,
maxLines: 1,
readOnly: true,
onChanged: (value) {},
decoration: InputDecoration(
hintText: "Enter Date",
hintStyle: TextStyle(
fontWeight: FontWeight.w400,
color: Color(0xFFB4BEC0),
fontSize: 14,
), ),
)
.toList(), enabledBorder: InputBorder.none,
value: provider.selectedBillingSubLocations, disabledBorder: InputBorder.none,
onChanged: (SubLocations? value) { focusedBorder: InputBorder.none,
if (provider.billingSubLocations.isNotEmpty) {
provider.selectedBillingSubLocations = value;
provider.selectedBillingSubLocID = value!.id!;
provider.selectedBillingSubLocValue =
value!.subLocality!;
}
},
dropdownSearchData: DropdownSearchData(
searchInnerWidgetHeight: 50,
searchController:
provider.billingSubLocSearchController,
searchInnerWidget: Padding(
padding: const EdgeInsets.all(8),
child: TextFormField(
controller:
provider.billingSubLocSearchController,
decoration: InputDecoration(
isDense: true,
contentPadding:
const EdgeInsets.symmetric(
horizontal: 10,
vertical: 8,
),
hintText: 'Search Sub Location...',
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(8),
), ),
), ),
), ),
), ),
searchMatchFn: (item, searchValue) {
return item.value?.subLocality
?.toLowerCase()
.contains(
searchValue.toLowerCase(),
) ??
false;
},
), ),
onMenuStateChange: (isOpen) { ],
if (!isOpen) {
provider.billingSubLocSearchController
.clear();
}
},
buttonStyleData: ddtheme.buttonStyleData,
iconStyleData: ddtheme.iconStyleData,
menuItemStyleData: ddtheme.menuItemStyleData,
dropdownStyleData: ddtheme.dropdownStyleData,
),
), ),
], ),
), errorWidget(context, provider.orderDateError),
),
errorWidget(context, provider.selectedBillingSubLocError),
textControllerWidget(
context,
provider.billingAddressController,
"Billing Address",
"Enter Billing Address",
provider.onChangedBillingAddress,
TextInputType.text,
false,
null,
focusNodes[1],
focusNodes[2],
TextInputAction.next,
),
errorWidget(context, provider.billingAddressError),
textControllerWidget(
context,
provider.billingPincodeController,
"Billing Pin code",
"Enter Billing Pin code",
provider.onChangedBillingPincode,
TextInputType.number,
false,
FilteringTextInputFormatter.digitsOnly,
focusNodes[2],
null,
TextInputAction.done,
6,
),
errorWidget(context, provider.billingPincodeError),
TextWidget(context, "Dispatch State"), textControllerWidget(
DropdownButtonHideUnderline( context,
child: Row( provider.billingNameController,
children: [ "Billing Name",
Expanded( "Enter Billing Name",
child: DropdownButton2<States>( provider.onChangedBillingName,
isExpanded: true, TextInputType.text,
hint: Text( false,
"Select State", null,
style: TextStyle(fontSize: 14), focusNodes[0],
overflow: TextOverflow.ellipsis, null,
), TextInputAction.done,
items: ),
provider.dispatchStates errorWidget(context, provider.billingNameError),
.map( TextWidget(context, "Billing State"),
(e) => DropdownMenuItem<States>( //dd
value: e, DropdownButtonHideUnderline(
child: Text( child: Row(
e.name!, children: [
style: const TextStyle( Expanded(
fontSize: 14, child: DropdownButton2<States>(
isExpanded: true,
hint: Text(
"Select State",
style: TextStyle(fontSize: 14),
overflow: TextOverflow.ellipsis,
),
items:
provider.billingStates
.map(
(e) => DropdownMenuItem<States>(
value: e,
child: Text(
e.name!,
style: const TextStyle(
fontSize: 14,
),
),
), ),
)
.toList(),
value: provider.selecetdBillingStates,
onChanged: (States? value) {
if (provider.billingStates.isNotEmpty) {
provider.selecetdBillingStates = value;
provider.selectedBillingStateID =
value!.id!;
provider.selectedBillingStateName =
value!.name!;
if (provider
.billingDistricts
.isNotEmpty) {
provider.billingDistricts.clear();
// provider.selectedBillingDistricts=null;
provider.selectedBillingDistrictId =
null;
provider.selectedBillingDistrictValue =
"";
}
provider.getDistrictAPI(
context,
provider.selectedBillingStateID,
);
}
},
dropdownSearchData: DropdownSearchData(
searchInnerWidgetHeight: 50,
searchController:
provider.billingStateSearchController,
searchInnerWidget: Padding(
padding: const EdgeInsets.all(8),
child: TextFormField(
controller:
provider
.billingStateSearchController,
decoration: InputDecoration(
isDense: true,
contentPadding:
const EdgeInsets.symmetric(
horizontal: 10,
vertical: 8,
),
hintText: 'Search Sate...',
border: OutlineInputBorder(
borderRadius:
BorderRadius.circular(8),
), ),
), ),
)
.toList(),
value: provider.selecetdDispatchStates,
onChanged: (States? value) {
if (provider.dispatchStates.isNotEmpty) {
provider.selecetdDispatchStates = value;
provider.selectedDispatchStateID = value!.id!;
provider.selectedDispatchStateName =
value!.name!;
if (provider.dispatchDistricts.isNotEmpty) {
provider.dispatchDistricts.clear();
// provider.selectedDispatchDistricts = null;
provider.selectedDispatchDistrictId = null;
provider.selectedDispatchDistrictValue = "";
}
provider.getDispatchDistrictAPI(
context,
provider.selectedDispatchStateID,
);
}
},
dropdownSearchData: DropdownSearchData(
searchInnerWidgetHeight: 50,
searchController:
provider.dispatchStateSearchController,
searchInnerWidget: Padding(
padding: const EdgeInsets.all(8),
child: TextFormField(
controller:
provider.dispatchStateSearchController,
decoration: InputDecoration(
isDense: true,
contentPadding:
const EdgeInsets.symmetric(
horizontal: 10,
vertical: 8,
),
hintText: 'Search Sate...',
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(8),
), ),
), ),
searchMatchFn: (item, searchValue) {
return item.value?.name
?.toLowerCase()
.contains(
searchValue.toLowerCase(),
) ??
false;
},
), ),
onMenuStateChange: (isOpen) {
if (!isOpen) {
provider.billingStateSearchController
.clear();
}
},
buttonStyleData: ddtheme.buttonStyleData,
iconStyleData: ddtheme.iconStyleData,
menuItemStyleData:
ddtheme.menuItemStyleData,
dropdownStyleData:
ddtheme.dropdownStyleData,
), ),
searchMatchFn: (item, searchValue) {
return item.value?.name
?.toLowerCase()
.contains(
searchValue.toLowerCase(),
) ??
false;
},
), ),
onMenuStateChange: (isOpen) { ],
if (!isOpen) {
provider.dispatchStateSearchController
.clear();
}
},
buttonStyleData: ddtheme.buttonStyleData,
iconStyleData: ddtheme.iconStyleData,
menuItemStyleData: ddtheme.menuItemStyleData,
dropdownStyleData: ddtheme.dropdownStyleData,
),
), ),
], ),
), errorWidget(
), context,
errorWidget(context, provider.selectedDispatchStateError), provider.selectedBillingStateError,
//dd ),
TextWidget(context, "Dispatch District"), TextWidget(context, "Billing District"),
//dd //dd
DropdownButtonHideUnderline( DropdownButtonHideUnderline(
child: Row( child: Row(
children: [ children: [
Expanded( Expanded(
child: DropdownButton2<Districts>( child: DropdownButton2<Districts>(
isExpanded: true, isExpanded: true,
hint: Text( hint: Text(
"Select District", "Select District",
style: const TextStyle(fontSize: 14), style: const TextStyle(fontSize: 14),
), ),
items: items:
provider.dispatchDistricts provider.billingDistricts
.map( .map(
(e) => DropdownMenuItem<Districts>( (e) =>
value: e, DropdownMenuItem<Districts>(
child: Text( value: e,
e.district!, child: Text(
style: const TextStyle( e.district!,
fontSize: 14, style: const TextStyle(
), fontSize: 14,
), ),
), ),
) ),
.toList(), )
value: provider.selectedDispatchDistricts, .toList(),
onChanged: (Districts? value) { value: provider.selectedBillingDistricts,
if (provider.dispatchDistricts.isNotEmpty) { onChanged: (Districts? value) {
provider.selectedDispatchDistricts = value; if (provider
provider.selectedDispatchDistrictId = .billingDistricts
value!.id!; .isNotEmpty) {
provider.selectedDispatchDistrictValue = provider.selectedBillingDistricts =
value!.district!; value;
if (provider provider.selectedBillingDistrictId =
.dispatchSubLocations value!.id!;
.isNotEmpty) { provider.selectedBillingDistrictValue =
provider.dispatchSubLocations.clear(); value!.district!;
// provider.selectedDispatchSubLocations=null; if (provider
provider.selectedDispatchSubLocID = null; .billingSubLocations
provider.selectedDispatchSubLocValue = ""; .isNotEmpty) {
} provider.billingSubLocations.clear();
provider.getDispatchSubLocationAPI( // provider.selectedBillingSubLocations = null;
context, provider.selectedBillingSubLocID =
provider.selectedDispatchDistrictId, null;
); provider.selectedBillingSubLocValue =
} "";
}, }
dropdownSearchData: DropdownSearchData( provider.getSubLocationAPI(
searchInnerWidgetHeight: 50, context,
searchController: provider.selectedBillingDistrictId,
provider.dispatchDistrictSearchController, );
searchInnerWidget: Padding( }
padding: const EdgeInsets.all(8), },
child: TextFormField( dropdownSearchData: DropdownSearchData(
controller: searchInnerWidgetHeight: 50,
searchController:
provider provider
.dispatchDistrictSearchController, .billingDistrictSearchController,
decoration: InputDecoration( searchInnerWidget: Padding(
isDense: true, padding: const EdgeInsets.all(8),
contentPadding: child: TextFormField(
const EdgeInsets.symmetric( controller:
horizontal: 10, provider
vertical: 8, .billingDistrictSearchController,
decoration: InputDecoration(
isDense: true,
contentPadding:
const EdgeInsets.symmetric(
horizontal: 10,
vertical: 8,
),
hintText: 'Search District...',
border: OutlineInputBorder(
borderRadius:
BorderRadius.circular(8),
), ),
hintText: 'Search District...', ),
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(8),
), ),
), ),
searchMatchFn: (item, searchValue) {
return item.value?.district
?.toLowerCase()
.contains(
searchValue.toLowerCase(),
) ??
false;
},
), ),
onMenuStateChange: (isOpen) {
if (!isOpen) {
provider.billingDistrictSearchController
.clear();
}
},
buttonStyleData: ddtheme.buttonStyleData,
iconStyleData: ddtheme.iconStyleData,
menuItemStyleData:
ddtheme.menuItemStyleData,
dropdownStyleData:
ddtheme.dropdownStyleData,
), ),
searchMatchFn: (item, searchValue) {
return item.value?.district
?.toLowerCase()
.contains(
searchValue.toLowerCase(),
) ??
false;
},
), ),
onMenuStateChange: (isOpen) { ],
if (!isOpen) {
provider.dispatchDistrictSearchController
.clear();
}
},
buttonStyleData: ddtheme.buttonStyleData,
iconStyleData: ddtheme.iconStyleData,
menuItemStyleData: ddtheme.menuItemStyleData,
dropdownStyleData: ddtheme.dropdownStyleData,
),
), ),
], ),
), errorWidget(
), context,
errorWidget(context, provider.selectedDispatchDistrictError), provider.selectedBillingDistrictError,
TextWidget(context, "Dispatch Sub Location"), ),
DropdownButtonHideUnderline( TextWidget(context, "Billing Sub Location"),
child: Row( //dd
children: [ DropdownButtonHideUnderline(
Expanded( child: Row(
child: DropdownButton2<SubLocations>( children: [
hint: Text( Expanded(
"Select Sub Locality", child: DropdownButton2<SubLocations>(
style: const TextStyle(fontSize: 14), hint: Text(
), "Select Sub Locality",
items: style: const TextStyle(fontSize: 14),
provider.dispatchSubLocations ),
.map( items:
(e) => DropdownMenuItem<SubLocations>( provider.billingSubLocations
value: e, .map(
child: Text( (e) => DropdownMenuItem<
e.subLocality!, SubLocations
style: const TextStyle( >(
fontSize: 14, value: e,
child: Text(
e.subLocality!,
style: const TextStyle(
fontSize: 14,
),
),
), ),
)
.toList(),
value: provider.selectedBillingSubLocations,
onChanged: (SubLocations? value) {
if (provider
.billingSubLocations
.isNotEmpty) {
provider.selectedBillingSubLocations =
value;
provider.selectedBillingSubLocID =
value!.id!;
provider.selectedBillingSubLocValue =
value!.subLocality!;
}
},
dropdownSearchData: DropdownSearchData(
searchInnerWidgetHeight: 50,
searchController:
provider
.billingSubLocSearchController,
searchInnerWidget: Padding(
padding: const EdgeInsets.all(8),
child: TextFormField(
controller:
provider
.billingSubLocSearchController,
decoration: InputDecoration(
isDense: true,
contentPadding:
const EdgeInsets.symmetric(
horizontal: 10,
vertical: 8,
),
hintText: 'Search Sub Location...',
border: OutlineInputBorder(
borderRadius:
BorderRadius.circular(8),
), ),
), ),
)
.toList(),
value: provider.selectedDispatchSubLocations,
onChanged: (SubLocations? value) {
if (provider.dispatchSubLocations.isNotEmpty) {
provider.selectedDispatchSubLocations = value;
provider.selectedDispatchSubLocID =
value!.id!;
provider.selectedDispatchSubLocValue =
value!.subLocality!;
}
},
dropdownSearchData: DropdownSearchData(
searchInnerWidgetHeight: 50,
searchController:
provider.dispatchSubLocSearchController,
searchInnerWidget: Padding(
padding: const EdgeInsets.all(8),
child: TextFormField(
controller:
provider.dispatchSubLocSearchController,
decoration: InputDecoration(
isDense: true,
contentPadding:
const EdgeInsets.symmetric(
horizontal: 10,
vertical: 8,
),
hintText: 'Search Sub Location...',
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(8),
), ),
), ),
searchMatchFn: (item, searchValue) {
return item.value?.subLocality
?.toLowerCase()
.contains(
searchValue.toLowerCase(),
) ??
false;
},
), ),
onMenuStateChange: (isOpen) {
if (!isOpen) {
provider.billingSubLocSearchController
.clear();
}
},
buttonStyleData: ddtheme.buttonStyleData,
iconStyleData: ddtheme.iconStyleData,
menuItemStyleData:
ddtheme.menuItemStyleData,
dropdownStyleData:
ddtheme.dropdownStyleData,
), ),
searchMatchFn: (item, searchValue) {
return item.value?.subLocality
?.toLowerCase()
.contains(
searchValue.toLowerCase(),
) ??
false;
},
), ),
onMenuStateChange: (isOpen) { ],
if (!isOpen) {
provider.dispatchSubLocSearchController
.clear();
}
},
buttonStyleData: ddtheme.buttonStyleData,
iconStyleData: ddtheme.iconStyleData,
menuItemStyleData: ddtheme.menuItemStyleData,
dropdownStyleData: ddtheme.dropdownStyleData,
),
),
],
),
),
errorWidget(context, provider.selectedDispatchSubLocError),
//dd
textControllerWidget(
context,
provider.dispatchAddressController,
"Dispatch Address",
"Enter Dispatch Address",
provider.onChangedDispatchAddress,
TextInputType.text,
false,
null,
focusNodes[3],
focusNodes[4],
TextInputAction.next,
),
errorWidget(context, provider.dispatchAddressError),
textControllerWidget(
context,
provider.dispatchPincodeController,
"Dispatch Pin code",
"Enter Dispatch Pin code",
provider.onChangedDispatchPincode,
TextInputType.number,
false,
FilteringTextInputFormatter.digitsOnly,
focusNodes[4],
focusNodes[5],
TextInputAction.next,
6,
),
errorWidget(context, provider.dispatchPincodeError),
textControllerWidget(
context,
provider.gstController,
"GST Number",
"Enter GST Number",
provider.onChangedGst,
TextInputType.text,
false,
null,
focusNodes[5],
null,
TextInputAction.done,
),
errorWidget(context, provider.gstError),
InkResponse(
onTap: () {
_showAttachmentSheet(context);
},
child: Container(
margin: EdgeInsets.symmetric(vertical: 10),
height: 45,
width: MediaQuery.of(context).size.width,
decoration: BoxDecoration(
color: Color(0xFFE6F6FF),
borderRadius: BorderRadius.circular(12),
border: Border.all(
color: AppColors.app_blue,
width: 0.5,
), ),
), ),
child: Center( errorWidget(
child: Text( context,
"Upload Purchase Order", provider.selectedBillingSubLocError,
style: TextStyle(
fontFamily: "JakartaMedium",
color: AppColors.app_blue,
),
),
), ),
), textControllerWidget(
), context,
if (provider.imagePicked == 1 && provider.billingAddressController,
provider.imagePath != null) ...[ "Billing Address",
Padding( "Enter Billing Address",
padding: const EdgeInsets.symmetric(vertical: 4.0), provider.onChangedBillingAddress,
child: Row( TextInputType.text,
mainAxisAlignment: MainAxisAlignment.spaceBetween, false,
children: [ null,
Text( focusNodes[1],
"${provider.imagePath}", focusNodes[2],
style: TextStyle( TextInputAction.next,
color: AppColors.semi_black,
fontSize: 11,
fontWeight: FontWeight.w600,
),
),
InkResponse(
onTap: () {
provider.imagePicked = 0;
provider.imagePath = null;
provider.imageFilePath = null;
},
child: SvgPicture.asset(
"assets/svg/ic_close.svg",
width: 15,
height: 15,
),
),
],
), ),
), errorWidget(context, provider.billingAddressError),
],
TextWidget(context, "Unloading Scope"), textControllerWidget(
//dd context,
DropdownButtonHideUnderline( provider.billingPincodeController,
child: Row( "Billing Pin code",
children: [ "Enter Billing Pin code",
Expanded( provider.onChangedBillingPincode,
child: DropdownButton2<String>( TextInputType.number,
hint: Text( false,
"Select Unloading Scope", FilteringTextInputFormatter.digitsOnly,
style: const TextStyle(fontSize: 14), focusNodes[2],
), null,
items: TextInputAction.done,
provider.unloadingScope 6,
.map( ),
(e) => DropdownMenuItem<String>( errorWidget(context, provider.billingPincodeError),
value: e!,
child: Text( TextWidget(context, "Dispatch State"),
e, DropdownButtonHideUnderline(
style: const TextStyle( child: Row(
fontSize: 14, children: [
Expanded(
child: DropdownButton2<States>(
isExpanded: true,
hint: Text(
"Select State",
style: TextStyle(fontSize: 14),
overflow: TextOverflow.ellipsis,
),
items:
provider.dispatchStates
.map(
(e) => DropdownMenuItem<States>(
value: e,
child: Text(
e.name!,
style: const TextStyle(
fontSize: 14,
),
),
), ),
)
.toList(),
value: provider.selecetdDispatchStates,
onChanged: (States? value) {
if (provider.dispatchStates.isNotEmpty) {
provider.selecetdDispatchStates = value;
provider.selectedDispatchStateID =
value!.id!;
provider.selectedDispatchStateName =
value!.name!;
if (provider
.dispatchDistricts
.isNotEmpty) {
provider.dispatchDistricts.clear();
// provider.selectedDispatchDistricts = null;
provider.selectedDispatchDistrictId =
null;
provider.selectedDispatchDistrictValue =
"";
}
provider.getDispatchDistrictAPI(
context,
provider.selectedDispatchStateID,
);
}
},
dropdownSearchData: DropdownSearchData(
searchInnerWidgetHeight: 50,
searchController:
provider
.dispatchStateSearchController,
searchInnerWidget: Padding(
padding: const EdgeInsets.all(8),
child: TextFormField(
controller:
provider
.dispatchStateSearchController,
decoration: InputDecoration(
isDense: true,
contentPadding:
const EdgeInsets.symmetric(
horizontal: 10,
vertical: 8,
),
hintText: 'Search Sate...',
border: OutlineInputBorder(
borderRadius:
BorderRadius.circular(8),
), ),
), ),
) ),
.toList(), ),
value: provider.selectedUnloadingScope, searchMatchFn: (item, searchValue) {
onChanged: (String? value) { return item.value?.name
if (provider.unloadingScope.isNotEmpty) { ?.toLowerCase()
provider.selectedUnloadingScope = value; .contains(
} searchValue.toLowerCase(),
}, ) ??
buttonStyleData: ddtheme.buttonStyleData, false;
iconStyleData: ddtheme.iconStyleData, },
menuItemStyleData: ddtheme.menuItemStyleData, ),
dropdownStyleData: ddtheme.dropdownStyleData, onMenuStateChange: (isOpen) {
), if (!isOpen) {
provider.dispatchStateSearchController
.clear();
}
},
buttonStyleData: ddtheme.buttonStyleData,
iconStyleData: ddtheme.iconStyleData,
menuItemStyleData:
ddtheme.menuItemStyleData,
dropdownStyleData:
ddtheme.dropdownStyleData,
),
),
],
), ),
], ),
), errorWidget(
), context,
TextWidget(context, "Freight Scope"), provider.selectedDispatchStateError,
//dd ),
DropdownButtonHideUnderline( //dd
child: Row( TextWidget(context, "Dispatch District"),
children: [ //dd
Expanded( DropdownButtonHideUnderline(
child: DropdownButton2<String>( child: Row(
hint: Text( children: [
"Select Freight Scope", Expanded(
style: const TextStyle(fontSize: 14), child: DropdownButton2<Districts>(
isExpanded: true,
hint: Text(
"Select District",
style: const TextStyle(fontSize: 14),
),
items:
provider.dispatchDistricts
.map(
(e) =>
DropdownMenuItem<Districts>(
value: e,
child: Text(
e.district!,
style: const TextStyle(
fontSize: 14,
),
),
),
)
.toList(),
value: provider.selectedDispatchDistricts,
onChanged: (Districts? value) {
if (provider
.dispatchDistricts
.isNotEmpty) {
provider.selectedDispatchDistricts =
value;
provider.selectedDispatchDistrictId =
value!.id!;
provider.selectedDispatchDistrictValue =
value!.district!;
if (provider
.dispatchSubLocations
.isNotEmpty) {
provider.dispatchSubLocations.clear();
// provider.selectedDispatchSubLocations=null;
provider.selectedDispatchSubLocID =
null;
provider.selectedDispatchSubLocValue =
"";
}
provider.getDispatchSubLocationAPI(
context,
provider.selectedDispatchDistrictId,
);
}
},
dropdownSearchData: DropdownSearchData(
searchInnerWidgetHeight: 50,
searchController:
provider
.dispatchDistrictSearchController,
searchInnerWidget: Padding(
padding: const EdgeInsets.all(8),
child: TextFormField(
controller:
provider
.dispatchDistrictSearchController,
decoration: InputDecoration(
isDense: true,
contentPadding:
const EdgeInsets.symmetric(
horizontal: 10,
vertical: 8,
),
hintText: 'Search District...',
border: OutlineInputBorder(
borderRadius:
BorderRadius.circular(8),
),
),
),
),
searchMatchFn: (item, searchValue) {
return item.value?.district
?.toLowerCase()
.contains(
searchValue.toLowerCase(),
) ??
false;
},
),
onMenuStateChange: (isOpen) {
if (!isOpen) {
provider
.dispatchDistrictSearchController
.clear();
}
},
buttonStyleData: ddtheme.buttonStyleData,
iconStyleData: ddtheme.iconStyleData,
menuItemStyleData:
ddtheme.menuItemStyleData,
dropdownStyleData:
ddtheme.dropdownStyleData,
),
), ),
items: ],
provider.freightScope ),
.map( ),
(e) => DropdownMenuItem<String>( errorWidget(
value: e!, context,
child: Text( provider.selectedDispatchDistrictError,
e, ),
style: const TextStyle( TextWidget(context, "Dispatch Sub Location"),
fontSize: 14, DropdownButtonHideUnderline(
child: Row(
children: [
Expanded(
child: DropdownButton2<SubLocations>(
hint: Text(
"Select Sub Locality",
style: const TextStyle(fontSize: 14),
),
items:
provider.dispatchSubLocations
.map(
(e) => DropdownMenuItem<
SubLocations
>(
value: e,
child: Text(
e.subLocality!,
style: const TextStyle(
fontSize: 14,
),
),
), ),
)
.toList(),
value:
provider.selectedDispatchSubLocations,
onChanged: (SubLocations? value) {
if (provider
.dispatchSubLocations
.isNotEmpty) {
provider.selectedDispatchSubLocations =
value;
provider.selectedDispatchSubLocID =
value!.id!;
provider.selectedDispatchSubLocValue =
value!.subLocality!;
}
},
dropdownSearchData: DropdownSearchData(
searchInnerWidgetHeight: 50,
searchController:
provider
.dispatchSubLocSearchController,
searchInnerWidget: Padding(
padding: const EdgeInsets.all(8),
child: TextFormField(
controller:
provider
.dispatchSubLocSearchController,
decoration: InputDecoration(
isDense: true,
contentPadding:
const EdgeInsets.symmetric(
horizontal: 10,
vertical: 8,
),
hintText: 'Search Sub Location...',
border: OutlineInputBorder(
borderRadius:
BorderRadius.circular(8),
), ),
), ),
) ),
.toList(), ),
value: provider.selectedFreightScope, searchMatchFn: (item, searchValue) {
onChanged: (String? value) { return item.value?.subLocality
if (provider.freightScope.isNotEmpty) { ?.toLowerCase()
provider.selectedFreightScope = value; .contains(
} searchValue.toLowerCase(),
}, ) ??
buttonStyleData: ButtonStyleData( false;
height: 50, },
width: 160, ),
padding: const EdgeInsets.only( onMenuStateChange: (isOpen) {
left: 14, if (!isOpen) {
right: 14, provider.dispatchSubLocSearchController
), .clear();
decoration: BoxDecoration( }
borderRadius: BorderRadius.circular(14), },
color: AppColors.text_field_color, buttonStyleData: ddtheme.buttonStyleData,
iconStyleData: ddtheme.iconStyleData,
menuItemStyleData:
ddtheme.menuItemStyleData,
dropdownStyleData:
ddtheme.dropdownStyleData,
), ),
), ),
iconStyleData: IconStyleData( ],
icon: SvgPicture.asset( ),
"assets/svg/arrow_dropdown.svg", ),
height: 25, errorWidget(
width: 20, context,
provider.selectedDispatchSubLocError,
),
//dd
textControllerWidget(
context,
provider.dispatchAddressController,
"Dispatch Address",
"Enter Dispatch Address",
provider.onChangedDispatchAddress,
TextInputType.text,
false,
null,
focusNodes[3],
focusNodes[4],
TextInputAction.next,
),
errorWidget(context, provider.dispatchAddressError),
textControllerWidget(
context,
provider.dispatchPincodeController,
"Dispatch Pin code",
"Enter Dispatch Pin code",
provider.onChangedDispatchPincode,
TextInputType.number,
false,
FilteringTextInputFormatter.digitsOnly,
focusNodes[4],
focusNodes[5],
TextInputAction.next,
6,
),
errorWidget(context, provider.dispatchPincodeError),
textControllerWidget(
context,
provider.gstController,
"GST Number",
"Enter GST Number",
provider.onChangedGst,
TextInputType.text,
false,
null,
focusNodes[5],
null,
TextInputAction.done,
),
errorWidget(context, provider.gstError),
InkResponse(
onTap: () {
_showAttachmentSheet(context);
},
child: Container(
margin: EdgeInsets.symmetric(vertical: 10),
height: 45,
width: MediaQuery.of(context).size.width,
decoration: BoxDecoration(
color: Color(0xFFE6F6FF),
borderRadius: BorderRadius.circular(12),
border: Border.all(
color: AppColors.app_blue,
width: 0.5,
),
),
child: Center(
child: Text(
"Upload Purchase Order",
style: TextStyle(
fontFamily: "JakartaMedium",
color: AppColors.app_blue,
), ),
iconSize: 12,
iconEnabledColor: Color(0xFF2D2D2D),
iconDisabledColor: Colors.grey,
), ),
dropdownStyleData: DropdownStyleData( ),
maxHeight: 200, ),
decoration: BoxDecoration( ),
borderRadius: BorderRadius.circular(14), if (provider.imagePicked == 1 &&
color: AppColors.text_field_color, provider.imagePath != null) ...[
Padding(
padding: const EdgeInsets.symmetric(
vertical: 4.0,
),
child: Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: [
Text(
"${provider.imagePath}",
style: TextStyle(
color: AppColors.semi_black,
fontSize: 11,
fontWeight: FontWeight.w600,
),
), ),
scrollbarTheme: ScrollbarThemeData( InkResponse(
radius: const Radius.circular(15), onTap: () {
thickness: MaterialStateProperty.all<double>( provider.imagePicked = 0;
6, provider.imagePath = null;
provider.imageFilePath = null;
},
child: SvgPicture.asset(
"assets/svg/ic_close.svg",
width: 15,
height: 15,
), ),
thumbVisibility:
MaterialStateProperty.all<bool>(true),
), ),
), ],
menuItemStyleData: const MenuItemStyleData(
height: 40,
padding: EdgeInsets.only(left: 14, right: 14),
),
), ),
), ),
], ],
),
), TextWidget(context, "Unloading Scope"),
TextWidget(context, "Erection Scope"), //dd
//dd DropdownButtonHideUnderline(
DropdownButtonHideUnderline( child: Row(
child: Row( children: [
children: [ Expanded(
Expanded( child: DropdownButton2<String>(
child: DropdownButton2<String>( hint: Text(
hint: Text( "Select Unloading Scope",
"Select Erection Scope", style: const TextStyle(fontSize: 14),
style: const TextStyle(fontSize: 14), ),
items:
provider.unloadingScope
.map(
(e) => DropdownMenuItem<String>(
value: e!,
child: Text(
e,
style: const TextStyle(
fontSize: 14,
),
),
),
)
.toList(),
value: provider.selectedUnloadingScope,
onChanged: (String? value) {
if (provider.unloadingScope.isNotEmpty) {
provider.selectedUnloadingScope = value;
}
},
buttonStyleData: ddtheme.buttonStyleData,
iconStyleData: ddtheme.iconStyleData,
menuItemStyleData:
ddtheme.menuItemStyleData,
dropdownStyleData:
ddtheme.dropdownStyleData,
),
), ),
items: ],
provider.erectionScope ),
.map( ),
(e) => DropdownMenuItem<String>( TextWidget(context, "Freight Scope"),
value: e!, //dd
child: Text( DropdownButtonHideUnderline(
e, child: Row(
style: const TextStyle( children: [
fontSize: 14, Expanded(
child: DropdownButton2<String>(
hint: Text(
"Select Freight Scope",
style: const TextStyle(fontSize: 14),
),
items:
provider.freightScope
.map(
(e) => DropdownMenuItem<String>(
value: e!,
child: Text(
e,
style: const TextStyle(
fontSize: 14,
),
),
), ),
)
.toList(),
value: provider.selectedFreightScope,
onChanged: (String? value) {
if (provider.freightScope.isNotEmpty) {
provider.selectedFreightScope = value;
}
},
buttonStyleData: ButtonStyleData(
height: 50,
width: 160,
padding: const EdgeInsets.only(
left: 14,
right: 14,
),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(14),
color: AppColors.text_field_color,
),
),
iconStyleData: IconStyleData(
icon: SvgPicture.asset(
"assets/svg/arrow_dropdown.svg",
height: 25,
width: 20,
),
iconSize: 12,
iconEnabledColor: Color(0xFF2D2D2D),
iconDisabledColor: Colors.grey,
),
dropdownStyleData: DropdownStyleData(
maxHeight: 200,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(14),
color: AppColors.text_field_color,
),
scrollbarTheme: ScrollbarThemeData(
radius: const Radius.circular(15),
thickness:
MaterialStateProperty.all<double>(
6,
), ),
), thumbVisibility:
) MaterialStateProperty.all<bool>(
.toList(), true,
value: provider.selectedErectionScope, ),
onChanged: (String? value) { ),
if (provider.erectionScope.isNotEmpty) { ),
provider.selectedErectionScope = value; menuItemStyleData: const MenuItemStyleData(
} height: 40,
}, padding: EdgeInsets.only(
buttonStyleData: ddtheme.buttonStyleData, left: 14,
iconStyleData: ddtheme.iconStyleData, right: 14,
menuItemStyleData: ddtheme.menuItemStyleData, ),
dropdownStyleData: ddtheme.dropdownStyleData, ),
), ),
),
],
), ),
], ),
), TextWidget(context, "Erection Scope"),
), //dd
TextWidget(context, "TPC Applicable"), DropdownButtonHideUnderline(
//dd child: Row(
DropdownButtonHideUnderline( children: [
child: Row( Expanded(
children: [ child: DropdownButton2<String>(
Expanded( hint: Text(
child: DropdownButton2<String>( "Select Erection Scope",
hint: Text( style: const TextStyle(fontSize: 14),
"TPC Applicable", ),
style: const TextStyle(fontSize: 14), items:
provider.erectionScope
.map(
(e) => DropdownMenuItem<String>(
value: e!,
child: Text(
e,
style: const TextStyle(
fontSize: 14,
),
),
),
)
.toList(),
value: provider.selectedErectionScope,
onChanged: (String? value) {
if (provider.erectionScope.isNotEmpty) {
provider.selectedErectionScope = value;
}
},
buttonStyleData: ddtheme.buttonStyleData,
iconStyleData: ddtheme.iconStyleData,
menuItemStyleData:
ddtheme.menuItemStyleData,
dropdownStyleData:
ddtheme.dropdownStyleData,
),
), ),
items: ],
provider.tpcApplicable ),
.map( ),
(e) => DropdownMenuItem<String>( TextWidget(context, "TPC Applicable"),
value: e!, //dd
child: Text( DropdownButtonHideUnderline(
e, child: Row(
style: const TextStyle( children: [
fontSize: 14, Expanded(
child: DropdownButton2<String>(
hint: Text(
"TPC Applicable",
style: const TextStyle(fontSize: 14),
),
items:
provider.tpcApplicable
.map(
(e) => DropdownMenuItem<String>(
value: e!,
child: Text(
e,
style: const TextStyle(
fontSize: 14,
),
),
), ),
), )
), .toList(),
) value: provider.selectedTpcStatus,
.toList(), onChanged: (String? value) {
value: provider.selectedTpcStatus, if (provider.tpcApplicable.isNotEmpty) {
onChanged: (String? value) { provider.selectedTpcStatus = value;
if (provider.tpcApplicable.isNotEmpty) { }
provider.selectedTpcStatus = value; },
} buttonStyleData: ddtheme.buttonStyleData,
}, iconStyleData: ddtheme.iconStyleData,
buttonStyleData: ddtheme.buttonStyleData, menuItemStyleData:
iconStyleData: ddtheme.iconStyleData, ddtheme.menuItemStyleData,
menuItemStyleData: ddtheme.menuItemStyleData, dropdownStyleData:
dropdownStyleData: ddtheme.dropdownStyleData, ddtheme.dropdownStyleData,
), ),
),
],
), ),
], ),
),
),
if (provider.selectedTpcStatus == "Yes") ...[ if (provider.selectedTpcStatus == "Yes") ...[
TextWidget(context, "TPC Agent"), TextWidget(context, "TPC Agent"),
//dd //dd
Container( Container(
alignment: Alignment.center, alignment: Alignment.center,
decoration: BoxDecoration( decoration: BoxDecoration(
color: AppColors.text_field_color, color: AppColors.text_field_color,
borderRadius: BorderRadius.circular(14), borderRadius: BorderRadius.circular(14),
), ),
child: ListTile( child: ListTile(
title: TextFormField( title: TextFormField(
focusNode: focusNodetpc, focusNode: focusNodetpc,
onTapUpOutside: (event) { onTapUpOutside: (event) {
focusNodetpc.unfocus(); focusNodetpc.unfocus();
}, },
controller: provider.dropDownTpcSearchController, controller:
onChanged: (value) async { provider.dropDownTpcSearchController,
Future.delayed( onChanged: (value) async {
Duration(milliseconds: 100), Future.delayed(
() async { Duration(milliseconds: 100),
await provider.ordersAddOrderTPCAgentFunction( () async {
context, await provider
widget.mode, .ordersAddOrderTPCAgentFunction(
value, context,
widget.mode,
value,
);
},
); );
}, },
); decoration: InputDecoration(
}, enabledBorder: InputBorder.none,
decoration: InputDecoration( focusedBorder: InputBorder.none,
enabledBorder: InputBorder.none, isDense: true,
focusedBorder: InputBorder.none, contentPadding: const EdgeInsets.symmetric(
isDense: true, horizontal: 0,
contentPadding: const EdgeInsets.symmetric( vertical: 8,
horizontal: 0, ),
vertical: 8, hintText: 'Select TPC Agent',
), hintStyle: const TextStyle(fontSize: 14),
hintText: 'Select TPC Agent', border: OutlineInputBorder(
hintStyle: const TextStyle(fontSize: 14), borderRadius: BorderRadius.circular(8),
border: OutlineInputBorder( ),
borderRadius: BorderRadius.circular(8), ),
), ),
),
),
trailing: InkResponse( trailing: InkResponse(
onTap: () { onTap: () {
if (focusNodetpc.hasFocus) { if (focusNodetpc.hasFocus) {
focusNodetpc.unfocus(); focusNodetpc.unfocus();
} else { } else {
FocusScope.of( FocusScope.of(
context, context,
).requestFocus(focusNodetpc); ).requestFocus(focusNodetpc);
} }
}, },
child: SvgPicture.asset( child: SvgPicture.asset(
"assets/svg/arrow_dropdown.svg", "assets/svg/arrow_dropdown.svg",
height: 25, height: 25,
width: 20, width: 20,
),
),
), ),
), ),
), if (provider.tpcAgent.isNotEmpty &&
), focusNodetpc.hasFocus) ...[
if (provider.tpcAgent.isNotEmpty && Card(
focusNodetpc.hasFocus) ...[ margin: EdgeInsets.symmetric(horizontal: 0),
Card( child: Container(
margin: EdgeInsets.symmetric(horizontal: 0), padding: EdgeInsets.symmetric(horizontal: 10),
child: Container( height: 150,
padding: EdgeInsets.symmetric(horizontal: 10), decoration: BoxDecoration(
height: 150, borderRadius: BorderRadius.circular(16),
decoration: BoxDecoration( ),
borderRadius: BorderRadius.circular(16), child: Scrollbar(
), thickness: 2.5,
child: Scrollbar( radius: Radius.circular(6),
thickness: 2.5, thumbVisibility: true,
radius: Radius.circular(6), child: ListView.builder(
thumbVisibility: true, itemCount: provider.tpcAgent.length,
child: ListView.builder( shrinkWrap: true,
itemCount: provider.tpcAgent.length, physics: AlwaysScrollableScrollPhysics(),
shrinkWrap: true, itemBuilder: (context, index) {
physics: AlwaysScrollableScrollPhysics(), return InkResponse(
itemBuilder: (context, index) { onTap: () async {
return InkResponse( if (provider.tpcAgent.isNotEmpty) {
onTap: () async { provider.selectedTpcAgent =
if (provider.tpcAgent.isNotEmpty) { provider.tpcAgent[index];
provider.selectedTpcAgent =
provider.tpcAgent[index];
print( print(
"Selected Complaint Type: ${provider.tpcAgent[index].text}, ID: ${provider.tpcAgent[index].id}", "Selected Complaint Type: ${provider.tpcAgent[index].text}, ID: ${provider.tpcAgent[index].id}",
); );
provider.selectedTpcAgentID = provider.selectedTpcAgentID =
provider.tpcAgent[index].id!; provider.tpcAgent[index].id!;
provider.selectedTpcAgentValue = provider.selectedTpcAgentValue =
provider.tpcAgent[index].text!; provider
print( .tpcAgent[index]
"hfjkshfg" + .text!;
provider.selectedTpcAgentID print(
.toString(), "hfjkshfg" +
); provider.selectedTpcAgentID
provider.dropDownTpcSearchController.text = .toString(),
provider.tpcAgent[index].text!; );
} provider
// provider.ordersAddPaymentSelectOrderAPIFunction(context, provider.selectedAccountID); .dropDownTpcSearchController
// provider.tpcAgent = []; .text = provider
}, .tpcAgent[index]
child: SizedBox( .text!;
height: 45, }
child: Align( // provider.ordersAddPaymentSelectOrderAPIFunction(context, provider.selectedAccountID);
alignment: Alignment.centerLeft, // provider.tpcAgent = [];
child: Text( },
provider.tpcAgent[index].text!, child: SizedBox(
height: 45,
child: Align(
alignment: Alignment.centerLeft,
child: Text(
provider.tpcAgent[index].text!,
),
),
), ),
), );
), },
); ),
}, ),
), ),
), ),
), ],
),
],
textControllerWidget( textControllerWidget(
context, context,
provider.tpcAmountController, provider.tpcAmountController,
"TPC Amount", "TPC Amount",
"Enter TPC Amount", "Enter TPC Amount",
provider.onChangeTpcAmount, provider.onChangeTpcAmount,
TextInputType.number, TextInputType.number,
false, false,
FilteringTextInputFormatter.digitsOnly, FilteringTextInputFormatter.digitsOnly,
focusNodes[6], focusNodes[6],
focusNodes[7], focusNodes[7],
TextInputAction.next, TextInputAction.next,
), ),
errorWidget(context, provider.tpcAmountError), errorWidget(context, provider.tpcAmountError),
], ],
///Addorderbutton ///Addorderbutton
OrderForm(), OrderForm(),
//dd //dd
], ],
),
),
), ),
), floatingActionButtonLocation:
), FloatingActionButtonLocation.centerFloat,
floatingActionButtonLocation: bottomNavigationBar: InkResponse(
FloatingActionButtonLocation.centerFloat, onTap:
bottomNavigationBar: InkResponse( provider.submitClicked
onTap: ? null
provider.submitClicked : () {
? null provider.submitClicked = true;
: () { var order_prod_data = provider.getFormData();
provider.submitClicked = true; print(order_prod_data);
var order_prod_data = provider.getFormData(); print(order_prod_data['orders']);
print(order_prod_data);
print(order_prod_data['orders']);
///[{"product_id":"1","qty":"1","price":"500","cgst_p":"9","sgst_p":"9","igst_p":"0","total_price":"500"}, ///[{"product_id":"1","qty":"1","price":"500","cgst_p":"9","sgst_p":"9","igst_p":"0","total_price":"500"},
///{"product_id":"2","qty":"1","price":"1000","cgst_p":"9","sgst_p":"9","igst_p":"0","total_price":"1000"}] ///{"product_id":"2","qty":"1","price":"1000","cgst_p":"9","sgst_p":"9","igst_p":"0","total_price":"1000"}]
provider.getCurrentLocation(); provider.getCurrentLocation();
provider.ordersAddOrderAPISubmitFunction( provider.ordersAddOrderAPISubmitFunction(
context, context,
widget.mode, widget.mode,
provider.selectedEmployeeID, provider.selectedEmployeeID,
provider.selectedAccountID, provider.selectedAccountID,
provider.selectedDispatchDistrictId, provider.selectedDispatchDistrictId,
provider.selectedDispatchSubLocID, provider.selectedDispatchSubLocID,
provider.selectedUnloadingScope, provider.selectedUnloadingScope,
provider.selectedFreightScope, provider.selectedFreightScope,
provider.selectedErectionScope, provider.selectedErectionScope,
provider.selectedTpcStatus, provider.selectedTpcStatus,
provider.selectedTpcStatus, provider.selectedTpcStatus,
provider.selectedBillingStateID, provider.selectedBillingStateID,
provider.selectedBillingDistrictId, provider.selectedBillingDistrictId,
provider.selectedBillingSubLocID, provider.selectedBillingSubLocID,
provider.selectedTpcAgentID, provider.selectedTpcAgentID,
order_prod_data['orders'], order_prod_data['orders'],
); );
}, },
child: Container( child: Container(
height: 45, height: 45,
alignment: Alignment.center, alignment: Alignment.center,
margin: EdgeInsets.symmetric(horizontal: 10, vertical: 15), margin: EdgeInsets.symmetric(
padding: EdgeInsets.symmetric(horizontal: 10, vertical: 5), horizontal: 10,
decoration: BoxDecoration( vertical: 15,
color: AppColors.app_blue, ),
borderRadius: BorderRadius.circular(15), padding: EdgeInsets.symmetric(
horizontal: 10,
vertical: 5,
),
decoration: BoxDecoration(
color: AppColors.app_blue,
borderRadius: BorderRadius.circular(15),
),
child:
provider.submitClicked
? CircularProgressIndicator.adaptive(
valueColor: AlwaysStoppedAnimation<Color>(
AppColors.white,
),
)
: Text(
"Submit",
style: TextStyle(
fontSize: 15,
fontFamily: "JakartaMedium",
color: Colors.white,
),
),
),
), ),
child:
provider.submitClicked
? CircularProgressIndicator.adaptive(
valueColor: AlwaysStoppedAnimation<Color>(
AppColors.white,
),
)
: Text(
"Submit",
style: TextStyle(
fontSize: 15,
fontFamily: "JakartaMedium",
color: Colors.white,
),
),
), ),
), ),
), onWillPop: () async {
), provider.resetForm();
onWillPop: () async { return _onBackPressed(context);
provider.resetForm(); },
return _onBackPressed(context); );
}, },
); )
}, : NoNetwork(context);
);
} }
Future<void> _showAttachmentSheet(BuildContext context) { Future<void> _showAttachmentSheet(BuildContext context) {
...@@ -1626,7 +1775,9 @@ class OrderForm extends StatelessWidget { ...@@ -1626,7 +1775,9 @@ class OrderForm extends StatelessWidget {
), ),
) )
.toList(), .toList(),
value:provider.selectedSaleProductID[index]!=null value:
provider.selectedSaleProductID[index] !=
null
? provider.saleProducts.firstWhere( ? provider.saleProducts.firstWhere(
(product) => (product) =>
product.id == product.id ==
......
...@@ -14,7 +14,8 @@ import '../../Models/ordersModels/AddOrderPaymentSelectOrderResponse.dart'; ...@@ -14,7 +14,8 @@ import '../../Models/ordersModels/AddOrderPaymentSelectOrderResponse.dart';
import '../../Utils/app_colors.dart'; import '../../Utils/app_colors.dart';
import '../../Utils/commonWidgets.dart'; import '../../Utils/commonWidgets.dart';
import '../../Utils/dropdownTheme.dart'; import '../../Utils/dropdownTheme.dart';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:generp/Utils/commonServices.dart';
class AddpaymentScreen extends StatefulWidget { class AddpaymentScreen extends StatefulWidget {
final pageTitleName; final pageTitleName;
final mode; final mode;
...@@ -33,11 +34,17 @@ class _AddpaymentScreenState extends State<AddpaymentScreen> { ...@@ -33,11 +34,17 @@ class _AddpaymentScreenState extends State<AddpaymentScreen> {
String? selectedValue; String? selectedValue;
final TextEditingController textEditingController = TextEditingController(); final TextEditingController textEditingController = TextEditingController();
Map _source = {ConnectivityResult.mobile: true};
final MyConnectivity _connectivity = MyConnectivity.instance;
@override @override
void initState() { void initState() {
// TODO: implement initState // TODO: implement initState
super.initState(); super.initState();
_connectivity.initialise();
_connectivity.myStream.listen((source) {
setState(() => _source = source);
});
WidgetsBinding.instance.addPostFrameCallback((timeStamp) { WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
var provider = Provider.of<Addpaymentprovider>(context, listen: false); var provider = Provider.of<Addpaymentprovider>(context, listen: false);
if (provider.dateNow == null) { if (provider.dateNow == null) {
...@@ -56,6 +63,7 @@ class _AddpaymentScreenState extends State<AddpaymentScreen> { ...@@ -56,6 +63,7 @@ class _AddpaymentScreenState extends State<AddpaymentScreen> {
@override @override
void dispose() { void dispose() {
focusNodes.map((e)=>e.dispose()); focusNodes.map((e)=>e.dispose());
_connectivity.disposeStream();
super.dispose(); super.dispose();
} }
...@@ -66,7 +74,18 @@ class _AddpaymentScreenState extends State<AddpaymentScreen> { ...@@ -66,7 +74,18 @@ class _AddpaymentScreenState extends State<AddpaymentScreen> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Consumer<Addpaymentprovider>( switch (_source.keys.toList()[0]) {
case ConnectivityResult.mobile:
connection = 'Online';
break;
case ConnectivityResult.wifi:
connection = 'Online';
break;
case ConnectivityResult.none:
default:
connection = 'Offline';
}
return connection=="Online"? Consumer<Addpaymentprovider>(
builder: (context, provider, child) { builder: (context, provider, child) {
return WillPopScope( return WillPopScope(
child: SafeArea( child: SafeArea(
...@@ -722,7 +741,7 @@ class _AddpaymentScreenState extends State<AddpaymentScreen> { ...@@ -722,7 +741,7 @@ class _AddpaymentScreenState extends State<AddpaymentScreen> {
}, },
); );
}, },
); ):NoNetwork(context);
} }
Future<void> _showAttachmentSheet(BuildContext context) { Future<void> _showAttachmentSheet(BuildContext context) {
......
...@@ -10,6 +10,9 @@ import '../../Utils/app_colors.dart'; ...@@ -10,6 +10,9 @@ import '../../Utils/app_colors.dart';
import '../../Utils/commonWidgets.dart'; import '../../Utils/commonWidgets.dart';
import '../../Utils/dropdownTheme.dart'; import '../../Utils/dropdownTheme.dart';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:generp/Utils/commonServices.dart';
class AddtpcagentScreen extends StatefulWidget { class AddtpcagentScreen extends StatefulWidget {
const AddtpcagentScreen({super.key}); const AddtpcagentScreen({super.key});
...@@ -20,19 +23,43 @@ class AddtpcagentScreen extends StatefulWidget { ...@@ -20,19 +23,43 @@ class AddtpcagentScreen extends StatefulWidget {
class _AddtpcagentScreenState extends State<AddtpcagentScreen> { class _AddtpcagentScreenState extends State<AddtpcagentScreen> {
Dropdowntheme ddtheme = Dropdowntheme(); Dropdowntheme ddtheme = Dropdowntheme();
List<FocusNode> focusNodes = List.generate(10, (index) => FocusNode()); List<FocusNode> focusNodes = List.generate(10, (index) => FocusNode());
Map _source = {ConnectivityResult.mobile: true};
final MyConnectivity _connectivity = MyConnectivity.instance;
@override @override
void initState() { void initState() {
// TODO: implement initState // TODO: implement initState
super.initState(); super.initState();
_connectivity.initialise();
_connectivity.myStream.listen((source) {
setState(() => _source = source);
});
WidgetsBinding.instance.addPostFrameCallback((timeStamp) { WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
var provider = Provider.of<Tpcagentsprovider>(context, listen: false); var provider = Provider.of<Tpcagentsprovider>(context, listen: false);
}); });
} }
@override
void dispose() {
// TODO: implement dispose
super.dispose();
_connectivity.disposeStream();
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Consumer<Tpcagentsprovider>( switch (_source.keys.toList()[0]) {
case ConnectivityResult.mobile:
connection = 'Online';
break;
case ConnectivityResult.wifi:
connection = 'Online';
break;
case ConnectivityResult.none:
default:
connection = 'Offline';
}
return connection=="Online"? Consumer<Tpcagentsprovider>(
builder: (context, provider, child) { builder: (context, provider, child) {
return WillPopScope( return WillPopScope(
child: SafeArea( child: SafeArea(
...@@ -290,7 +317,7 @@ class _AddtpcagentScreenState extends State<AddtpcagentScreen> { ...@@ -290,7 +317,7 @@ class _AddtpcagentScreenState extends State<AddtpcagentScreen> {
}, },
); );
}, },
); ):NoNetwork(context);
} }
Future<void> _showAttachmentSheet(BuildContext context) { Future<void> _showAttachmentSheet(BuildContext context) {
......
import 'dart:io'; import 'dart:io';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart'; import 'package:flutter_svg/svg.dart';
...@@ -7,6 +8,7 @@ import 'package:generp/screens/screensExports.dart'; ...@@ -7,6 +8,7 @@ import 'package:generp/screens/screensExports.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import '../../Notifiers/ordersProvider/pagesDashboardProvider.dart'; import '../../Notifiers/ordersProvider/pagesDashboardProvider.dart';
import '../../Utils/app_colors.dart'; import '../../Utils/app_colors.dart';
import '../../Utils/commonServices.dart';
import '../../Utils/commonWidgets.dart'; import '../../Utils/commonWidgets.dart';
import 'addTpcAgent.dart'; import 'addTpcAgent.dart';
...@@ -18,10 +20,20 @@ class Ordermoduledashboard extends StatefulWidget { ...@@ -18,10 +20,20 @@ class Ordermoduledashboard extends StatefulWidget {
} }
class _OrdermoduledashboardState extends State<Ordermoduledashboard> { class _OrdermoduledashboardState extends State<Ordermoduledashboard> {
Map _source = {ConnectivityResult.mobile: true};
final MyConnectivity _connectivity = MyConnectivity.instance;
@override @override
void initState() { void initState() {
// TODO: implement initState // TODO: implement initState
super.initState(); super.initState();
_connectivity.initialise();
_connectivity.myStream.listen((source) {
setState(() => _source = source);
});
WidgetsBinding.instance.addPostFrameCallback((timeStamp) { WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
var provider = Provider.of<Pagesdashboardprovider>( var provider = Provider.of<Pagesdashboardprovider>(
context, context,
...@@ -31,15 +43,31 @@ class _OrdermoduledashboardState extends State<Ordermoduledashboard> { ...@@ -31,15 +43,31 @@ class _OrdermoduledashboardState extends State<Ordermoduledashboard> {
provider.ordersAccessiblePagesAPIFunction(context); provider.ordersAccessiblePagesAPIFunction(context);
}); });
} }
@override
void dispose() {
// TODO: implement dispose
super.dispose();
_connectivity.disposeStream();
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Platform.isAndroid switch (_source.keys.toList()[0]) {
case ConnectivityResult.mobile:
connection = 'Online';
break;
case ConnectivityResult.wifi:
connection = 'Online';
break;
case ConnectivityResult.none:
default:
connection = 'Offline';
}
return (connection == 'Online')? Platform.isAndroid
? WillPopScope( ? WillPopScope(
onWillPop: () => onBackPressed(context), onWillPop: () => onBackPressed(context),
child: SafeArea(top: false, bottom: true, child: _scaffold(context)), child: SafeArea(top: false, bottom: true, child: _scaffold(context)),
) )
: _scaffold(context); : _scaffold(context):NoNetwork(context);
} }
Widget _scaffold(BuildContext context) { Widget _scaffold(BuildContext context) {
......
...@@ -16,6 +16,9 @@ import '../finance/FileViewer.dart'; ...@@ -16,6 +16,9 @@ import '../finance/FileViewer.dart';
import 'editOrderAccountDetails.dart'; import 'editOrderAccountDetails.dart';
import 'package:generp/Models/ordersModels/ordersDetailsDispatchOrderViewResponse.dart'; import 'package:generp/Models/ordersModels/ordersDetailsDispatchOrderViewResponse.dart';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:generp/Utils/commonServices.dart';
class Ordersdetailsbymodes extends StatefulWidget { class Ordersdetailsbymodes extends StatefulWidget {
final pageTitleName; final pageTitleName;
final orderId; final orderId;
...@@ -34,17 +37,27 @@ class Ordersdetailsbymodes extends StatefulWidget { ...@@ -34,17 +37,27 @@ class Ordersdetailsbymodes extends StatefulWidget {
class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> { class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> {
Dropdowntheme ddtheme = Dropdowntheme(); Dropdowntheme ddtheme = Dropdowntheme();
Map _source = {ConnectivityResult.mobile: true};
final MyConnectivity _connectivity = MyConnectivity.instance;
@override @override
void initState() { void initState() {
// TODO: implement initState // TODO: implement initState
super.initState(); super.initState();
_connectivity.initialise();
_connectivity.myStream.listen((source) {
setState(() => _source = source);
});
WidgetsBinding.instance.addPostFrameCallback((timeStamp) { WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
var provider = Provider.of<Pagesdashboardprovider>( var provider = Provider.of<Pagesdashboardprovider>(
context, context,
listen: false, listen: false,
); );
provider.showMoreDetails = false; provider.showMoreDetails = false;
var disproved = Provider.of<Dispatchorderprovider>(context,listen: false); var disproved = Provider.of<Dispatchorderprovider>(
context,
listen: false,
);
provider.ordersDetailsByModeAPIFunction( provider.ordersDetailsByModeAPIFunction(
context, context,
widget.orderId, widget.orderId,
...@@ -54,493 +67,530 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> { ...@@ -54,493 +67,530 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> {
} }
@override @override
Widget build(BuildContext context) { void dispose() {
return Consumer2<Pagesdashboardprovider,Dispatchorderprovider>( // TODO: implement dispose
builder: (context, provider,disProvider, child) { super.dispose();
var orderDetails = provider.orderDetails; _connectivity.disposeStream();
}
var Headings1 = [
"Order Number",
"Account Name",
"Sales Person Name",
"Order Received Date",
];
var subHeadings1 = [
provider.orderDetails.orderNumber ?? "-",
provider.orderDetails.accountName ?? "-",
provider.orderDetails.salesPersonEmpName ?? "-",
provider.orderDetails.orderReceivedDate ?? "-",
];
var Headings2 = [
"Billing State",
"Billing District",
"Billing Sub Location",
"Billing Pincode",
"Billing Address",
"Entered By",
"Dispatch State",
"Dispatch District",
"District Sub Location",
"Dispatch Pincode",
"Dispatch Address",
"GST Number",
"Unloading Scope",
"Freight Scope",
"Erection Scope",
"CGST Amount", @override
"SGST Amount", Widget build(BuildContext context) {
"IGST Amount", switch (_source.keys.toList()[0]) {
case ConnectivityResult.mobile:
connection = 'Online';
break;
case ConnectivityResult.wifi:
connection = 'Online';
break;
case ConnectivityResult.none:
default:
connection = 'Offline';
}
return connection == "Online"
? Consumer2<Pagesdashboardprovider, Dispatchorderprovider>(
builder: (context, provider, disProvider, child) {
var orderDetails = provider.orderDetails;
"OTP", var Headings1 = [
"Order Number",
"Account Name",
"Sales Person Name",
"Order Received Date",
];
var subHeadings1 = [
provider.orderDetails.orderNumber ?? "-",
provider.orderDetails.accountName ?? "-",
provider.orderDetails.salesPersonEmpName ?? "-",
provider.orderDetails.orderReceivedDate ?? "-",
];
"Basic Amount", var Headings2 = [
"Paid Amount", "Billing State",
"Balance Amount", "Billing District",
"Total Amount", "Billing Sub Location",
"Billing Pincode",
"Billing Address",
"TPC Applicable", "Entered By",
"TPC Agent",
"TPC Requested Amount",
"TPC Level 1 Approved Amount", "Dispatch State",
"TPC Level 2 Approved Amount", "Dispatch District",
"District Sub Location",
"Dispatch Pincode",
"Dispatch Address",
"TPC Payment Mode", "GST Number",
"TPC Payment Reference No",
"TPC Payment Attachment",
"TPC Status",
"Purchase Order",
"Created Datetime", "Unloading Scope",
"Note", "Freight Scope",
"Status", "Erection Scope",
];
var subHeadings2 = [
provider.orderDetails.billingState ?? "-", "CGST Amount",
provider.orderDetails.billingDistrict ?? "-", "SGST Amount",
provider.orderDetails.billingSubLocality ?? "-", "IGST Amount",
provider.orderDetails.billingPincode ?? "-",
provider.orderDetails.billingAddress ?? "-",
provider.orderDetails.enteredEmpName ?? "-", "OTP",
provider.orderDetails.stateName ?? "-", "Basic Amount",
provider.orderDetails.districtName ?? "-", "Paid Amount",
provider.orderDetails.subLocationName ?? "-", "Balance Amount",
provider.orderDetails.dispatchPincode ?? "-", "Total Amount",
provider.orderDetails.dispatchAddress ?? "-",
provider.orderDetails.gstNumber ?? "-", "TPC Applicable",
"TPC Agent",
"TPC Requested Amount",
provider.orderDetails.unloadingScope ?? "-", "TPC Level 1 Approved Amount",
provider.orderDetails.freightScope ?? "-", "TPC Level 2 Approved Amount",
provider.orderDetails.erectionScope ?? "-",
provider.orderDetails.cgstAmount ?? "-", "TPC Payment Mode",
provider.orderDetails.sgstAmount ?? "-", "TPC Payment Reference No",
provider.orderDetails.igstAmount ?? "-", "TPC Payment Attachment",
"TPC Status",
"Purchase Order",
provider.orderDetails.otp ?? "-", "Created Datetime",
"Note",
"Status",
];
var subHeadings2 = [
provider.orderDetails.billingState ?? "-",
provider.orderDetails.billingDistrict ?? "-",
provider.orderDetails.billingSubLocality ?? "-",
provider.orderDetails.billingPincode ?? "-",
provider.orderDetails.billingAddress ?? "-",
provider.orderDetails.basicAmount ?? "-", provider.orderDetails.enteredEmpName ?? "-",
provider.orderDetails.paidAmount ?? "-",
provider.orderDetails.balanceAmount ?? "-",
provider.orderDetails.totalAmount ?? "-",
provider.orderDetails.tpcApplicable ?? "-", provider.orderDetails.stateName ?? "-",
provider.orderDetails.tpcaAgentName ?? "-", provider.orderDetails.districtName ?? "-",
provider.orderDetails.requestedTpcAmount ?? "-", provider.orderDetails.subLocationName ?? "-",
provider.orderDetails.dispatchPincode ?? "-",
provider.orderDetails.dispatchAddress ?? "-",
provider.orderDetails.level1TpcApprovedAmount ?? "-", provider.orderDetails.gstNumber ?? "-",
provider.orderDetails.level2TpcApprovedAmount ?? "-",
provider.orderDetails.tpcPaymentMode ?? "-", provider.orderDetails.unloadingScope ?? "-",
provider.orderDetails.tpcPaymentReferenceNo ?? "-", provider.orderDetails.freightScope ?? "-",
provider.orderDetails.tpcPaymentAttachementViewFileName ?? "-", provider.orderDetails.erectionScope ?? "-",
provider.orderDetails.tpcStatus ?? "-",
provider.orderDetails.tpcPaymentAttachmentDirFilePath ?? "-",
provider.orderDetails.createdDatetime ?? "-", provider.orderDetails.cgstAmount ?? "-",
provider.orderDetails.note ?? "-", provider.orderDetails.sgstAmount ?? "-",
provider.orderDetails.status ?? "-", provider.orderDetails.igstAmount ?? "-",
];
provider.orderDetails.otp ?? "-",
provider.orderDetails.basicAmount ?? "-",
provider.orderDetails.paidAmount ?? "-",
provider.orderDetails.balanceAmount ?? "-",
provider.orderDetails.totalAmount ?? "-",
provider.orderDetails.tpcApplicable ?? "-",
provider.orderDetails.tpcaAgentName ?? "-",
provider.orderDetails.requestedTpcAmount ?? "-",
provider.orderDetails.level1TpcApprovedAmount ?? "-",
provider.orderDetails.level2TpcApprovedAmount ?? "-",
provider.orderDetails.tpcPaymentMode ?? "-",
provider.orderDetails.tpcPaymentReferenceNo ?? "-",
provider.orderDetails.tpcPaymentAttachementViewFileName ?? "-",
provider.orderDetails.tpcStatus ?? "-",
provider.orderDetails.tpcPaymentAttachmentDirFilePath ?? "-",
var Headings = [...Headings1]; provider.orderDetails.createdDatetime ?? "-",
var subHeadings = [...subHeadings1]; provider.orderDetails.note ?? "-",
provider.orderDetails.status ?? "-",
];
var Headings = [...Headings1];
var subHeadings = [...subHeadings1];
if(provider.showMoreDetails){ if (provider.showMoreDetails) {
Headings = [...Headings1,...Headings2]; Headings = [...Headings1, ...Headings2];
subHeadings = [...subHeadings1,...subHeadings2]; subHeadings = [...subHeadings1, ...subHeadings2];
} }
return WillPopScope( return WillPopScope(
child: SafeArea( child: SafeArea(
top: false, top: false,
bottom: Platform.isIOS?false:true, bottom: Platform.isIOS ? false : true,
child: Scaffold( child: Scaffold(
resizeToAvoidBottomInset: true, resizeToAvoidBottomInset: true,
appBar: appbar2( appBar: appbar2(
context, context,
widget.mode!=""?"Order Details": "Order Details (${widget.mode})", widget.mode != ""
provider.resetAll, ? "Order Details"
InkResponse( : "Order Details (${widget.mode})",
onTap: () { provider.resetAll,
_showOptionsSheet(context); InkResponse(
}, onTap: () {
child: SvgPicture.asset("assets/svg/ic_more.svg", height: 30), _showOptionsSheet(context);
), },
), child: SvgPicture.asset(
backgroundColor: AppColors.scaffold_bg_color, "assets/svg/ic_more.svg",
body: Container( height: 30,
child: SingleChildScrollView( ),
child: Container(
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(16),
), ),
margin: EdgeInsets.symmetric(vertical: 10, horizontal: 10), ),
padding: EdgeInsets.symmetric(vertical: 10, horizontal: 10), backgroundColor: AppColors.scaffold_bg_color,
child: Column( body: Container(
children: [ child: SingleChildScrollView(
Row( child: Container(
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(16),
),
margin: EdgeInsets.symmetric(
vertical: 10,
horizontal: 10,
),
padding: EdgeInsets.symmetric(
vertical: 10,
horizontal: 10,
),
child: Column(
children: [ children: [
Expanded( Row(
flex: 1, children: [
child: Container( Expanded(
height: 50, flex: 1,
width: 35, child: Container(
padding: EdgeInsets.all(8.0), height: 50,
decoration: BoxDecoration( width: 35,
color: Color(0xFFFFF3CE), padding: EdgeInsets.all(8.0),
borderRadius: BorderRadius.circular(8), decoration: BoxDecoration(
), color: Color(0xFFFFF3CE),
child: SvgPicture.asset("assets/svg/fin_ic.svg"), borderRadius: BorderRadius.circular(8),
),
),
SizedBox(width: 10),
Expanded(
flex: 4,
child: SizedBox(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
orderDetails.accountName ?? "-",
style: TextStyle(
fontFamily: "JakartaMedium",
fontSize: 14,
color: AppColors.semi_black,
),
),
Text(
"₹${orderDetails.balanceAmount}",
style: TextStyle(
fontFamily: "JakartaMedium",
fontSize: 14,
color: AppColors.app_blue,
),
), ),
], child: SvgPicture.asset(
), "assets/svg/fin_ic.svg",
),
),
Expanded(
flex: 2,
child: Container(
padding: EdgeInsets.symmetric(
horizontal: 5,
vertical: 10,
),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(8),
color: Color(0xFFE3FFE0),
),
child: Center(
child: Text(
orderDetails.status ?? "-",
textAlign: TextAlign.center,
style: TextStyle(
fontFamily: "JakartaMedium",
fontSize: 14,
color: Color(0xFF0D9C00),
), ),
), ),
), ),
), SizedBox(width: 10),
),
],
),
Divider(thickness: 0.5, color: Color(0xFFD7D7D7)),
...List.generate(subHeadings.length, (j) {
return Container(
padding: EdgeInsets.symmetric(vertical: 7),
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Expanded( Expanded(
child: Text( flex: 4,
Headings[j], child: SizedBox(
style: TextStyle( child: Column(
fontFamily: "JakartaMedium", crossAxisAlignment:
fontSize: 14, CrossAxisAlignment.start,
color: AppColors.semi_black, children: [
Text(
orderDetails.accountName ?? "-",
style: TextStyle(
fontFamily: "JakartaMedium",
fontSize: 14,
color: AppColors.semi_black,
),
),
Text(
"₹${orderDetails.balanceAmount}",
style: TextStyle(
fontFamily: "JakartaMedium",
fontSize: 14,
color: AppColors.app_blue,
),
),
],
), ),
), ),
), ),
Expanded( Expanded(
child: InkResponse( flex: 2,
onTap: () { child: Container(
if (Headings[j] == padding: EdgeInsets.symmetric(
"Purchase Order") { horizontal: 5,
Navigator.push( vertical: 10,
context, ),
MaterialPageRoute( decoration: BoxDecoration(
builder: borderRadius: BorderRadius.circular(8),
(context) => Fileviewer( color: Color(0xFFE3FFE0),
fileName: ),
orderDetails child: Center(
.tpcPaymentAttachementViewFileName!, child: Text(
fileUrl: orderDetails.status ?? "-",
orderDetails textAlign: TextAlign.center,
.tpcPaymentAttachmentDirFilePath!, style: TextStyle(
), fontFamily: "JakartaMedium",
), fontSize: 14,
); color: Color(0xFF0D9C00),
} ),
},
child: Text(
Headings[j] == "Purchase Order"
? "View"
:subHeadings[j]==""?"-":"${subHeadings[j]}",
style: TextStyle(
fontSize: 14,
color:
Headings[j] ==
"Purchase Order"
? AppColors.app_blue
: Color(0xFF818181),
decoration:
Headings[j] ==
"Purchase Order"
? TextDecoration.underline
: TextDecoration.none,
decorationColor:
Headings[j] ==
"Purchase Order"
? AppColors.app_blue
: AppColors.white,
), ),
), ),
), ),
), ),
], ],
), ),
); Divider(thickness: 0.5, color: Color(0xFFD7D7D7)),
}), ...List.generate(subHeadings.length, (j) {
InkResponse( return Container(
onTap: () async { padding: EdgeInsets.symmetric(vertical: 7),
provider.showMoreDetails = !provider.showMoreDetails; child: Row(
}, crossAxisAlignment: CrossAxisAlignment.start,
child: Container( children: [
padding: EdgeInsets.symmetric( Expanded(
vertical: 5, child: Text(
), Headings[j],
child: Row( style: TextStyle(
crossAxisAlignment: fontFamily: "JakartaMedium",
CrossAxisAlignment.center, fontSize: 14,
mainAxisAlignment: color: AppColors.semi_black,
MainAxisAlignment.center,
children: [
Text(
provider.showMoreDetails?"- Show Less": "+ More Details",
style: TextStyle(
fontFamily: "JakartaMedium",
fontSize: 14,
color: AppColors.app_blue,
),
),
],
),
),
),
],
),
),
),
),
bottomNavigationBar:
["self", "pending_approval"].contains(widget.mode)
? Container(height: 0)
: Container(
margin: EdgeInsets.symmetric(horizontal: 10),
alignment: Alignment.bottomCenter,
height: 60,
child: Container(
margin: EdgeInsets.only(bottom: 10),
alignment: Alignment.center,
height: 45,
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
if ([
"level_one_approval",
"level_two_approval",
"level_two_rejected",
].contains(widget.mode)) ...[
Expanded(
child: InkResponse(
onTap: () {
_showLevelApprovalRejectionSheet(
context,
"Reject",
);
},
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(8),
color: Color(0xFFFFEFEF),
border: Border.all(
color: Color(0xFFED3424),
width: 0.5,
), ),
), ),
child: Center( ),
Expanded(
child: InkResponse(
onTap: () {
if (Headings[j] == "Purchase Order") {
Navigator.push(
context,
MaterialPageRoute(
builder:
(context) => Fileviewer(
fileName:
orderDetails
.tpcPaymentAttachementViewFileName!,
fileUrl:
orderDetails
.tpcPaymentAttachmentDirFilePath!,
),
),
);
}
},
child: Text( child: Text(
"Reject", Headings[j] == "Purchase Order"
? "View"
: subHeadings[j] == ""
? "-"
: "${subHeadings[j]}",
style: TextStyle( style: TextStyle(
color: Color(0xFFED3424), fontSize: 14,
color:
Headings[j] == "Purchase Order"
? AppColors.app_blue
: Color(0xFF818181),
decoration:
Headings[j] == "Purchase Order"
? TextDecoration.underline
: TextDecoration.none,
decorationColor:
Headings[j] == "Purchase Order"
? AppColors.app_blue
: AppColors.white,
), ),
), ),
), ),
), ),
), ],
), ),
], );
SizedBox(width: 10), }),
if ([ InkResponse(
"level_one_approval", onTap: () async {
"level_two_approval", provider.showMoreDetails =
"level_two_rejected", !provider.showMoreDetails;
"sales_order_registered", },
].contains(widget.mode)) ...[ child: Container(
Expanded( padding: EdgeInsets.symmetric(vertical: 5),
child: InkResponse( child: Row(
onTap: () { crossAxisAlignment: CrossAxisAlignment.center,
// provider mainAxisAlignment: MainAxisAlignment.center,
// .approveRejectPaymentRequestAPIFunction( children: [
// context, Text(
// provider.requestsDetails.id, provider.showMoreDetails
// ); ? "- Show Less"
_showLevelApprovalRejectionSheet( : "+ More Details",
context, style: TextStyle(
"Approve", fontFamily: "JakartaMedium",
); fontSize: 14,
}, color: AppColors.app_blue,
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(8),
color: Color(0xFFE7FFE5),
border: Border.all(
color: Color(0xFF0D9C00),
width: 0.5,
),
),
child: Center(
child: Text(
"Approve",
style: TextStyle(
color: Color(0xFF0D9C00),
),
),
), ),
), ),
), ],
), ),
], ),
),
if (["admin"].contains(widget.mode)) ...[ ],
Expanded( ),
child: InkResponse( ),
onTap: () { ),
_showLevelDeletionSheet(context); ),
}, bottomNavigationBar:
child: Container( ["self", "pending_approval"].contains(widget.mode)
decoration: BoxDecoration( ? Container(height: 0)
borderRadius: BorderRadius.circular(8), : Container(
color: Color(0xFFFFEFEF), margin: EdgeInsets.symmetric(horizontal: 10),
border: Border.all( alignment: Alignment.bottomCenter,
color: Color(0xFFED3424), height: 60,
width: 0.5, child: Container(
margin: EdgeInsets.only(bottom: 10),
alignment: Alignment.center,
height: 45,
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
if ([
"level_one_approval",
"level_two_approval",
"level_two_rejected",
].contains(widget.mode)) ...[
Expanded(
child: InkResponse(
onTap: () {
_showLevelApprovalRejectionSheet(
context,
"Reject",
);
},
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(
8,
),
color: Color(0xFFFFEFEF),
border: Border.all(
color: Color(0xFFED3424),
width: 0.5,
),
),
child: Center(
child: Text(
"Reject",
style: TextStyle(
color: Color(0xFFED3424),
),
),
),
), ),
), ),
child: Center( ),
child: Text( ],
"Delete", SizedBox(width: 10),
style: TextStyle( if ([
color: Color(0xFFED3424), "level_one_approval",
"level_two_approval",
"level_two_rejected",
"sales_order_registered",
].contains(widget.mode)) ...[
Expanded(
child: InkResponse(
onTap: () {
// provider
// .approveRejectPaymentRequestAPIFunction(
// context,
// provider.requestsDetails.id,
// );
_showLevelApprovalRejectionSheet(
context,
"Approve",
);
},
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(
8,
),
color: Color(0xFFE7FFE5),
border: Border.all(
color: Color(0xFF0D9C00),
width: 0.5,
),
),
child: Center(
child: Text(
"Approve",
style: TextStyle(
color: Color(0xFF0D9C00),
),
),
), ),
), ),
), ),
), ),
), ],
),
], if (["admin"].contains(widget.mode)) ...[
if (widget.mode == "dispatched") ...[ Expanded(
Expanded( child: InkResponse(
child: InkResponse( onTap: () {
onTap: () { _showLevelDeletionSheet(context);
disProvider.initializeForm(context); },
disProvider.ordersDetailsDispatchOrderViewFunction(context,widget.orderId); child: Container(
_showDispatchSheet(context, "Dispatch"); decoration: BoxDecoration(
}, borderRadius: BorderRadius.circular(
child: Container( 8,
decoration: BoxDecoration( ),
borderRadius: BorderRadius.circular(8), color: Color(0xFFFFEFEF),
color: Color(0xFFFFEFEF), border: Border.all(
border: Border.all( color: Color(0xFFED3424),
color: Color(0xFFED3424), width: 0.5,
width: 0.5, ),
),
child: Center(
child: Text(
"Delete",
style: TextStyle(
color: Color(0xFFED3424),
),
),
),
), ),
), ),
child: Center( ),
child: Text( ],
"Dispatch", if (widget.mode == "dispatched") ...[
style: TextStyle( Expanded(
color: Color(0xFFED3424), child: InkResponse(
onTap: () {
disProvider.initializeForm(context);
disProvider
.ordersDetailsDispatchOrderViewFunction(
context,
widget.orderId,
);
_showDispatchSheet(
context,
"Dispatch",
);
},
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(
8,
),
color: Color(0xFFFFEFEF),
border: Border.all(
color: Color(0xFFED3424),
width: 0.5,
),
),
child: Center(
child: Text(
"Dispatch",
style: TextStyle(
color: Color(0xFFED3424),
),
),
), ),
), ),
), ),
), ),
), ],
), ],
], ),
], ),
), ),
), ),
), ),
),
),
onWillPop: () { onWillPop: () {
return onBackPressed(context); return onBackPressed(context);
},
);
}, },
); )
}, : NoNetwork(context);
);
} }
Future<void> _showOptionsSheet(BuildContext context) { Future<void> _showOptionsSheet(BuildContext context) {
...@@ -890,35 +940,43 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> { ...@@ -890,35 +940,43 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> {
), ),
], ],
InkWell( InkWell(
onTap:provider.submitClicked?null: () { onTap:
provider.submitClicked = true; provider.submitClicked
provider.approvalRejectionAPIFunction( ? null
context, : () {
details.status, provider.submitClicked = true;
details.id, provider.approvalRejectionAPIFunction(
type == "Approve" ? "Approved" : "Rejected", context,
details.tpcApplicable, details.status,
details.tpcApplicable == "Yes" details.id,
? (widget.mode == "level_one_approval" type == "Approve"
? details.level1TpcApprovedAmount ? "Approved"
: details.level2TpcApprovedAmount) : "Rejected",
: "", details.tpcApplicable,
widget.mode == "dispatched" details.tpcApplicable == "Yes"
? details.invoiceNumber ? (widget.mode ==
: "", "level_one_approval"
widget.mode == "dispatched" ? details
? details.vehicleNumber .level1TpcApprovedAmount
: "", : details
widget.mode == "dispatched" .level2TpcApprovedAmount)
? details.driverName : "",
: "", widget.mode == "dispatched"
widget.mode == "dispatched" ? details.invoiceNumber
? details.driverMobileNumber : "",
: "", widget.mode == "dispatched"
widget.mode == "dispatched" ? [] : [], ? details.vehicleNumber
widget.mode, : "",
); widget.mode == "dispatched"
}, ? details.driverName
: "",
widget.mode == "dispatched"
? details.driverMobileNumber
: "",
widget.mode == "dispatched" ? [] : [],
widget.mode,
);
},
child: Container( child: Container(
alignment: Alignment.center, alignment: Alignment.center,
...@@ -934,13 +992,18 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> { ...@@ -934,13 +992,18 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> {
borderRadius: BorderRadius.circular(14.0), borderRadius: BorderRadius.circular(14.0),
), ),
child: Center( child: Center(
child:provider.submitClicked?CircularProgressIndicator.adaptive( child:
valueColor: AlwaysStoppedAnimation(Colors.white), provider.submitClicked
): Text( ? CircularProgressIndicator.adaptive(
"Submit", valueColor: AlwaysStoppedAnimation(
textAlign: TextAlign.center, Colors.white,
style: TextStyle(color: Colors.white), ),
), )
: Text(
"Submit",
textAlign: TextAlign.center,
style: TextStyle(color: Colors.white),
),
), ),
), ),
), ),
...@@ -1041,7 +1104,10 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> { ...@@ -1041,7 +1104,10 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> {
false, false,
null, null,
), ),
errorWidget(context, disProvider.driverMobileNumberError), errorWidget(
context,
disProvider.driverMobileNumberError,
),
InkResponse( InkResponse(
onTap: () { onTap: () {
disProvider.editAddNewRow(); disProvider.editAddNewRow();
...@@ -1058,7 +1124,7 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> { ...@@ -1058,7 +1124,7 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> {
width: 0.5, width: 0.5,
), ),
), ),
child: Center( child: Center(
child: Text( child: Text(
"+ Add Product", "+ Add Product",
style: TextStyle( style: TextStyle(
...@@ -1070,21 +1136,30 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> { ...@@ -1070,21 +1136,30 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> {
), ),
), ),
if (disProvider.leadProductsList.isNotEmpty || if (disProvider.leadProductsList.isNotEmpty ||
disProvider.engineNumberControllers.isNotEmpty)...[ disProvider
.engineNumberControllers
.isNotEmpty) ...[
ListView.builder( ListView.builder(
itemCount: disProvider.engineNumberControllers.length, itemCount:
disProvider.engineNumberControllers.length,
physics: const NeverScrollableScrollPhysics(), physics: const NeverScrollableScrollPhysics(),
shrinkWrap: true, shrinkWrap: true,
itemBuilder: (context, j) { itemBuilder: (context, j) {
return Container( return Container(
padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 10), padding: const EdgeInsets.symmetric(
margin: const EdgeInsets.symmetric(vertical: 10), horizontal: 10,
vertical: 10,
),
margin: const EdgeInsets.symmetric(
vertical: 10,
),
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.white, color: Colors.white,
borderRadius: BorderRadius.circular(20), borderRadius: BorderRadius.circular(20),
), ),
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment:
CrossAxisAlignment.start,
children: [ children: [
TextWidget(context, "Product"), TextWidget(context, "Product"),
DropdownButtonHideUnderline( DropdownButtonHideUnderline(
...@@ -1095,37 +1170,74 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> { ...@@ -1095,37 +1170,74 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> {
isExpanded: true, isExpanded: true,
hint: const Text( hint: const Text(
'Select Product', 'Select Product',
style: TextStyle(fontSize: 14), style: TextStyle(
overflow: TextOverflow.ellipsis, fontSize: 14,
),
items: disProvider.productsList
.map((ord) => DropdownMenuItem<Products>(
value: ord,
child: Text(
"(Product Name: ${ord.productName})",
style: const TextStyle(fontSize: 14),
overflow: TextOverflow.ellipsis,
), ),
)) overflow:
.toList(), TextOverflow.ellipsis,
value: disProvider.selectedProductIds[j] != null ),
? disProvider.productsList.firstWhere( items:
(ord) => ord.id == disProvider.selectedProductIds[j], disProvider.productsList
orElse: () => disProvider.productsList[0], .map(
) (
: null, ord,
) => DropdownMenuItem<
Products
>(
value: ord,
child: Text(
"(Product Name: ${ord.productName})",
style:
const TextStyle(
fontSize:
14,
),
overflow:
TextOverflow
.ellipsis,
),
),
)
.toList(),
value:
disProvider.selectedProductIds[j] !=
null
? disProvider
.productsList
.firstWhere(
(ord) =>
ord.id ==
disProvider
.selectedProductIds[j],
orElse:
() =>
disProvider
.productsList[0],
)
: null,
onChanged: (Products? value) { onChanged: (Products? value) {
if (value != null) { if (value != null) {
disProvider.updateSelectedProductIds(j, value); disProvider
disProvider.selectedProductIds[j] = .updateSelectedProductIds(
value.id?.toString() ?? ''; j,
disProvider.updateTotalAmount(j); value,
);
disProvider
.selectedProductIds[j] =
value.id?.toString() ??
'';
disProvider
.updateTotalAmount(j);
} }
}, },
buttonStyleData: ddtheme.buttonStyleData, buttonStyleData:
iconStyleData: ddtheme.iconStyleData, ddtheme.buttonStyleData,
menuItemStyleData: ddtheme.menuItemStyleData, iconStyleData:
dropdownStyleData: ddtheme.dropdownStyleData, ddtheme.iconStyleData,
menuItemStyleData:
ddtheme.menuItemStyleData,
dropdownStyleData:
ddtheme.dropdownStyleData,
), ),
), ),
], ],
...@@ -1138,16 +1250,29 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> { ...@@ -1138,16 +1250,29 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> {
flex: 2, flex: 2,
child: textControllerWidget( child: textControllerWidget(
context, context,
disProvider.engineNumberControllers[j], disProvider
.engineNumberControllers[j],
"Engine Number", "Engine Number",
"Enter Engine Number", "Enter Engine Number",
(p0) { (p0) {
if(disProvider.engineNumberControllers[j].text.trim().isEmpty){ if (disProvider
disProvider.pdiIDControllers[j].clear(); .engineNumberControllers[j]
.text
.trim()
.isEmpty) {
disProvider
.pdiIDControllers[j]
.clear();
} }
disProvider.updateTotalAmount(j); disProvider.updateTotalAmount(
disProvider.ordersPDIIDByEngineNumberFunction(context,j); j,
}, );
disProvider
.ordersPDIIDByEngineNumberFunction(
context,
j,
);
},
TextInputType.text, TextInputType.text,
false, false,
null, null,
...@@ -1165,7 +1290,8 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> { ...@@ -1165,7 +1290,8 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> {
disProvider.pdiIDControllers[j], disProvider.pdiIDControllers[j],
"PDI ID", "PDI ID",
"Enter PDI ID", "Enter PDI ID",
(value) => disProvider.updateTotalAmount(j), (value) => disProvider
.updateTotalAmount(j),
TextInputType.text, TextInputType.text,
true, true,
null, null,
...@@ -1185,30 +1311,38 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> { ...@@ -1185,30 +1311,38 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> {
); );
}, },
), ),
], ],
InkWell( InkWell(
onTap:provider.submitClicked?null: () { onTap:
provider.submitClicked = false; provider.submitClicked
final data = disProvider.getFormData(); ? null
print(data); : () {
disProvider.approvalRejectionAPIFunction( provider.submitClicked = false;
context, final data = disProvider.getFormData();
details.status, print(data);
details.id, disProvider.approvalRejectionAPIFunction(
type == "Dispatch", context,
provider.approveRejectFeedbackController.text, details.status,
details.tpcApplicable, details.id,
details.tpcApplicable == "Yes" type == "Dispatch",
? (widget.mode == "level_one_approval" provider
? details.level1TpcApprovedAmount .approveRejectFeedbackController
: details.level2TpcApprovedAmount) .text,
: "", details.tpcApplicable,
provider.saleOrderNumberController.text, details.tpcApplicable == "Yes"
provider.editCompanyController.text, ? (widget.mode ==
data, "level_one_approval"
widget.mode ? details
); .level1TpcApprovedAmount
}, : details
.level2TpcApprovedAmount)
: "",
provider.saleOrderNumberController.text,
provider.editCompanyController.text,
data,
widget.mode,
);
},
child: Container( child: Container(
alignment: Alignment.center, alignment: Alignment.center,
...@@ -1224,13 +1358,18 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> { ...@@ -1224,13 +1358,18 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> {
borderRadius: BorderRadius.circular(14.0), borderRadius: BorderRadius.circular(14.0),
), ),
child: Center( child: Center(
child:provider.submitClicked?CircularProgressIndicator.adaptive( child:
valueColor: AlwaysStoppedAnimation(Colors.white), provider.submitClicked
): Text( ? CircularProgressIndicator.adaptive(
"Submit", valueColor: AlwaysStoppedAnimation(
textAlign: TextAlign.center, Colors.white,
style: TextStyle(color: Colors.white), ),
), )
: Text(
"Submit",
textAlign: TextAlign.center,
style: TextStyle(color: Colors.white),
),
), ),
), ),
), ),
...@@ -1347,13 +1486,16 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> { ...@@ -1347,13 +1486,16 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> {
), ),
], ],
InkWell( InkWell(
onTap:provider.submitClicked ?null: () { onTap:
provider.submitClicked = true; provider.submitClicked
provider.delectionAPIFunction( ? null
context, : () {
provider.orderDetails.id, provider.submitClicked = true;
); provider.delectionAPIFunction(
}, context,
provider.orderDetails.id,
);
},
child: Container( child: Container(
alignment: Alignment.center, alignment: Alignment.center,
height: 45, height: 45,
...@@ -1368,13 +1510,18 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> { ...@@ -1368,13 +1510,18 @@ class _OrdersdetailsbymodesState extends State<Ordersdetailsbymodes> {
borderRadius: BorderRadius.circular(14.0), borderRadius: BorderRadius.circular(14.0),
), ),
child: Center( child: Center(
child:provider.submitClicked ?CircularProgressIndicator.adaptive( child:
valueColor: AlwaysStoppedAnimation(Colors.white), provider.submitClicked
): Text( ? CircularProgressIndicator.adaptive(
"Submit", valueColor: AlwaysStoppedAnimation(
textAlign: TextAlign.center, Colors.white,
style: TextStyle(color: Colors.white), ),
), )
: Text(
"Submit",
textAlign: TextAlign.center,
style: TextStyle(color: Colors.white),
),
), ),
), ),
), ),
......
...@@ -13,6 +13,9 @@ import '../../Utils/commonWidgets.dart'; ...@@ -13,6 +13,9 @@ import '../../Utils/commonWidgets.dart';
import '../../Utils/dropdownTheme.dart'; import '../../Utils/dropdownTheme.dart';
import '../commonDateRangeFilter.dart'; import '../commonDateRangeFilter.dart';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:generp/Utils/commonServices.dart';
class OrderslistbyModes extends StatefulWidget { class OrderslistbyModes extends StatefulWidget {
final mode; final mode;
final pageTitleName; final pageTitleName;
...@@ -29,11 +32,17 @@ class OrderslistbyModes extends StatefulWidget { ...@@ -29,11 +32,17 @@ class OrderslistbyModes extends StatefulWidget {
class _OrderslistbyModesState extends State<OrderslistbyModes> { class _OrderslistbyModesState extends State<OrderslistbyModes> {
Dropdowntheme ddtheme = Dropdowntheme(); Dropdowntheme ddtheme = Dropdowntheme();
Map _source = {ConnectivityResult.mobile: true};
final MyConnectivity _connectivity = MyConnectivity.instance;
@override @override
void initState() { void initState() {
// TODO: implement initState // TODO: implement initState
super.initState(); super.initState();
_connectivity.initialise();
_connectivity.myStream.listen((source) {
setState(() => _source = source);
});
WidgetsBinding.instance.addPostFrameCallback((timeStamp) { WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
var provider = Provider.of<Pagesdashboardprovider>( var provider = Provider.of<Pagesdashboardprovider>(
context, context,
...@@ -45,283 +54,346 @@ class _OrderslistbyModesState extends State<OrderslistbyModes> { ...@@ -45,283 +54,346 @@ class _OrderslistbyModesState extends State<OrderslistbyModes> {
} }
@override @override
Widget build(BuildContext context) { void dispose() {
return Consumer<Pagesdashboardprovider>( // TODO: implement dispose
builder: (context, provider, child) { super.dispose();
final ordersList = provider.ordersList; _connectivity.disposeStream();
return WillPopScope( }
onWillPop: () {
provider.resetAll();
return onBackPressed(context);
},
child: SafeArea(
top: false,
bottom: Platform.isIOS?false:true,
child: Scaffold(
resizeToAvoidBottomInset: true,
appBar: appbar2(
context,
widget.pageTitleName,
provider.resetAll,
Row(
children: [
// InkResponse(
// onTap: () {
// _showOptionsSheet(context);
// },
// child: SvgPicture.asset("assets/svg/ic_download.svg"),
// ),
InkResponse( @override
onTap: () async { Widget build(BuildContext context) {
_showFilterSheet(context); switch (_source.keys.toList()[0]) {
}, case ConnectivityResult.mobile:
child: SvgPicture.asset( connection = 'Online';
"assets/svg/filter_ic.svg", break;
height: 25, case ConnectivityResult.wifi:
), connection = 'Online';
), break;
], case ConnectivityResult.none:
), default:
), connection = 'Offline';
backgroundColor: AppColors.scaffold_bg_color, }
body: return connection == "Online"
provider.isLoading ? Consumer<Pagesdashboardprovider>(
? Center( builder: (context, provider, child) {
child: CircularProgressIndicator.adaptive( final ordersList = provider.ordersList;
valueColor: AlwaysStoppedAnimation<Color>( return WillPopScope(
AppColors.app_blue, onWillPop: () {
provider.resetAll();
return onBackPressed(context);
},
child: SafeArea(
top: false,
bottom: Platform.isIOS ? false : true,
child: Scaffold(
resizeToAvoidBottomInset: true,
appBar: appbar2(
context,
widget.pageTitleName,
provider.resetAll,
Row(
children: [
// InkResponse(
// onTap: () {
// _showOptionsSheet(context);
// },
// child: SvgPicture.asset("assets/svg/ic_download.svg"),
// ),
InkResponse(
onTap: () async {
_showFilterSheet(context);
},
child: SvgPicture.asset(
"assets/svg/filter_ic.svg",
height: 25,
), ),
), ),
) ],
: ordersList.isNotEmpty ),
? SingleChildScrollView( ),
child: Column( backgroundColor: AppColors.scaffold_bg_color,
children: [ body:
ListView.builder( provider.isLoading
itemCount: ordersList.length, ? Center(
shrinkWrap: true, child: CircularProgressIndicator.adaptive(
physics: NeverScrollableScrollPhysics(), valueColor: AlwaysStoppedAnimation<Color>(
itemBuilder: (context, index) { AppColors.app_blue,
if (ordersList.isEmpty) { ),
return SizedBox( ),
child: Center( )
child: Text("No Data Available"), : ordersList.isNotEmpty
), ? SingleChildScrollView(
); child: Column(
} children: [
if(ordersList[index].orderNumber=="GP20252605448") ListView.builder(
return Container( itemCount: ordersList.length,
padding: EdgeInsets.symmetric( shrinkWrap: true,
horizontal: 10, physics: NeverScrollableScrollPhysics(),
vertical: 10, itemBuilder: (context, index) {
), if (ordersList.isEmpty) {
margin: EdgeInsets.symmetric( return SizedBox(
horizontal: 10, child: Center(
vertical: 10, child: Text("No Data Available"),
), ),
decoration: BoxDecoration( );
color: Colors.white, }
borderRadius: BorderRadius.circular(16), if (ordersList[index].orderNumber ==
), "GP20252605448")
child: Column( return Container(
children: [ padding: EdgeInsets.symmetric(
Row( horizontal: 10,
children: [ vertical: 10,
Expanded( ),
flex: 1, margin: EdgeInsets.symmetric(
child: Container( horizontal: 10,
height: 50, vertical: 10,
width: 35, ),
padding: EdgeInsets.all(8.0), decoration: BoxDecoration(
decoration: BoxDecoration( color: Colors.white,
color: Color(0xFFFFF3CE), borderRadius: BorderRadius.circular(
borderRadius: 16,
BorderRadius.circular(8),
),
child: SvgPicture.asset(
"assets/svg/fin_ic.svg",
),
),
), ),
SizedBox(width: 10), ),
Expanded( child: Column(
flex: 4, children: [
child: SizedBox( Row(
child: Column( children: [
crossAxisAlignment: Expanded(
CrossAxisAlignment.start, flex: 1,
children: [ child: Container(
Text( height: 50,
ordersList[index] width: 35,
.accountName!, padding: EdgeInsets.all(
style: TextStyle( 8.0,
fontFamily: "JakartaMedium", ),
fontSize: 14, decoration: BoxDecoration(
color: AppColors.semi_black, color: Color(0xFFFFF3CE),
borderRadius:
BorderRadius.circular(
8,
),
),
child: SvgPicture.asset(
"assets/svg/fin_ic.svg",
), ),
), ),
Text( ),
"₹" SizedBox(width: 10),
"${ordersList[index].balanceAmount}", Expanded(
style: TextStyle( flex: 4,
fontFamily: "JakartaMedium", child: SizedBox(
fontSize: 14, child: Column(
color: AppColors.app_blue, crossAxisAlignment:
CrossAxisAlignment
.start,
children: [
Text(
ordersList[index]
.accountName!,
style: TextStyle(
fontFamily:
"JakartaMedium",
fontSize: 14,
color:
AppColors
.semi_black,
),
),
Text(
"₹"
"${ordersList[index].balanceAmount}",
style: TextStyle(
fontFamily:
"JakartaMedium",
fontSize: 14,
color:
AppColors
.app_blue,
),
),
],
), ),
), ),
], ),
), Expanded(
), flex: 2,
), child: Container(
Expanded( padding:
flex: 2, EdgeInsets.symmetric(
child: Container( horizontal: 5,
padding: EdgeInsets.symmetric( vertical: 10,
horizontal: 5, ),
vertical: 10, decoration: BoxDecoration(
), borderRadius:
decoration: BoxDecoration( BorderRadius.circular(
borderRadius: 8,
BorderRadius.circular(8), ),
color: Color(0xFFE3FFE0), color: Color(0xFFE3FFE0),
), ),
child: Center( child: Center(
child: Text( child: Text(
ordersList[index].status!, ordersList[index]
textAlign: TextAlign.center, .status!,
style: TextStyle( textAlign:
fontFamily: "JakartaMedium", TextAlign.center,
fontSize: 14, style: TextStyle(
color: Color(0xFF0D9C00), fontFamily:
"JakartaMedium",
fontSize: 14,
color: Color(
0xFF0D9C00,
),
),
),
),
), ),
), ),
), ],
), ),
), Divider(
], thickness: 0.5,
), color: Color(0xFFD7D7D7),
Divider( ),
thickness: 0.5, ...List.generate(5, (j) {
color: Color(0xFFD7D7D7), final headings = [
), "Order Number",
...List.generate(5, (j) { "Entered Employee",
final headings = [ "Sales Person",
"Order Number", // "Date",
"Entered Employee", "Paid Amount",
"Sales Person", "Balance Amount",
// "Date", ];
"Paid Amount",
"Balance Amount",
];
final subHeadings = [ final subHeadings = [
ordersList[index].orderNumber, ordersList[index].orderNumber,
ordersList[index].enteredEmpName, ordersList[index]
ordersList[index].salesPersonEmpName, .enteredEmpName,
// ordersList[index].createdDatetime, ordersList[index]
ordersList[index].paidAmount, .salesPersonEmpName,
ordersList[index].balanceAmount, // ordersList[index].createdDatetime,
]; ordersList[index].paidAmount,
return Container( ordersList[index].balanceAmount,
padding: EdgeInsets.symmetric( ];
vertical: 5, return Container(
), padding: EdgeInsets.symmetric(
child: Row( vertical: 5,
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Expanded(
child: Text(
headings[j],
style: TextStyle(
fontFamily: "JakartaMedium",
fontSize: 14,
color: AppColors.semi_black,
),
), ),
), child: Row(
Expanded( crossAxisAlignment:
child: InkResponse( CrossAxisAlignment.start,
child: Text( children: [
subHeadings[j]!, Expanded(
style: TextStyle( child: Text(
fontSize: 14, headings[j],
color: Color(0xFF818181), style: TextStyle(
decoration: fontFamily:
TextDecoration.none, "JakartaMedium",
decorationColor: fontSize: 14,
AppColors.white, color:
AppColors
.semi_black,
),
),
),
Expanded(
child: InkResponse(
child: Text(
subHeadings[j]!,
style: TextStyle(
fontSize: 14,
color: Color(
0xFF818181,
),
decoration:
TextDecoration
.none,
decorationColor:
AppColors.white,
),
),
),
), ),
],
),
);
}),
InkResponse(
onTap: () async {
var res = await Navigator.push(
context,
MaterialPageRoute(
builder:
(
context,
) => Ordersdetailsbymodes(
pageTitleName:
widget
.pageTitleName,
orderId:
ordersList[index]
.orderId,
mode: widget.mode,
),
), ),
);
if (res == true) {
provider
.ordersListByModeFilterAPIFunction(
context,
widget.mode,
);
provider
.ordersListByModeAPIFunction(
context,
widget.mode,
"",
"",
);
}
},
child: Container(
padding: EdgeInsets.symmetric(
vertical: 5,
), ),
), child: Row(
], crossAxisAlignment:
), CrossAxisAlignment.center,
); mainAxisAlignment:
}), MainAxisAlignment.start,
InkResponse( children: [
onTap: () async { Text(
var res = await Navigator.push( "View Details",
context, style: TextStyle(
MaterialPageRoute( fontFamily:
builder: "JakartaMedium",
(context) => fontSize: 14,
Ordersdetailsbymodes( color:
pageTitleName: AppColors.app_blue,
widget.pageTitleName,
orderId:
ordersList[index]
.orderId,
mode: widget.mode,
), ),
), ),
); SizedBox(width: 5),
if(res==true){ SvgPicture.asset(
provider.ordersListByModeFilterAPIFunction(context, widget.mode); "assets/svg/next_button.svg",
provider.ordersListByModeAPIFunction(context, widget.mode, "", ""); ),
} ],
},
child: Container(
padding: EdgeInsets.symmetric(
vertical: 5,
),
child: Row(
crossAxisAlignment:
CrossAxisAlignment.center,
mainAxisAlignment:
MainAxisAlignment.start,
children: [
Text(
"View Details",
style: TextStyle(
fontFamily: "JakartaMedium",
fontSize: 14,
color: AppColors.app_blue,
), ),
), ),
SizedBox(width: 5), ),
SvgPicture.asset( ],
"assets/svg/next_button.svg",
),
],
),
), ),
), );
], },
), ),
); ],
},
), ),
], )
), : Emptywidget(context),
) ),
: Emptywidget(context), ),
), );
), },
); )
}, : NoNetwork(context);
);
} }
Future<void> _showOptionsSheet(BuildContext context) { Future<void> _showOptionsSheet(BuildContext context) {
......
...@@ -12,6 +12,8 @@ import '../finance/FileViewer.dart'; ...@@ -12,6 +12,8 @@ import '../finance/FileViewer.dart';
import 'editPaymentDetailsByMode.dart'; import 'editPaymentDetailsByMode.dart';
import 'ordersDetailsByModes.dart'; import 'ordersDetailsByModes.dart';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:generp/Utils/commonServices.dart';
class Paymentdetailsbymode extends StatefulWidget { class Paymentdetailsbymode extends StatefulWidget {
final pageTitleName; final pageTitleName;
final paymentId; final paymentId;
...@@ -29,10 +31,17 @@ class Paymentdetailsbymode extends StatefulWidget { ...@@ -29,10 +31,17 @@ class Paymentdetailsbymode extends StatefulWidget {
} }
class _PaymentdetailsbymodeState extends State<Paymentdetailsbymode> { class _PaymentdetailsbymodeState extends State<Paymentdetailsbymode> {
Map _source = {ConnectivityResult.mobile: true};
final MyConnectivity _connectivity = MyConnectivity.instance;
@override @override
void initState() { void initState() {
// TODO: implement initState // TODO: implement initState
super.initState(); super.initState();
_connectivity.initialise();
_connectivity.myStream.listen((source) {
setState(() => _source = source);
});
WidgetsBinding.instance.addPostFrameCallback((timeStamp) { WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
var provider = Provider.of<Paymentsprovider>(context, listen: false); var provider = Provider.of<Paymentsprovider>(context, listen: false);
provider.paymentsDetailsByModeAPIFunction( provider.paymentsDetailsByModeAPIFunction(
...@@ -43,9 +52,28 @@ class _PaymentdetailsbymodeState extends State<Paymentdetailsbymode> { ...@@ -43,9 +52,28 @@ class _PaymentdetailsbymodeState extends State<Paymentdetailsbymode> {
}); });
} }
@override
void dispose() {
// TODO: implement dispose
super.dispose();
_connectivity.disposeStream();
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Consumer<Paymentsprovider>( switch (_source.keys.toList()[0]) {
case ConnectivityResult.mobile:
connection = 'Online';
break;
case ConnectivityResult.wifi:
connection = 'Online';
break;
case ConnectivityResult.none:
default:
connection = 'Offline';
}
return connection=="Online"?
Consumer<Paymentsprovider>(
builder: (context, provider, child) { builder: (context, provider, child) {
var paymentDetails = provider.paymentDetails; var paymentDetails = provider.paymentDetails;
var adjustList = provider.paidLists; var adjustList = provider.paidLists;
...@@ -485,7 +513,7 @@ class _PaymentdetailsbymodeState extends State<Paymentdetailsbymode> { ...@@ -485,7 +513,7 @@ class _PaymentdetailsbymodeState extends State<Paymentdetailsbymode> {
}, },
); );
}, },
); ):NoNetwork(context);
} }
......
...@@ -12,6 +12,8 @@ import '../../Utils/app_colors.dart'; ...@@ -12,6 +12,8 @@ import '../../Utils/app_colors.dart';
import '../../Utils/commonWidgets.dart'; import '../../Utils/commonWidgets.dart';
import '../../Utils/dropdownTheme.dart'; import '../../Utils/dropdownTheme.dart';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:generp/Utils/commonServices.dart';
class Paymentlistsbymode extends StatefulWidget { class Paymentlistsbymode extends StatefulWidget {
final mode; final mode;
final pageTitleName; final pageTitleName;
...@@ -25,10 +27,17 @@ class Paymentlistsbymode extends StatefulWidget { ...@@ -25,10 +27,17 @@ class Paymentlistsbymode extends StatefulWidget {
class _PaymentlistsbymodeState extends State<Paymentlistsbymode> { class _PaymentlistsbymodeState extends State<Paymentlistsbymode> {
Dropdowntheme ddtheme = Dropdowntheme(); Dropdowntheme ddtheme = Dropdowntheme();
Map _source = {ConnectivityResult.mobile: true};
final MyConnectivity _connectivity = MyConnectivity.instance;
@override @override
void initState() { void initState() {
// TODO: implement initState // TODO: implement initState
super.initState(); super.initState();
_connectivity.initialise();
_connectivity.myStream.listen((source) {
setState(() => _source = source);
});
WidgetsBinding.instance.addPostFrameCallback((timeStamp) { WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
var provider = Provider.of<Paymentsprovider>( var provider = Provider.of<Paymentsprovider>(
context, context,
...@@ -39,10 +48,27 @@ class _PaymentlistsbymodeState extends State<Paymentlistsbymode> { ...@@ -39,10 +48,27 @@ class _PaymentlistsbymodeState extends State<Paymentlistsbymode> {
}); });
} }
@override
void dispose() {
// TODO: implement dispose
super.dispose();
_connectivity.disposeStream();
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Consumer<Paymentsprovider>( switch (_source.keys.toList()[0]) {
case ConnectivityResult.mobile:
connection = 'Online';
break;
case ConnectivityResult.wifi:
connection = 'Online';
break;
case ConnectivityResult.none:
default:
connection = 'Offline';
}
return connection=="Online"?
Consumer<Paymentsprovider>(
builder: (context, provider, child) { builder: (context, provider, child) {
final paymentLists = provider.paymentsList; final paymentLists = provider.paymentsList;
return WillPopScope( return WillPopScope(
...@@ -296,7 +322,7 @@ class _PaymentlistsbymodeState extends State<Paymentlistsbymode> { ...@@ -296,7 +322,7 @@ class _PaymentlistsbymodeState extends State<Paymentlistsbymode> {
), ),
); );
}, },
); ):NoNetwork(context);
} }
Future<void> _showOptionsSheet(BuildContext context) { Future<void> _showOptionsSheet(BuildContext context) {
......
...@@ -10,6 +10,8 @@ import '../../Utils/commonWidgets.dart'; ...@@ -10,6 +10,8 @@ import '../../Utils/commonWidgets.dart';
import '../finance/FileViewer.dart'; import '../finance/FileViewer.dart';
import 'ordersDetailsByModes.dart'; import 'ordersDetailsByModes.dart';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:generp/Utils/commonServices.dart';
class Tpcagentdetailsbymode extends StatefulWidget { class Tpcagentdetailsbymode extends StatefulWidget {
final tpcAgentId; final tpcAgentId;
final pageTitleName; final pageTitleName;
...@@ -21,10 +23,18 @@ class Tpcagentdetailsbymode extends StatefulWidget { ...@@ -21,10 +23,18 @@ class Tpcagentdetailsbymode extends StatefulWidget {
} }
class _TpcagentdetailsbymodeState extends State<Tpcagentdetailsbymode> { class _TpcagentdetailsbymodeState extends State<Tpcagentdetailsbymode> {
Map _source = {ConnectivityResult.mobile: true};
final MyConnectivity _connectivity = MyConnectivity.instance;
@override @override
void initState() { void initState() {
// TODO: implement initState // TODO: implement initState
super.initState(); super.initState();
_connectivity.initialise();
_connectivity.myStream.listen((source) {
setState(() => _source = source);
});
WidgetsBinding.instance.addPostFrameCallback((timeStamp) { WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
var provider = Provider.of<Tpcagentsprovider>( var provider = Provider.of<Tpcagentsprovider>(
context, context,
...@@ -35,10 +45,28 @@ class _TpcagentdetailsbymodeState extends State<Tpcagentdetailsbymode> { ...@@ -35,10 +45,28 @@ class _TpcagentdetailsbymodeState extends State<Tpcagentdetailsbymode> {
}); });
} }
@override
void dispose() {
// TODO: implement dispose
super.dispose();
_connectivity.disposeStream();
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Consumer<Tpcagentsprovider>( switch (_source.keys.toList()[0]) {
case ConnectivityResult.mobile:
connection = 'Online';
break;
case ConnectivityResult.wifi:
connection = 'Online';
break;
case ConnectivityResult.none:
default:
connection = 'Offline';
}
return connection=="Online"?
Consumer<Tpcagentsprovider>(
builder: (context, provider, child) { builder: (context, provider, child) {
var tpcAgentDetails = provider.TPCAgentsDetails; var tpcAgentDetails = provider.TPCAgentsDetails;
var tpcReqAmt = provider.TPCRequestedAmounts; var tpcReqAmt = provider.TPCRequestedAmounts;
...@@ -303,7 +331,8 @@ class _TpcagentdetailsbymodeState extends State<Tpcagentdetailsbymode> { ...@@ -303,7 +331,8 @@ class _TpcagentdetailsbymodeState extends State<Tpcagentdetailsbymode> {
}, },
); );
}, },
); ):
NoNetwork(context);
} }
......
...@@ -10,6 +10,8 @@ import 'package:provider/provider.dart'; ...@@ -10,6 +10,8 @@ import 'package:provider/provider.dart';
import '../../Utils/app_colors.dart'; import '../../Utils/app_colors.dart';
import '../../Utils/commonWidgets.dart'; import '../../Utils/commonWidgets.dart';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:generp/Utils/commonServices.dart';
class Tpcagentlistbymode extends StatefulWidget { class Tpcagentlistbymode extends StatefulWidget {
final pageTitleName; final pageTitleName;
final mode; final mode;
...@@ -22,10 +24,17 @@ class Tpcagentlistbymode extends StatefulWidget { ...@@ -22,10 +24,17 @@ class Tpcagentlistbymode extends StatefulWidget {
} }
class _TpcagentlistbymodeState extends State<Tpcagentlistbymode> { class _TpcagentlistbymodeState extends State<Tpcagentlistbymode> {
Map _source = {ConnectivityResult.mobile: true};
final MyConnectivity _connectivity = MyConnectivity.instance;
@override @override
void initState() { void initState() {
// TODO: implement initState // TODO: implement initState
super.initState(); super.initState();
_connectivity.initialise();
_connectivity.myStream.listen((source) {
setState(() => _source = source);
});
WidgetsBinding.instance.addPostFrameCallback((timeStamp) { WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
var provider = Provider.of<Tpcagentsprovider>( var provider = Provider.of<Tpcagentsprovider>(
context, context,
...@@ -36,10 +45,30 @@ class _TpcagentlistbymodeState extends State<Tpcagentlistbymode> { ...@@ -36,10 +45,30 @@ class _TpcagentlistbymodeState extends State<Tpcagentlistbymode> {
}); });
} }
@override
void dispose() {
// TODO: implement dispose
super.dispose();
_connectivity.disposeStream();
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Consumer<Tpcagentsprovider>( switch (_source.keys.toList()[0]) {
case ConnectivityResult.mobile:
connection = 'Online';
break;
case ConnectivityResult.wifi:
connection = 'Online';
break;
case ConnectivityResult.none:
default:
connection = 'Offline';
}
return connection=="Online"?
Consumer<Tpcagentsprovider>(
builder: (context, provider, child) { builder: (context, provider, child) {
final tpcAgentsLists = provider.tpcAgentsList; final tpcAgentsLists = provider.tpcAgentsList;
return WillPopScope( return WillPopScope(
...@@ -297,6 +326,6 @@ class _TpcagentlistbymodeState extends State<Tpcagentlistbymode> { ...@@ -297,6 +326,6 @@ class _TpcagentlistbymodeState extends State<Tpcagentlistbymode> {
), ),
); );
}, },
); ):NoNetwork(context);
} }
} }
...@@ -171,6 +171,7 @@ class _PaymentdetailsState extends State<Paymentdetails> { ...@@ -171,6 +171,7 @@ class _PaymentdetailsState extends State<Paymentdetails> {
// To disable selecting this item // To disable selecting this item
child: InkWell( child: InkWell(
onTap: () { onTap: () {
Navigator.pop(context);
_addContactSheet(context); _addContactSheet(context);
}, },
child: Container( child: Container(
...@@ -242,6 +243,7 @@ class _PaymentdetailsState extends State<Paymentdetails> { ...@@ -242,6 +243,7 @@ class _PaymentdetailsState extends State<Paymentdetails> {
], ],
), ),
), ),
errorWidget(context, provider.selectContactError),
SizedBox(height: 10), SizedBox(height: 10),
Padding( Padding(
padding: const EdgeInsets.only(bottom: 5.0), padding: const EdgeInsets.only(bottom: 5.0),
...@@ -313,6 +315,7 @@ class _PaymentdetailsState extends State<Paymentdetails> { ...@@ -313,6 +315,7 @@ class _PaymentdetailsState extends State<Paymentdetails> {
], ],
), ),
), ),
errorWidget(context, provider.selectPaymentError),
SizedBox(height: 10), SizedBox(height: 10),
Padding( Padding(
padding: const EdgeInsets.only(bottom: 5.0), padding: const EdgeInsets.only(bottom: 5.0),
...@@ -335,7 +338,11 @@ class _PaymentdetailsState extends State<Paymentdetails> { ...@@ -335,7 +338,11 @@ class _PaymentdetailsState extends State<Paymentdetails> {
), ),
child: TextFormField( child: TextFormField(
controller: provider.Amountcontroller, controller: provider.Amountcontroller,
keyboardType: TextInputType.text, onChanged: (value) {
provider.selectAmountError = null;
},
keyboardType: TextInputType.numberWithOptions(),
textInputAction: TextInputAction.next,
decoration: InputDecoration( decoration: InputDecoration(
hintText: "Enter Amount", hintText: "Enter Amount",
hintStyle: TextStyle( hintStyle: TextStyle(
...@@ -350,6 +357,7 @@ class _PaymentdetailsState extends State<Paymentdetails> { ...@@ -350,6 +357,7 @@ class _PaymentdetailsState extends State<Paymentdetails> {
), ),
), ),
), ),
errorWidget(context, provider.selectAmountError),
SizedBox(height: 10), SizedBox(height: 10),
Padding( Padding(
padding: const EdgeInsets.only(bottom: 5.0), padding: const EdgeInsets.only(bottom: 5.0),
...@@ -373,6 +381,9 @@ class _PaymentdetailsState extends State<Paymentdetails> { ...@@ -373,6 +381,9 @@ class _PaymentdetailsState extends State<Paymentdetails> {
child: TextFormField( child: TextFormField(
controller: provider.Referencecontroller, controller: provider.Referencecontroller,
keyboardType: TextInputType.text, keyboardType: TextInputType.text,
onChanged: (value) {
provider.ReferenceError = null;
},
decoration: InputDecoration( decoration: InputDecoration(
hintText: "Enter Reference Number", hintText: "Enter Reference Number",
hintStyle: TextStyle( hintStyle: TextStyle(
...@@ -387,6 +398,7 @@ class _PaymentdetailsState extends State<Paymentdetails> { ...@@ -387,6 +398,7 @@ class _PaymentdetailsState extends State<Paymentdetails> {
), ),
), ),
), ),
errorWidget(context, provider.ReferenceError),
SizedBox(height: 10), SizedBox(height: 10),
InkResponse( InkResponse(
onTap: () { onTap: () {
...@@ -425,30 +437,38 @@ class _PaymentdetailsState extends State<Paymentdetails> { ...@@ -425,30 +437,38 @@ class _PaymentdetailsState extends State<Paymentdetails> {
mainAxisAlignment: mainAxisAlignment:
MainAxisAlignment.spaceBetween, MainAxisAlignment.spaceBetween,
children: [ children: [
Text( Expanded(
"${provider.imagePath}", flex: 5 ,
style: TextStyle( child: Text(
color: AppColors.semi_black, "${provider.imagePath}",
fontSize: 11, style: TextStyle(
fontWeight: FontWeight.w600, color: AppColors.semi_black,
fontSize: 11,
fontWeight: FontWeight.w600,
),
), ),
), ),
InkResponse( Expanded(
onTap: () { flex: 1,
provider.imagePicked = 0; child: InkResponse(
provider.imagePath = null; onTap: () {
provider.imageFilePath = null; provider.imagePicked = 0;
}, provider.imagePath = null;
child: SvgPicture.asset( provider.imageFilePath = null;
"assets/svg/ic_close.svg", },
width: 15, child: SvgPicture.asset(
height: 15, "assets/svg/ic_close.svg",
width: 15,
height: 15,
),
), ),
), ),
], ],
), ),
), ),
], ],
errorWidget(context, provider.imageError),
], ],
), ),
), ),
...@@ -458,29 +478,13 @@ class _PaymentdetailsState extends State<Paymentdetails> { ...@@ -458,29 +478,13 @@ class _PaymentdetailsState extends State<Paymentdetails> {
FloatingActionButtonLocation.centerFloat, FloatingActionButtonLocation.centerFloat,
floatingActionButton: InkWell( floatingActionButton: InkWell(
onTap: () { onTap: () {
print("clickedw");
if (provider.contactID == null) {
toast(context, "Please Select Contact");
return;
}
if (provider.paymentModeID == null) {
toast(context, "Please Select Payment Type");
return;
}
if (provider.image_picked == 0) {
toast(context, "Please add attachment");
return;
}
provider.PaymentUpdateAPI( provider.PaymentUpdateAPI(
context, context,
provider.Referencecontroller.text, provider.Referencecontroller.text,
provider.Amountcontroller.text, provider.Amountcontroller.text,
); );
Future.delayed(Duration(microseconds: 200), () {
if (provider.CollectionId != 0) {
showOTPSheetSheet(context);
}
});
}, },
child: Container( child: Container(
alignment: Alignment.center, alignment: Alignment.center,
...@@ -849,6 +853,14 @@ class _PaymentdetailsState extends State<Paymentdetails> { ...@@ -849,6 +853,14 @@ class _PaymentdetailsState extends State<Paymentdetails> {
provider.telController, provider.telController,
provider.emailController, provider.emailController,
]; ];
final Errors = [
provider.nameError,
provider.designationError,
provider.mobError,
provider.altMobError,
provider.telError,
provider.emailError,
];
return Padding( return Padding(
padding: EdgeInsets.only( padding: EdgeInsets.only(
bottom: bottom:
...@@ -904,7 +916,9 @@ class _PaymentdetailsState extends State<Paymentdetails> { ...@@ -904,7 +916,9 @@ class _PaymentdetailsState extends State<Paymentdetails> {
child: TextFormField( child: TextFormField(
controller: controllers[index], controller: controllers[index],
focusNode: focusNodes[index], focusNode: focusNodes[index],
onChanged: (value) {
Errors[index] = null;
},
maxLength: maxLength:
[ [
"Mobile Number", "Mobile Number",
...@@ -915,6 +929,7 @@ class _PaymentdetailsState extends State<Paymentdetails> { ...@@ -915,6 +929,7 @@ class _PaymentdetailsState extends State<Paymentdetails> {
? 10 ? 10
: 998895646546561356, : 998895646546561356,
maxLines: 1, maxLines: 1,
keyboardType: keyboardType:
[ [
"Mobile Number", "Mobile Number",
...@@ -944,6 +959,7 @@ class _PaymentdetailsState extends State<Paymentdetails> { ...@@ -944,6 +959,7 @@ class _PaymentdetailsState extends State<Paymentdetails> {
), ),
), ),
), ),
errorWidget(context, Errors[index])
], ],
); );
}), }),
...@@ -956,12 +972,9 @@ class _PaymentdetailsState extends State<Paymentdetails> { ...@@ -956,12 +972,9 @@ class _PaymentdetailsState extends State<Paymentdetails> {
widget.genId == "" widget.genId == ""
? widget.referenceID ? widget.referenceID
: widget.genId, : widget.genId,
provider.nameController.text, widget.accountName,
provider.designationController.text, widget.referenceID,
provider.mobController.text, widget.genId,
provider.altMobController.text,
provider.telController.text,
provider.emailController.text,
); );
}, },
child: Container( child: Container(
......
import 'dart:io'; import 'dart:io';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart'; import 'package:flutter_svg/svg.dart';
import 'package:generp/Notifiers/ServiceEngineerDashboardProvider.dart'; import 'package:generp/Notifiers/ServiceEngineerDashboardProvider.dart';
import 'package:generp/Utils/app_colors.dart'; import 'package:generp/Utils/app_colors.dart';
import 'package:generp/Utils/commonServices.dart';
import 'package:generp/Utils/commonWidgets.dart'; import 'package:generp/Utils/commonWidgets.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:generp/screens/screensExports.dart'; import 'package:generp/screens/screensExports.dart';
...@@ -17,9 +19,17 @@ class Serviceengineerdashboard extends StatefulWidget { ...@@ -17,9 +19,17 @@ class Serviceengineerdashboard extends StatefulWidget {
} }
class _ServiceengineerdashboardState extends State<Serviceengineerdashboard> { class _ServiceengineerdashboardState extends State<Serviceengineerdashboard> {
Map _source = {ConnectivityResult.mobile: true};
final MyConnectivity _connectivity = MyConnectivity.instance;
@override @override
void initState() { void initState() {
super.initState(); super.initState();
_connectivity.initialise();
_connectivity.myStream.listen((source) {
setState(() => _source = source);
});
WidgetsBinding.instance.addPostFrameCallback((_) { WidgetsBinding.instance.addPostFrameCallback((_) {
var serviceProvider = Provider.of<Serviceengineerdashboardprovider>( var serviceProvider = Provider.of<Serviceengineerdashboardprovider>(
context, context,
...@@ -28,15 +38,32 @@ class _ServiceengineerdashboardState extends State<Serviceengineerdashboard> { ...@@ -28,15 +38,32 @@ class _ServiceengineerdashboardState extends State<Serviceengineerdashboard> {
serviceProvider.LoadTechnicianDashboard(context); serviceProvider.LoadTechnicianDashboard(context);
}); });
} }
@override
void dispose() {
// TODO: implement dispose
super.dispose();
_connectivity.disposeStream();
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Platform.isAndroid switch (_source.keys.toList()[0]) {
case ConnectivityResult.mobile:
connection = 'Online';
break;
case ConnectivityResult.wifi:
connection = 'Online';
break;
case ConnectivityResult.none:
default:
connection = 'Offline';
}
return (connection=="Online")? Platform.isAndroid
? WillPopScope( ? WillPopScope(
onWillPop: () => onBackPressed(context), onWillPop: () => onBackPressed(context),
child: SafeArea(top: false, bottom: true, child: _scaffold(context)), child: SafeArea(top: false, bottom: true, child: _scaffold(context)),
) )
: _scaffold(context); : _scaffold(context):NoNetwork(context);
} }
Widget _scaffold(BuildContext context) { Widget _scaffold(BuildContext context) {
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment