Flutter动态数据表

mgdq6dx1  于 2023-05-29  发布在  Flutter
关注(0)|答案(1)|浏览(149)

我有一个DataTable,我想根据用户的日期选择动态。因此,列数将不同。
我当前的代码从Firestore集合中创建了一个List<Map>,用于标题,另一个用于行/单元格值。当比较标题和单元格内容的长度时,它们的大小相同。
我当前创建表的代码:

// Just providing more detail about the variables used
List<DataColumn> dataColumns = [];
List<DataCell> dataRows = [];

dataColumns = newDateRange.map((string) => 
    DataColumn(label: Text(string))).toList();

dataRows = listOfRows.map((cell) => DataCell(Text(cell.toString()))).toList();

// DataTable creation
DataTable(
    columnSpacing: dataTableColumnSpacing,
    border: dataTableBorder,
    decoration: dataTableBoxDecoration,
    columns: dataColumns,
    rows: [DataRow(cells: dataRows)],
)

根据我的测试,列标题按预期工作,所以rows部分有问题-变量声明,map部分或DataTable创建中的rows部分。
我得到的错误是行长度不等于列长度。
任何帮助和/或指导将不胜感激。

igetnqfo

igetnqfo1#

假设我有标题列表
List< Headers >?headers = [.....];
我的专栏看起来像这样:

columns: headers?.map((e) {
                              return DataColumn(label: Text(e.text?? ""));
                            }).toList() ??
                            [],

现在单元格应该与列数相同:在数据行中。

DataRow(
                                cells: headers
                                        ?.map((header) {
                                      return DataCell(
                                       Text(header.name ?? "",)
                                      ));
                                    }).toList() ??
                                    [],
                              );

现在你可以看到列和单元格的列表是相等的。
现在你需要将行列表添加到行中:

rows: listOfRows?.map((element) {
                              return DataRow(
                                cells: headers
                                        ?.map((header) {
                                      return DataCell(Text(
                                      element['name'] ?? "",
                                      ));
                                    }).toList() ??
                                    [],
                              );
                            }).toList() ??
                            []

注意:我已经header.name用element ['name']替换了www.example.com,因为我想在单元格中添加name。因为你想要不同的价值观,我不知道你的结构。
您只需确保您的列的类型应为1xM,其中M是列数
此外,您需要确保您的行的大小为NXM N可以是任何数量的行。

相关问题