【问题标题】:How to use a list of DataRows in a PaginatedDataTable in Flutter?如何在 Flutter 的 PaginatedDataTable 中使用 DataRows 列表?
【发布时间】:2021-09-09 03:53:34
【问题描述】:

我有一个DataTable,用户可以在其中动态添加和删除DataRows。因此,DataTable 可以变得非常大。为了提高性能,我想使用 PaginatedDataTable。但是这个 Widget 需要一个额外的数据源类。 其基本代码如下所示:

class DataSource extends DataTableSource {

  int _selectedCount = 0;

  @override
  int get rowCount => list.length;

  @override
  bool get isRowCountApproximate => false;

  @override
  int get selectedRowCount => _selectedCount;

  @override
  DataRow getRow(int index) {

    return DataRow.byIndex(
        index: index,
        cells: <DataCell>[
          DataCell(Text('1')),
          DataCell(Text('2')),
          DataCell(Text('3')),
          DataCell(Text('4')),
        ]);
  }
}

在我的旧代码中,我使用了一个 DataTable,其中我将所有 DataRows 放在一个列表中,并且工作正常。这是代码中的一个 sn-p 列表:

class ExerciseTable extends StatefulWidget {

  @override
  _ExerciseTableState createState() => _ExerciseTableState();
}

class _ExerciseTableState extends State<ExerciseTable> {
  ExerciseDataSource _rowsDataSource;

  List<DataRow> _rowList = [
    DataRow(cells: <DataCell>[
          DataCell(Text('1')),
          DataCell(Text('2')),
          DataCell(Text('3')),
          DataCell(Text('4')),
    ]),
  ];

  void _addRow() {
    _rowList.insert(0,
       DataRow(cells: <DataCell>[
          DataCell(Text('1')),
          DataCell(Text('2')),
          DataCell(Text('3')),
          DataCell(Text('4')),
        ])
    );
  }

  void _removeRow() {
    setState(() {
      _rowList.removeAt(0);
    });
  }

现在我想为 PaginatedDataTable 使用与 DataRows 相同的列表,但是如何将列表集成到“DataSource”类中? 我很感激每一个答案,如果有人知道怎么做就太好了:)

【问题讨论】:

    标签: list flutter dart datatable paginateddatatable


    【解决方案1】:

    根据海关需求集成 PaginatedDataTable 可能有点令人困惑,但您可以将数据源列表传递给 DataSource 类(通过构造函数),并在 getRow 方法上使用索引来遍历数据。

    一个例子可能是:

    @Override
    DataRow getRow(int index) {
     final currentData = yourDataList[index]
     return DataRow.byIndex(
      index: index,
      cells: <DataCell>[
       DataCell(Text('${currentData.name}'},
      ],
     );
    }
    

    【讨论】:

    • 我的代码中的小部件不是文本小部件,而是拥有例如用户可以输入数据的文本表单字段的小部件。我应该在返回中写什么而不是 'DataCell(Text('${currentData.name}'}' ?
    • 只要可以嵌套任何小部件,您就可以放置自定义小部件。但根据我的经验,这可能会产生一些 UI 问题(溢出)
    猜你喜欢
    • 2019-06-19
    • 2021-03-29
    • 1970-01-01
    • 2021-12-06
    • 2021-10-19
    • 2021-11-08
    • 2021-11-28
    • 2018-06-22
    • 2011-03-28
    相关资源
    最近更新 更多