merge with priya

dev_branch
Priya Chetiwal 2025-02-07 01:44:34 +05:30
parent 4817694d0e
commit da5e0fedbb
7 changed files with 840 additions and 0 deletions

View File

@ -0,0 +1,37 @@
// To parse this JSON data, do
//
// final statusResModel = statusResModelFromJson(jsonString);
import 'dart:convert';
StatusResModel statusResModelFromJson(String str) => StatusResModel.fromJson(json.decode(str));
String statusResModelToJson(StatusResModel data) => json.encode(data.toJson());
class StatusResModel {
final int? status;
final String? message;
final List<dynamic>? data;
final DateTime? timestamp;
StatusResModel({
this.status,
this.message,
this.data,
this.timestamp,
});
factory StatusResModel.fromJson(Map<String, dynamic> json) => StatusResModel(
status: json["status"],
message: json["message"],
data: json["data"] == null ? [] : List<dynamic>.from(json["data"]!.map((x) => x)),
timestamp: json["timestamp"] == null ? null : DateTime.parse(json["timestamp"]),
);
Map<String, dynamic> toJson() => {
"status": status,
"message": message,
"data": data == null ? [] : List<dynamic>.from(data!.map((x) => x)),
"timestamp": timestamp?.toIso8601String(),
};
}

View File

@ -0,0 +1,10 @@
import 'package:flutter/cupertino.dart';
class CancelledView extends StatelessWidget {
const CancelledView({super.key});
@override
Widget build(BuildContext context) {
return Column();
}
}

View File

@ -0,0 +1,13 @@
import 'package:flutter/cupertino.dart';
class CcnView extends StatelessWidget {
const CcnView({super.key});
@override
Widget build(BuildContext context) {
return Column(
);
}
}

View File

@ -0,0 +1,85 @@
import 'package:flutter/cupertino.dart';
import 'package:get/get.dart';
import 'package:shayog/components/common/common_button.dart';
import 'package:shayog/components/common/common_model.dart';
import '../../../../../../../services/network/get_requests.dart';
import '../../../../../../../services/network/post_request.dart';
import '../../../model/freightbill_res_model.dart';
import '../model/payment_res_model.dart';
class PaymentViewCtrl extends GetxController {
final ScrollController horizontalScrollController = ScrollController();
final ScrollController verticalScrollController = ScrollController();
var product = <Prodect>[].obs;
var plant = <Plant>[].obs;
var freightBill = <String>[].obs;
var isLoading = false.obs;
var isPayment = false.obs;
RxString selectedPlant = "Select Plant".obs;
RxString selectedFreightBill =
"Select Bill No.".obs;
RxString selectedProduct =
"Select Product Name".obs;
resetDropdowns() {
selectedPlant.value = "Select Plant";
selectedFreightBill.value = "Select Bill No.";
selectedProduct.value = "Select Product Name";
getPayments();
payments.refresh();
}
@override
void onInit() {
super.onInit();
getPaymentSearchData();
getPayments();
}
getPaymentSearchData() async {
try {
isLoading.value = true;
var response = await GetRequests.getFreightBill();
if (response != null) {
plant.assignAll(response.plant ?? []);
product.assignAll(response.prodect ?? []);
freightBill.assignAll(response.freightBill?.map((e) => e.toString()) ?? []);
}
} finally {
isLoading.value = false;
}
}
var payments = <Payment>[].obs;
getPayments() async {
try {
isPayment.value = true;
Map<String, String> requestBody = {
"plant_id":
selectedPlant.value == "Select Plant" ? "" : selectedPlant.value,
"freightbill_id": selectedFreightBill.value == "Select Bill No."
? ""
: selectedFreightBill.value,
"material_id": selectedProduct.value == "Select Product Name"
? ""
: selectedProduct.value,
"freightbill_fromdate": "",
"freightbill_todate": ""
};
var response = await PostRequests.getAllPayments(requestBody);
if (response != null) {
List<Payment> flattenedContent =
response.content!.expand((list) => list).toList();
payments.assignAll(flattenedContent);
}
} finally {
isPayment.value = false;
}
}
}

View File

