我正在尝试在pdf中添加带有循环的动态表,但是它不起作用。
pdfLib.Table.fromTextArray(
context: context,
data: <List<String>>[
<String>[
'#',
'Product Name',
'HSN',
'Qty',
'Unit Price',
'MRP',
'Disc%',
'Disc Amnt',
'Taxable Amnt',
'SGST%',
'SGST Amnt',
'CGST%',
'CGST Amnt',
'Net Amnt'
],
_list(),
],
),
_list这是一个返回字符串列表的函数,但是它只能在表中添加一行,
for (var i = 0; i < _items.length; i++) {
return <String>[
(i + 1).toString(),
_items[i].title,
'HSN',
_items[i].quantity.toString(),
_items[i].price.toString(),
_items[i].mrp.toString(),
_items[i].discount.toString(),
_item[i].gst,
_item[i].amount
_item[i].sGst,
_item[i].someitem,
_item[i].cGst,
_items[i].price,
_items[i].quantity];
}
有人可以帮我吗? 谢谢
答案 0 :(得分:1)
_list
需要返回List<List<String>>
,因为它需要返回多个字符串列表-每个项目一个。可以使用List.map()
来编写,例如:
List<List<String>> _list() {
return _items
.map((item) => <String>[
item.title,
'HSN',
item.quantity.toString(),
// etc
])
.toList();
}
将每个项目映射到一个字符串列表,并返回列表列表。
您需要更改使用此方法的方式,以使用扩展运算符 ...
,以便将项目列表扩展为整体列表,如下所示:
var data = <List<String>>[
<String>[
'#',
'Product Name',
'HSN',
'Qty',
'Unit Price',
'MRP',
'Disc%',
'Disc Amnt',
'Taxable Amnt',
'SGST%',
'SGST Amnt',
'CGST%',
'CGST Amnt',
'Net Amnt'
],
..._list(),
];
}
或者,您可以使用for
运算符内联整个操作:
var data = <List<String>>[
<String>[
'#',
'Product Name',
'HSN',
'Qty',
'Unit Price',
'MRP',
'Disc%',
'Disc Amnt',
'Taxable Amnt',
'SGST%',
'SGST Amnt',
'CGST%',
'CGST Amnt',
'Net Amnt'
],
for (var item in _items)
<String>[
item.title,
'HSN',
item.quantity.toString(),
// etc
],
];
}
答案 1 :(得分:0)
有几种方法可以做到,我更喜欢单独填写列表,例如:
`List<List<String>> salidas = new List();
salidas.add(<String>['Title1','Title2', ... , 'Title n']);
for(var indice=0;indice<records.length;indice++) {
var recind = {
'field1': records[indice].Stringfield1,
'field2': records[indice].Stringfield2,
...
'fieldn': records[indice].Stringfieldn
};
salidas.add(recind);
}
...
fpdf.Table.fromTextArray(context: context,data: salidas),
`
答案 2 :(得分:0)
// Generate Dynamic PDF
_generatePdfAndView(context) async {
final pw.Document pdf = pw.Document(deflate: zlib.encode);
pdf.addPage(
pw.MultiPage(
build: (context) => [
pw.Table.fromTextArray(
context: context,
data: <List<String>>[
// These will be your columns as Parameter X, Parameter Y etc.
<String>[
'Parameter',
'Price',
],
for (int i = 0; i < featureNames.length; i++)
<String>[
// ith element will go in ith column means
// featureNames[i] in 1st column
featureNames[i],
// featureValues[i] in 2nd column
featureValues[i].toString(),
],
],
),
],
),
);
}
希望对您有用。