generate pagination done

dev_ankit^2
Priya Chetiwal 2025-02-07 15:01:41 +05:30
parent 5be06c49ec
commit 039e7be559
6 changed files with 359 additions and 291 deletions

View File

@ -333,10 +333,6 @@ class GenerateFrightBill extends StatelessWidget {
child: Center(child: Text(controller.errorMessage.value))); child: Center(child: Text(controller.errorMessage.value)));
} }
if (controller.grnDetails.isEmpty) { if (controller.grnDetails.isEmpty) {
return SizedBox( return SizedBox(
height: controller.isFilterVisibleGenerateFreight.value height: controller.isFilterVisibleGenerateFreight.value
? MediaQuery.sizeOf(context).height * 0.4 ? MediaQuery.sizeOf(context).height * 0.4
@ -348,8 +344,13 @@ class GenerateFrightBill extends StatelessWidget {
); );
} }
return Column( return Column(
mainAxisAlignment: MainAxisAlignment.end, children: [
crossAxisAlignment: CrossAxisAlignment.end, SizedBox(
width: MediaQuery.sizeOf(context).width,
height: controller.isFilterVisibleGenerateFreight.value == true
? MediaQuery.of(context).size.height * 0.3
: MediaQuery.of(context).size.height * 0.64,
child: Column(
children: [ children: [
Container( Container(
padding: EdgeInsets.symmetric(horizontal: 10), padding: EdgeInsets.symmetric(horizontal: 10),
@ -380,7 +381,8 @@ class GenerateFrightBill extends StatelessWidget {
} else { } else {
CommonAlertDialog.showDialog( CommonAlertDialog.showDialog(
dismissable: false, dismissable: false,
message: "Are you sure want to\nsave this?", message:
"Are you sure want to\nsave this?",
positiveText: "Save", positiveText: "Save",
negativeText: "Cancel", negativeText: "Cancel",
positiveBtCallback: () { positiveBtCallback: () {
@ -398,10 +400,6 @@ class GenerateFrightBill extends StatelessWidget {
), ),
Container( Container(
margin: EdgeInsets.only(bottom: 16, top: 16), margin: EdgeInsets.only(bottom: 16, top: 16),
height:
controller.isFilterVisibleGenerateFreight.value == true
? MediaQuery.of(context).size.height * 0.3
: MediaQuery.of(context).size.height * 0.64,
child: RawScrollbar( child: RawScrollbar(
thumbColor: AppColors.clrD9, thumbColor: AppColors.clrD9,
radius: Radius.circular(2), radius: Radius.circular(2),
@ -439,7 +437,8 @@ class GenerateFrightBill extends StatelessWidget {
BorderSide(color: AppColors.clrGrey), BorderSide(color: AppColors.clrGrey),
verticalInside: verticalInside:
BorderSide(color: AppColors.clrGrey), BorderSide(color: AppColors.clrGrey),
bottom: BorderSide(color: AppColors.clrGrey), bottom:
BorderSide(color: AppColors.clrGrey),
left: BorderSide(color: AppColors.clrGrey), left: BorderSide(color: AppColors.clrGrey),
right: BorderSide(color: AppColors.clrGrey), right: BorderSide(color: AppColors.clrGrey),
top: BorderSide(color: AppColors.clrGrey), top: BorderSide(color: AppColors.clrGrey),
@ -449,14 +448,16 @@ class GenerateFrightBill extends StatelessWidget {
label: Transform.scale( label: Transform.scale(
scale: 0.80, scale: 0.80,
child: Checkbox( child: Checkbox(
value: controller.selectAllField.value, value:
controller.selectAllField.value,
onChanged: (value) { onChanged: (value) {
controller.selectAll(value ?? false); controller
.selectAll(value ?? false);
}, },
activeColor: AppColors.primaryClr, activeColor: AppColors.primaryClr,
checkColor: Colors.white, checkColor: Colors.white,
materialTapTargetSize: MaterialTapTargetSize materialTapTargetSize:
.shrinkWrap, MaterialTapTargetSize.shrinkWrap,
), ),
), ),
), ),
@ -478,7 +479,8 @@ class GenerateFrightBill extends StatelessWidget {
], ],
rows: List<DataRow>.generate( rows: List<DataRow>.generate(
controller.grnDetails.length, (index) { controller.grnDetails.length, (index) {
final stoppage = controller.grnDetails[index]; final stoppage =
controller.grnDetails[index];
return DataRow( return DataRow(
selected: stoppage.isSelected, selected: stoppage.isSelected,
cells: [ cells: [
@ -494,12 +496,14 @@ class GenerateFrightBill extends StatelessWidget {
activeColor: AppColors.primaryClr, activeColor: AppColors.primaryClr,
checkColor: Colors.white, checkColor: Colors.white,
materialTapTargetSize: materialTapTargetSize:
MaterialTapTargetSize.shrinkWrap, MaterialTapTargetSize
.shrinkWrap,
), ),
), ),
), ),
// editableCell(index, "0${index + 1}"), // editableCell(index, "0${index + 1}"),
editableCell(index, stoppage.grnNo ?? ""), editableCell(
index, stoppage.grnNo ?? ""),
editableCell( editableCell(
index, stoppage.plantCode ?? ""), index, stoppage.plantCode ?? ""),
editableCell( editableCell(
@ -513,20 +517,26 @@ class GenerateFrightBill extends StatelessWidget {
index, stoppage.fromLocation ?? ""), index, stoppage.fromLocation ?? ""),
editableCell( editableCell(
index, stoppage.vehicleNo ?? ""), index, stoppage.vehicleNo ?? ""),
editableCell(index, stoppage.lrNo ?? ""), editableCell(
index, stoppage.lrNo ?? ""),
editableCell( editableCell(
index, index,
DateFormat('yyyy-MM-dd').format( DateFormat('yyyy-MM-dd').format(
stoppage.lrDate ?? DateTime.now())), stoppage.lrDate ??
DateTime.now())),
editableCell(index, editableCell(index,
stoppage.dispQty?.toString() ?? ""), stoppage.dispQty?.toString() ?? ""),
editableCell(index, editableCell(index,
stoppage.netQty?.toString() ?? ""), stoppage.netQty?.toString() ?? ""),
editableCell(index, editableCell(
stoppage.billingQty?.toString() ?? ""), index,
stoppage.billingQty?.toString() ??
""),
editableCell(index, "-"), editableCell(index, "-"),
editableCell(index, editableCell(
stoppage.freightRate?.toString() ?? ""), index,
stoppage.freightRate?.toString() ??
""),
editableCell( editableCell(
index, index,
stoppage.shipmentCost?.toString() ?? stoppage.shipmentCost?.toString() ??
@ -541,13 +551,19 @@ class GenerateFrightBill extends StatelessWidget {
), ),
), ),
), ),
CustomPagination( ],
currentPage: controller.currentPageViewFreight.value + 1, ),
totalPages: controller.totalPagesViewFreight.value, ),
Padding(
padding: EdgeInsets.only(bottom: 4),
child: CustomPagination(
currentPage: controller.currentPageGenerateFreight.value + 1,
totalPages: controller.totalPagesGenerateFreight.value,
onPageChanged: (page) { onPageChanged: (page) {
controller.viewFreightView(page: page - 1); controller.postData(page: page - 1);
}, },
), ),
)
], ],
); );
}), }),

View File

@ -524,13 +524,13 @@ class PendingGeneration extends StatelessWidget {
], ],
); );
}), }),
// CustomPagination( CustomPagination(
// currentPage: controller.currentPage.value, currentPage: controller.currentPagePendingFreight.value,
// totalPages: controller.totalPages.value, totalPages: controller.totalPagesPendingFreight.value,
// onPageChanged: (int page) { onPageChanged: (int page) {
// // controller.onPageChanged(page); controller.grnPending(page: page -1);
// }, },
// ), ),
], ],
); );
} }