@ -0,0 +1,337 @@
// To parse this JSON data, do
//
// final paymentResModel = paymentResModelFromJson(jsonString);
import 'dart:convert';
PaymentResModel paymentResModelFromJson(String str) => PaymentResModel.fromJson(json.decode(str));
String paymentResModelToJson(PaymentResModel data) => json.encode(data.toJson());
class PaymentResModel {
final List<List<Payment>>? content;
final Pageable? pageable;
final int? totalPages;
final int? totalElements;
final bool? last;
final int? size;
final int? number;
final Sort? sort;
final int? numberOfElements;
final bool? first;
final bool? empty;
PaymentResModel({
this.content,
this.pageable,
this.totalPages,
this.totalElements,
this.last,
this.size,
this.number,
this.sort,
this.numberOfElements,
this.first,
this.empty,
});
factory PaymentResModel.fromJson(Map<String, dynamic> json) => PaymentResModel(
content: json["content"] == null ? [] : List<List<Payment>>.from(json["content"]!.map((x) => List<Payment>.from(x.map((x) => Payment.fromJson(x))))),
pageable: json["pageable"] == null ? null : Pageable.fromJson(json["pageable"]),
totalPages: json["totalPages"],
totalElements: json["totalElements"],
last: json["last"],
size: json["size"],
number: json["number"],
sort: json["sort"] == null ? null : Sort.fromJson(json["sort"]),
numberOfElements: json["numberOfElements"],
first: json["first"],
empty: json["empty"],
);
Map<String, dynamic> toJson() => {
"content": content == null ? [] : List<dynamic>.from(content!.map((x) => List<dynamic>.from(x.map((x) => x.toJson())))),
"pageable": pageable?.toJson(),
"totalPages": totalPages,
"totalElements": totalElements,
"last": last,
"size": size,
"number": number,
"sort": sort?.toJson(),
"numberOfElements": numberOfElements,
"first": first,
"empty": empty,
};
}
class Payment {
final int? plantId;
final String? plantCode;
final String? plantDesc;
final int? materialId;
final String? materialCode;
final dynamic uom;
final double? shipmentNetQty;
final double? shipmentNetCost;
final int? igstAmount;
final double? sgstAmount;
final double? cgstAmount;
final double? totalGst;
final double? shipmentGrossCost;
final int? invoiceId;
final dynamic transporterInvoiceNo;
final dynamic transporterInvoiceNoDate;
final int? freightbillId;
final String? freightbillCode;
final double? shipmentCost;
final DateTime? shipmentCostDate;
final double? gstAmount;
final dynamic paymentAmount;
final dynamic paymentDate;
final dynamic paymentCaseno;
final String? miroDocument;
final DateTime? miroDocumentDate;
final String? sapReferenceno;
final dynamic utr1No;
final dynamic utr2No;
final dynamic utr3No;
final dynamic utr4No;
final dynamic utr5No;
final dynamic utr1PaymentAmount;
final dynamic utr2PaymentAmount;
final dynamic utr3PaymentAmount;
final dynamic utr4PaymentAmount;
final dynamic utr5PaymentAmount;
final dynamic utr1Date;
final dynamic utr2Date;
final dynamic utr3Date;
final dynamic utr4Date;
final dynamic utr5Date;
final dynamic singedDocLink;
final dynamic signedDocUploadedOn;
final dynamic signedDocUploadedBy;
final String? status;
final int? statusId;
final int? createdBy;
final int? lastUpdatedBy;
final DateTime? lastUpdatedOn;
Payment({
this.plantId,
this.plantCode,
this.plantDesc,
this.materialId,
this.materialCode,
this.uom,
this.shipmentNetQty,
this.shipmentNetCost,
this.igstAmount,
this.sgstAmount,
this.cgstAmount,
this.totalGst,
this.shipmentGrossCost,
this.invoiceId,
this.transporterInvoiceNo,
this.transporterInvoiceNoDate,
this.freightbillId,
this.freightbillCode,
this.shipmentCost,
this.shipmentCostDate,
this.gstAmount,
this.paymentAmount,
this.paymentDate,
this.paymentCaseno,
this.miroDocument,
this.miroDocumentDate,
this.sapReferenceno,
this.utr1No,
this.utr2No,
this.utr3No,
this.utr4No,
this.utr5No,
this.utr1PaymentAmount,
this.utr2PaymentAmount,
this.utr3PaymentAmount,
this.utr4PaymentAmount,
this.utr5PaymentAmount,
this.utr1Date,
this.utr2Date,
this.utr3Date,
this.utr4Date,
this.utr5Date,
this.singedDocLink,
this.signedDocUploadedOn,
this.signedDocUploadedBy,
this.status,
this.statusId,
this.createdBy,
this.lastUpdatedBy,
this.lastUpdatedOn,
});
factory Payment.fromJson(Map<String, dynamic> json) => Payment(
plantId: json["plant_id"],
plantCode: json["plant_code"],
plantDesc: json["plant_desc"],
materialId: json["material_id"],
materialCode: json["material_code"],
uom: json["uom"],
shipmentNetQty: json["shipment_net_qty"]?.toDouble(),
shipmentNetCost: json["shipment_net_cost"]?.toDouble(),
igstAmount: json["igst_amount"],
sgstAmount: json["sgst_amount"]?.toDouble(),
cgstAmount: json["cgst_amount"]?.toDouble(),
totalGst: json["total_gst"]?.toDouble(),
shipmentGrossCost: json["shipment_gross_cost"]?.toDouble(),
invoiceId: json["invoice_id"],
transporterInvoiceNo: json["transporter_invoice_no"],
transporterInvoiceNoDate: json["transporter_invoice_no_date"],
freightbillId: json["freightbill_id"],
freightbillCode: json["freightbill_code"],
shipmentCost: json["shipment_cost"]?.toDouble(),
shipmentCostDate: json["shipment_cost_date"] == null ? null : DateTime.parse(json["shipment_cost_date"]),
gstAmount: json["gst_amount"]?.toDouble(),
paymentAmount: json["payment_amount"],
paymentDate: json["payment_date"],
paymentCaseno: json["payment_caseno"],
miroDocument: json["miro_document"],
miroDocumentDate: json["miro_document_date"] == null ? null : DateTime.parse(json["miro_document_date"]),
sapReferenceno: json["sap_referenceno"],
utr1No: json["utr1_no"],
utr2No: json["utr2_no"],
utr3No: json["utr3_no"],
utr4No: json["utr4_no"],
utr5No: json["utr5_no"],
utr1PaymentAmount: json["utr1_payment_amount"],
utr2PaymentAmount: json["utr2_payment_amount"],
utr3PaymentAmount: json["utr3_payment_amount"],
utr4PaymentAmount: json["utr4_payment_amount"],
utr5PaymentAmount: json["utr5_payment_amount"],
utr1Date: json["utr1_date"],
utr2Date: json["utr2_date"],
utr3Date: json["utr3_date"],
utr4Date: json["utr4_date"],
utr5Date: json["utr5_date"],
singedDocLink: json["singed_doc_link"],
signedDocUploadedOn: json["signed_doc_uploaded_on"],
signedDocUploadedBy: json["signed_doc_uploaded_by"],
status: json["status"],
statusId: json["status_id"],
createdBy: json["created_by"],
lastUpdatedBy: json["last_updated_by"],
lastUpdatedOn: json["last_updated_on"] == null ? null : DateTime.parse(json["last_updated_on"]),
);
Map<String, dynamic> toJson() => {
"plant_id": plantId,
"plant_code": plantCode,
"plant_desc": plantDesc,
"material_id": materialId,
"material_code": materialCode,
"uom": uom,
"shipment_net_qty": shipmentNetQty,
"shipment_net_cost": shipmentNetCost,
"igst_amount": igstAmount,
"sgst_amount": sgstAmount,
"cgst_amount": cgstAmount,
"total_gst": totalGst,
"shipment_gross_cost": shipmentGrossCost,
"invoice_id": invoiceId,
"transporter_invoice_no": transporterInvoiceNo,
"transporter_invoice_no_date": transporterInvoiceNoDate,
"freightbill_id": freightbillId,
"freightbill_code": freightbillCode,
"shipment_cost": shipmentCost,
"shipment_cost_date": "${shipmentCostDate!.year.toString().padLeft(4, '0')}-${shipmentCostDate!.month.toString().padLeft(2, '0')}-${shipmentCostDate!.day.toString().padLeft(2, '0')}",
"gst_amount": gstAmount,
"payment_amount": paymentAmount,
"payment_date": paymentDate,
"payment_caseno": paymentCaseno,
"miro_document": miroDocument,
"miro_document_date": "${miroDocumentDate!.year.toString().padLeft(4, '0')}-${miroDocumentDate!.month.toString().padLeft(2, '0')}-${miroDocumentDate!.day.toString().padLeft(2, '0')}",
"sap_referenceno": sapReferenceno,
"utr1_no": utr1No,
"utr2_no": utr2No,
"utr3_no": utr3No,
"utr4_no": utr4No,
"utr5_no": utr5No,
"utr1_payment_amount": utr1PaymentAmount,
"utr2_payment_amount": utr2PaymentAmount,
"utr3_payment_amount": utr3PaymentAmount,
"utr4_payment_amount": utr4PaymentAmount,
"utr5_payment_amount": utr5PaymentAmount,
"utr1_date": utr1Date,
"utr2_date": utr2Date,
"utr3_date": utr3Date,
"utr4_date": utr4Date,
"utr5_date": utr5Date,
"singed_doc_link": singedDocLink,
"signed_doc_uploaded_on": signedDocUploadedOn,
"signed_doc_uploaded_by": signedDocUploadedBy,
"status": status,
"status_id": statusId,
"created_by": createdBy,
"last_updated_by": lastUpdatedBy,
"last_updated_on": lastUpdatedOn?.toIso8601String(),
};
}
class Pageable {
final Sort? sort;
final int? pageNumber;
final int? pageSize;
final int? offset;
final bool? paged;
final bool? unpaged;
Pageable({
this.sort,
this.pageNumber,
this.pageSize,
this.offset,
this.paged,
this.unpaged,
});
factory Pageable.fromJson(Map<String, dynamic> json) => Pageable(
sort: json["sort"] == null ? null : Sort.fromJson(json["sort"]),
pageNumber: json["pageNumber"],
pageSize: json["pageSize"],
offset: json["offset"],
paged: json["paged"],
unpaged: json["unpaged"],
);
Map<String, dynamic> toJson() => {
"sort": sort?.toJson(),
"pageNumber": pageNumber,
"pageSize": pageSize,
"offset": offset,
"paged": paged,
"unpaged": unpaged,
};
}
class Sort {
final bool? sorted;
final bool? empty;
final bool? unsorted;
Sort({
this.sorted,
this.empty,
this.unsorted,
});
factory Sort.fromJson(Map<String, dynamic> json) => Sort(
sorted: json["sorted"],
empty: json["empty"],
unsorted: json["unsorted"],
);
Map<String, dynamic> toJson() => {
"sorted": sorted,
"empty": empty,
"unsorted": unsorted,
};
}