View File

@ -161,8 +161,7 @@ class _TransportViewState extends State<TransportView> {
child: Column( child: Column(
children: [ children: [
Container( Container(
color: Colors.white, // padding: EdgeInsets.only(bottom: 16),
padding: EdgeInsets.only(bottom: 16),
margin: EdgeInsets.all(16), margin: EdgeInsets.all(16),
child: Column( child: Column(
children: [ children: [
@ -258,26 +257,35 @@ class _TransportViewState extends State<TransportView> {
), ),
), ),
Obx( Obx(
() => SimpleDropdown( () => ctrl.selectedUser.value == 0
? SimpleDropdown(
onSelected: (newValue) { onSelected: (newValue) {
ctrl.selectedDropdownItemViewFreight.value = newValue; ctrl.selectedDropdownItemGenerateFreight.value =
newValue;
ctrl.postData();
},
items: ctrl.selectElementSize,
selectedItem:
ctrl.selectedDropdownItemGenerateFreight.value,
)
: ctrl.selectedUser.value == 1
? SimpleDropdown(
onSelected: (newValue) {
ctrl.selectedDropdownItemViewFreight
.value = newValue;
ctrl.viewFreightView(); ctrl.viewFreightView();
}, },
items: ctrl.selectElementSize, items: ctrl.selectElementSize,
selectedItem: ctrl.selectedDropdownItemViewFreight.value, selectedItem: ctrl
.selectedDropdownItemViewFreight.value,
)
: ctrl.selectedUser.value == 2
? Text('data')
: Text('data'),
), ),
SizedBox(
width: 10,
), ),
// Obx(() => SimpleDropdown<int>(
// items: [1, 2, 3, 4],
// selectedItem: ctrl. selectedDropdownItem.value, // Bind external state
// onSelected: (val) => ctrl. selectedDropdownItem.value = val,
// width: 150,
// borderClr: Colors.blue,
// )),
SizedBox(width: 10,),
], ],
), ),
), ),

View File

@ -153,9 +153,10 @@ class TransportController extends GetxController {
getInvoiceView(); getInvoiceView();
super.onInit(); super.onInit();
} }
Rxn<int> selectedDropdownItemViewFreight = Rxn<int>(); Rxn<int> selectedDropdownItemViewFreight = Rxn<int>();
Rxn<int> selectedDropdownItemPendingFreight = Rxn<int>();
Rxn<int> selectedDropdownItemGenerateFreight = Rxn<int>();
refreshApis() { refreshApis() {
getFreightBills(); getFreightBills();
@ -164,6 +165,8 @@ class TransportController extends GetxController {
getSubFreightBillsView(); getSubFreightBillsView();
postData(); postData();
selectedDropdownItemViewFreight.value = null; selectedDropdownItemViewFreight.value = null;
selectedDropdownItemPendingFreight.value = null;
selectedDropdownItemGenerateFreight.value = null;
} }
getInvoiceView() async { getInvoiceView() async {
@ -220,7 +223,12 @@ class TransportController extends GetxController {
var grnPendingLoader = false.obs; var grnPendingLoader = false.obs;
var errorMessage = ''.obs; var errorMessage = ''.obs;
postData() async { // for Generate
var totalElementsGenerateFreight = 0.obs;
RxInt currentPageGenerateFreight = 1.obs;
RxInt totalPagesGenerateFreight = 3.obs;
postData({int page = 0}) async {
try { try {
isLoading.value = true; isLoading.value = true;
Map<String, String> requestBody = { Map<String, String> requestBody = {
@ -231,18 +239,24 @@ class TransportController extends GetxController {
"grnFromDate": "", "grnFromDate": "",
"grnToDate": "" "grnToDate": ""
}; };
var response = await PostRequests.addFreightBill(requestBody); var response = await PostRequests.addFreightBill(
page: page,
size: selectedDropdownItemGenerateFreight.value ?? 1,
requestBody: requestBody);
if (response != null) { if (response != null) {
List<Content> flattenedContent = List<Content> flattenedContent =
response.content!.expand((list) => list).toList(); response.content!.expand((list) => list).toList();
grnDetails.assignAll(flattenedContent); grnDetails.assignAll(flattenedContent);
totalPagesGenerateFreight.value = response.totalPages ?? 0;
totalElementsGenerateFreight.value = response.totalElements ?? 0;
currentPageGenerateFreight.value = page;
} }
} finally { } finally {
isLoading.value = false; isLoading.value = false;
} }
} }
void displayFilteredData() async { void displayFilteredData({int page = 0}) async {
try { try {
isLoading.value = true; isLoading.value = true;
Map<String, String> requestBody = { Map<String, String> requestBody = {
@ -254,7 +268,10 @@ class TransportController extends GetxController {
"grnToDate": "" "grnToDate": ""
}; };
var response = await PostRequests.addFreightBill(requestBody); var response = await PostRequests.addFreightBill(
page: page,
size: selectedDropdownItemGenerateFreight.value ?? 4,
requestBody: requestBody);
if (response != null) { if (response != null) {
List<Content> flattenedContent = List<Content> flattenedContent =
response.content!.expand((list) => list).toList(); response.content!.expand((list) => list).toList();
@ -272,12 +289,14 @@ class TransportController extends GetxController {
selectTransactionTypeFreight.value.toUpperCase()); selectTransactionTypeFreight.value.toUpperCase());
}).toList(); }).toList();
print("Filtered Data: ${filteredData.length}"); if (page == 0) {
grnDetails.assignAll(flattenedContent);
grnDetails.assignAll(filteredData); } else {
grnDetails.addAll(flattenedContent);
print("✅ Filtered Data: ${filteredData.length} items displayed."); }
print("✅ Filtered Data: ${grnDetails.length} items displayed."); totalPagesGenerateFreight.value = response.totalPages ?? 0;
totalElementsGenerateFreight.value = response.totalElements ?? 0;
currentPageGenerateFreight.value = page;
} else { } else {
print("❌ No response from API."); print("❌ No response from API.");
} }
@ -411,13 +430,6 @@ class TransportController extends GetxController {
} }
RxString selectedPlant = "".obs; RxString selectedPlant = "".obs;
List plantList = [
"Plant 1",
"Plant 2",
"Plant 3",
"Plant 4",
"Plant 5",
];
RxString selectedFreight = "".obs; RxString selectedFreight = "".obs;
addFreightBill() async { addFreightBill() async {
@ -457,22 +469,35 @@ class TransportController extends GetxController {
////////////////////////////////////////// PRIYA /////////////////////////////////////////////// ////////////////////////////////////////// PRIYA ///////////////////////////////////////////////
var freightBillData = <FreightBill>[].obs; var freightBillData = <FreightBill>[].obs;
var totalElementsViewFreight = 0.obs;
var pageSize = 2.obs; var pageSize = 2.obs;
var sortField = "grn_date".obs; var sortField = "grn_date".obs;
var sortDirection = "desc".obs; var sortDirection = "desc".obs;
// view freight
var totalElementsViewFreight = 0.obs;
RxInt currentPageViewFreight = 1.obs; RxInt currentPageViewFreight = 1.obs;
RxInt totalPagesViewFreight = 3.obs; RxInt totalPagesViewFreight = 3.obs;
final int limit = 10;
RxList selectElementSize = [
4,
8,
12,
16,
20,
].obs;
// for pending
var totalElementsPendingFreight = 0.obs;
RxInt currentPagePendingFreight = 1.obs;
RxInt totalPagesPendingFreight = 3.obs;
final int limit = 10;
// RxList selectElementSize = [
// 4,
// 8,
// 12,
// 16,
// 20,
// ].obs;
RxList selectElementSize = [
1,
2,
3,
4,
5,
].obs;
viewFreightView({int page = 0}) async { viewFreightView({int page = 0}) async {
try { try {
freightViewLoader.value = true; freightViewLoader.value = true;
@ -488,7 +513,9 @@ class TransportController extends GetxController {
}; };
var response = await PostRequests.viewFreightBill( var response = await PostRequests.viewFreightBill(
page: page, size: selectedDropdownItemViewFreight.value ?? 4, requestBody: requestBody); page: page,
size: selectedDropdownItemViewFreight.value ?? 4,
requestBody: requestBody);
if (response != null) { if (response != null) {
List<FreightBill> flattenedContent = List<FreightBill> flattenedContent =
@ -514,7 +541,7 @@ class TransportController extends GetxController {
var grnPendingData = <GrnPending>[].obs; var grnPendingData = <GrnPending>[].obs;
grnPending() async { grnPending({int page = 0}) async {
try { try {
grnPendingLoader.value = true; grnPendingLoader.value = true;
@ -528,12 +555,17 @@ class TransportController extends GetxController {
}; };
var response = await PostRequests.grnPending( var response = await PostRequests.grnPending(
requestBody, page: page,
size: selectedDropdownItemPendingFreight.value ?? 4,
requestBody: requestBody,
); );
if (response != null) { if (response != null) {
List<GrnPending> flattenedContent = List<GrnPending> flattenedContent =
response.content!.expand((list) => list).toList(); response.content!.expand((list) => list).toList();
grnPendingData.assignAll(flattenedContent); grnPendingData.assignAll(flattenedContent);
totalPagesPendingFreight.value = response.totalPages ?? 0;
totalElementsPendingFreight.value = response.totalElements ?? 0;
currentPagePendingFreight.value = page;
print( print(
'response from pending tab${response.first.toString()} and ${flattenedContent.length} and ${grnPendingData.value[0].codeValue} and ${grnPendingData.value[0].plantCode} and ${grnPendingData.value[0].materialCode}'); 'response from pending tab${response.first.toString()} and ${flattenedContent.length} and ${grnPendingData.value[0].codeValue} and ${grnPendingData.value[0].plantCode} and ${grnPendingData.value[0].materialCode}');
} }
@ -542,7 +574,7 @@ class TransportController extends GetxController {
} }
} }
void displayFilteredDataFromViewFreight({int page = 0, int size = 4}) async { void displayFilteredDataFromViewFreight({int page = 0}) async {
try { try {
freightViewLoader.value = true; freightViewLoader.value = true;
@ -556,12 +588,10 @@ class TransportController extends GetxController {
"grnToDate": "", "grnToDate": "",
}; };
print(
"🔎 Filter Request - Page: $page, Size: $size, Plant: ${selectPlantViewFreight.value}, "
"Product: ${selectProductViewFreight.value}, Freight Bill: ${selectFreightBillValidate.value}");
var response = await PostRequests.viewFreightBill( var response = await PostRequests.viewFreightBill(
page: page, size: size, requestBody: requestBody); // Pass pagination page: page,
size: selectedDropdownItemViewFreight.value ?? 4,
requestBody: requestBody); // Pass pagination
if (response != null && response.content != null) { if (response != null && response.content != null) {
List<FreightBill> flattenedContent = List<FreightBill> flattenedContent =
@ -594,7 +624,7 @@ class TransportController extends GetxController {
} }
} }
void displayFilteredDataFromPending() async { void displayFilteredDataFromPending({int page = 0}) async {
try { try {
isLoading.value = true; isLoading.value = true;
Map<String, String> requestBody = { Map<String, String> requestBody = {
@ -606,7 +636,11 @@ class TransportController extends GetxController {
"grnToDate": "" "grnToDate": ""
}; };
var response = await PostRequests.grnPending(requestBody); var response = await PostRequests.grnPending(
page: page,
size: selectedDropdownItemPendingFreight.value ?? 4,
requestBody: requestBody,
);
if (response != null) { if (response != null) {
List<GrnPending> flattenedContent = List<GrnPending> flattenedContent =
response.content!.expand((list) => list).toList(); response.content!.expand((list) => list).toList();
@ -621,9 +655,16 @@ class TransportController extends GetxController {
selectTransactionTypeFreight.value.toUpperCase()); selectTransactionTypeFreight.value.toUpperCase());
}).toList(); }).toList();
print("pending Data grnPendingData: ${filteredData.length}"); if (page == 0) {
grnPendingData.assignAll(flattenedContent);
} else {
grnPendingData.addAll(flattenedContent);
}
grnPendingData.assignAll(filteredData); // Update pagination details
totalPagesPendingFreight.value = response.totalPages ?? 0;
totalElementsPendingFreight.value = response.totalElements ?? 0;
currentPagePendingFreight.value = page;
print( print(
"✅ pending Data: ${filteredData.length} items displayed pending."); "✅ pending Data: ${filteredData.length} items displayed pending.");

View File

@ -2,7 +2,7 @@ class ApiUrls {
ApiUrls._(); ApiUrls._();
static const String baseUrl = "http://46.28.44.130:9092/"; static const String baseUrl = "http://46.28.44.130:9092/";
static const addFreightBill = static const addFreightBill =
'bill/grndetails?page=0&size=20&sort=grn_date,desc'; 'bill/grndetails';
static const getFreightBills = 'bill/dropdown'; static const getFreightBills = 'bill/dropdown';
static const getAllPayments = "http://46.28.44.130:9092/invoice/getPayments"; static const getAllPayments = "http://46.28.44.130:9092/invoice/getPayments";
static const generateFreightBill = static const generateFreightBill =
@ -32,7 +32,7 @@ class ApiUrls {
static const userTypeDetails = static const userTypeDetails =
"http://46.28.44.130:9093/api/user-types/usertypedetails?page=0&size=15&sort=last_updated_on,desc"; "http://46.28.44.130:9093/api/user-types/usertypedetails?page=0&size=15&sort=last_updated_on,desc";
static const grnPendingDetails = static const grnPendingDetails =
"http://46.28.44.130:9092/bill/grndetailsPanding?page=0&size=20&sort=grn_date,desc"; "http://46.28.44.130:9092/bill/grndetailsPanding?page=";
static const viewSubDetailsOfViewFreightBill = "http://46.28.44.130:9092/bill/grndetailsByFreightBill?freightBillCode="; static const viewSubDetailsOfViewFreightBill = "http://46.28.44.130:9092/bill/grndetailsByFreightBill?freightBillCode=";
static const getInvoiceDetails = "http://46.28.44.130:9092/invoice/getInvoice"; static const getInvoiceDetails = "http://46.28.44.130:9092/invoice/getInvoice";
} }

View File

@ -20,12 +20,17 @@ import 'ApiUrls.dart';
class PostRequests { class PostRequests {
PostRequests._(); PostRequests._();
static Future<GenerateFreightBills?> addFreightBill( static Future<GenerateFreightBills?> addFreightBill({
int page = 0,
int size = 15,
String sort = 'last_updated_on,desc',
Map<String, dynamic>? requestBody,
}
Map<String, String> requestBody) async { ) async {
var apiResponse = var apiResponse =
await RemoteService.simplePost(requestBody, ApiUrls.addFreightBill); await RemoteService.simplePost(requestBody ?? {},'${ApiUrls.addFreightBill}?page=$page&size=$size&sort=$sort'
);
if (apiResponse != null) { if (apiResponse != null) {
return generateFreightBillsFromJson(apiResponse.response!); return generateFreightBillsFromJson(apiResponse.response!);
@ -34,8 +39,6 @@ class PostRequests {
} }
} }
static Future<GenerateBillsResModel?> freightBill( static Future<GenerateBillsResModel?> freightBill(
List<Map<String, dynamic>> requestBody) async { List<Map<String, dynamic>> requestBody) async {
var apiResponse = var apiResponse =
@ -83,6 +86,7 @@ class PostRequests {
return null; return null;
} }
} }
static Future<EditUserResModel?> editUser( static Future<EditUserResModel?> editUser(
Map<String, String> requestBody, String id) async { Map<String, String> requestBody, String id) async {
var apiResponse = var apiResponse =
@ -96,23 +100,13 @@ class PostRequests {
} }
} }
static Future<ViewFreightBillResModel?> viewFreightBillF(
Map<String, String> requestBody,
) async {
var apiResponse = await RemoteService.postUser(requestBody,
'${ApiUrls.viewFreightBill}');
if (apiResponse != null) {
return viewFreightBillResModelFromJson(apiResponse.response!);
} else {
return null;
}
}
static Future<ViewFreightBillResModel?> viewFreightBill({ static Future<ViewFreightBillResModel?> viewFreightBill({
int page = 0, int page = 0,
int size = 15, int size = 15,
String sort = 'last_updated_on,desc', String sort = 'last_updated_on,desc',
Map<String, String>? requestBody, Map<String, dynamic>? requestBody,
}) async { }) async {
// Construct dynamic URL with query parameters // Construct dynamic URL with query parameters
String url = 'http://46.28.44.130:9092/bill/freightbill' String url = 'http://46.28.44.130:9092/bill/freightbill'
@ -121,8 +115,7 @@ class PostRequests {
try { try {
var apiResponse = await RemoteService.postUser( var apiResponse = await RemoteService.postUser(
requestBody ?? {}, // Use empty map if no request body requestBody ?? {}, // Use empty map if no request body
url url);
);
if (apiResponse == null) return null; if (apiResponse == null) return null;
if (apiResponse.response == null || apiResponse.response!.isEmpty) { if (apiResponse.response == null || apiResponse.response!.isEmpty) {
@ -224,16 +217,26 @@ class PostRequests {
} }
} }
static Future<GrnPendingBillsResModel?> grnPending( static Future<GrnPendingBillsResModel?> grnPending({
Map<String, String> requestBody) async { int page = 0,
var apiResponse = int size = 15,
await RemoteService.postUser(requestBody, ApiUrls.grnPendingDetails); String sort = 'last_updated_on,desc',
Map<String, dynamic>? requestBody,
}) async {
String url = 'http://46.28.44.130:9092/bill/grndetailsPanding'
'?page=$page&size=$size&sort=$sort';
var apiResponse = await RemoteService.postUser(
requestBody ?? {}, url
);
print('response from pending ${apiResponse?.response.toString()} and ${requestBody.toString()}');
if (apiResponse != null) { if (apiResponse != null) {
return grnPendingBillsResModelFromJson(apiResponse.response!); return grnPendingBillsResModelFromJson(apiResponse.response!);
} else { } else {
return null; return null;
} }
} }
static Future<GetInvoiceResponse?> getInvoice( static Future<GetInvoiceResponse?> getInvoice(
Map<String, String> requestBody) async { Map<String, String> requestBody) async {
var apiResponse = var apiResponse =