View File

@ -0,0 +1,348 @@
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:shayog/components/common/input_field.dart';
import 'package:shayog/components/styles/textStyles.dart';
import 'package:shayog/feature/presentation/screens/transporter/invoice_management/payment_view/ctrl/payment_view_ctrl.dart';
import '../../../../../../components/common/common_btn.dart';
import '../../../../../../components/common/common_button.dart';
import '../../../../../../components/common/custom_drop_down.dart';
import '../../../../../../components/common/data_cell.dart';
import '../../../../../../components/styles/app_colors.dart';
import '../../../../../../components/styles/app_strings.dart';
import '../../../../widgets/text_view.dart';
import '../../view/ctrl/invoice_management_controller.dart';
class PaymentView extends StatelessWidget {
const PaymentView({super.key});
@override
Widget build(BuildContext context) {
final controller = Get.put(InvoiceManagementController());
final paymentCtrl = Get.put(PaymentViewCtrl());
return Padding(
padding: const EdgeInsets.symmetric(horizontal: 16.0),
child: Column(
children: [
Obx(
() => controller.isPaymentFilter.value
? Container(
padding: const EdgeInsets.only(
left: 16.0, top: 8, right: 16, bottom: 16),
color: AppColors.clrF2,
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
children: [
Expanded(
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
TextView(text: "Plant"),
SizedBox(height: 8),
CustomDropdown(
backClr: AppColors.clrD9,
borderClr: AppColors.clrGrey,
items: paymentCtrl.plant,
itemLabel: (item) =>
"${item.plantCode}-${item.plantDesc}",
onSelected: (selected) {
paymentCtrl.selectedPlant.value =
"${selected?.plantCode}-${selected?.plantDesc}";
},
hintText: paymentCtrl.selectedPlant.value,
),
],
),
),
SizedBox(width: 16),
Expanded(
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
TextView(text: "Freight Bill No."),
SizedBox(height: 8),
CustomDropdown<String>(
backClr: AppColors.clrD9,
borderClr: AppColors.clrGrey,
items: paymentCtrl.freightBill,
itemLabel: (item) => item,
onSelected: (selected) {
paymentCtrl.selectedFreightBill.value =
selected.toString();
},
hintText:
paymentCtrl.selectedFreightBill.value,
),
],
),
),
SizedBox(width: 16),
Expanded(
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
TextView(text: "Product"),
SizedBox(height: 8),
CustomDropdown<dynamic>(
width: 250,
backClr: AppColors.clrD9,
borderClr: AppColors.clrGrey,
items: paymentCtrl.product,
itemLabel: (item) =>
"${item.materialCode}-${item.materialDescription}",
onSelected: (selected) {
paymentCtrl.selectedProduct.value =
"${selected.materialCode}-${selected.materialDescription}";
},
hintText: paymentCtrl.selectedProduct.value,
),
],
),
),
],
),
SizedBox(height: 12),
Row(
children: [
Expanded(
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
TextView(text: "Freight Invoice Date"),
SizedBox(height: 8),
InputField(
title: "Select Invoice Freight Date"),
// CustomDropdown(
// backClr: AppColors.clrD9,
// borderClr: AppColors.clrGrey,
// items: paymentCtrl.plant,
// itemLabel: (item) =>
// "${item.plantCode}-${item.plantDesc}",
// onSelected: (selected) {
// paymentCtrl.selectedPlant.value =
// selected?.plantCode ?? "";
// },
// hintText: paymentCtrl.selectedPlant.value,
// ),
],
),
),
SizedBox(width: 16),
Expanded(child: Container()),
SizedBox(width: 16),
Expanded(
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
TextView(
text: "Freight Bill No.",
style: 12.txtTransparent),
SizedBox(height: 8),
Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
CommonBtn(
height: 25,
width: 100,
bkClr: Colors.white,
text: AppStrings.cancel,
style: 12.txtSBoldBlue,
clickAction: () {
paymentCtrl.resetDropdowns();
},
),
SizedBox(width: 16),
CommonButton(
isLoading: paymentCtrl.isPayment,
borderRadius: 4,
height: 25,
width: 100,
text: AppStrings.submit,
textStyle: 12.txtSBoldWhite,
clickAction: () {
paymentCtrl.getPayments();
},
),
],
),
],
),
),
],
),
],
),
)
: SizedBox(),
),
Obx(
() => paymentCtrl.isPayment.value
? CircularProgressIndicator()
: Container(
margin: EdgeInsets.only(bottom: 16, top: 8),
// height: MediaQuery.of(context).size.height * 0.4,
decoration: BoxDecoration(
border: Border.all(color: AppColors.clrGrey)),
child: RawScrollbar(
thumbColor: AppColors.clrD9,
radius: Radius.circular(2),
trackVisibility: true,
thumbVisibility: true,
thickness: 14,
controller: paymentCtrl.verticalScrollController,
child: SingleChildScrollView(
controller: paymentCtrl.verticalScrollController,
child: RawScrollbar(
thumbColor: AppColors.clrD9,
radius: Radius.circular(2),
thickness: 14,
trackVisibility: true,
thumbVisibility: true,
controller: paymentCtrl.horizontalScrollController,
child: SingleChildScrollView(
scrollDirection: Axis.horizontal,
controller: paymentCtrl.horizontalScrollController,
child: Container(
margin: EdgeInsets.only(bottom: 24, right: 24),
child: DataTable(
dataRowHeight: 28,
headingRowHeight: 40,
headingRowColor:
WidgetStateProperty.all(AppColors.clrF2),
border: TableBorder(
horizontalInside:
BorderSide(color: AppColors.clrGrey),
verticalInside:
BorderSide(color: AppColors.clrGrey),
bottom: BorderSide(color: AppColors.clrGrey),
left: BorderSide(color: AppColors.clrGrey),
right: BorderSide(color: AppColors.clrGrey),
top: BorderSide(color: AppColors.clrGrey),
),
columns: [
dataColumn(AppStrings.plant),
dataColumn(
AppStrings.productName,
),
dataColumn(AppStrings.freightBillNo),
dataColumn(AppStrings.freightBillDate),
dataColumn(AppStrings.billingQty),
dataColumn(AppStrings.uom),
dataColumn(AppStrings.freightAmount),
dataColumn(AppStrings.cGST),
dataColumn(AppStrings.sGST),
dataColumn(AppStrings.iGST),
dataColumn(AppStrings.totalGst),
dataColumn(AppStrings.totalInvoiceAmt),
dataColumn(AppStrings.paidAmt),
dataColumn(AppStrings.gstHold),
dataColumn('${AppStrings.utrNo}1'),
dataColumn('${AppStrings.utrDate}1'),
dataColumn('${AppStrings.utrAmt}1'),
dataColumn('${AppStrings.utrNo}2'),
dataColumn('${AppStrings.utrDate}2'),
dataColumn('${AppStrings.utrAmt}2'),
dataColumn('${AppStrings.utrNo}3'),
dataColumn('${AppStrings.utrDate}3'),
dataColumn('${AppStrings.utrAmt}3'),
dataColumn('${AppStrings.utrNo}4'),
dataColumn('${AppStrings.utrDate}4'),
dataColumn('${AppStrings.utrAmt}4'),
dataColumn('${AppStrings.utrNo}5'),
dataColumn('${AppStrings.utrDate}5'),
dataColumn('${AppStrings.utrAmt}5'),
],
rows: List<DataRow>.generate(
paymentCtrl.payments.length, (index) {
final stoppage = paymentCtrl.payments[index];
return DataRow(
// selected: stoppage.isSelected,
cells: [
editableCell(index,
"${stoppage.plantCode}-${stoppage.plantDesc}"),
editableCell(
index, "${stoppage.materialCode}"),
editableCell(
index, "${stoppage.freightbillCode}"),
editableCell(
index, "${stoppage.lastUpdatedOn}"),
editableCell(
index, "${stoppage.shipmentNetQty}"),
editableCell(index, "TON"),
editableCell(
index, "${stoppage.shipmentNetCost}"),
editableCell(
index, "${stoppage.cgstAmount}"),
editableCell(
index, "${stoppage.sgstAmount}"),
editableCell(
index, "${stoppage.igstAmount}"),
editableCell(
index, "${stoppage.totalGst}"),
editableCell(index,
"${stoppage.shipmentGrossCost}"),
editableCell(index, "-"),
// editableCell(index,
// "${stoppage.utr1PaymentAmount + stoppage.utr2PaymentAmount +
// stoppage.utr3PaymentAmount + stoppage.utr4PaymentAmount +
// stoppage.utr5PaymentAmount}"),
editableCell(
index, "${stoppage.gstAmount}"),
editableCell(
index, stoppage.utr1No ?? "-"),
editableCell(
index, stoppage.utr1Date ?? "-"),
editableCell(index,
stoppage.utr1PaymentAmount ?? "-"),
editableCell(
index, stoppage.utr2No ?? "-"),
editableCell(
index, stoppage.utr2Date ?? "-"),
editableCell(index,
stoppage.utr2PaymentAmount ?? "-"),
editableCell(
index, stoppage.utr3No ?? "-"),
editableCell(
index, stoppage.utr3Date ?? "-"),
editableCell(index,
stoppage.utr3PaymentAmount ?? "-"),
editableCell(
index, stoppage.utr4No ?? "-"),
editableCell(
index, stoppage.utr4Date ?? "-"),
editableCell(index,
stoppage.utr4PaymentAmount ?? "-"),
editableCell(
index, stoppage.utr5No ?? "-"),
editableCell(
index, stoppage.utr5Date ?? "-"),
editableCell(index,
stoppage.utr5PaymentAmount ?? "-"),
],
);
}),
),
),
),
),
),
),
),
),
],
),
);
}
}

View File

@ -0,0 +1,10 @@
import 'package:flutter/cupertino.dart';
class ViewInvoice extends StatelessWidget {
const ViewInvoice({super.key});
@override
Widget build(BuildContext context) {
return Column();
}
}