android - 指示在 Datatable Flutter 上选择的项目数的文本

标签 android dart flutter

我想知道如何更改指示数据表上所选元素数量的文本。 您好,我想知道如何更改指示在数据表上选择的元素数的文本。 而不是这个“1 item selected”我想要这个“1 delivery selected”。

我的数据表源代码:

    class DeliveryTableSource extends DataTableSource {
  List<RequestDeliverySource> _list;
  int _rowSelectedCount = 0;

  DeliveryTableSource(this._list);

  @override
  DataRow getRow(int index) {
    if (index < 0 || index > _list.length)
      return null;
    else {
      RequestDeliverySource source = _list[index];
      return DataRow.byIndex(
          cells: buildCells(source),
          index: index,
          selected: source.isSelected,
          onSelectChanged: (bool value) {
            if (source.isSelected != value) {
              _rowSelectedCount += value ? 1 : -1;
              source.isSelected = value;
              notifyListeners();
            }
          });
    }
  }

  List<DataCell> buildCells(RequestDeliverySource source) {
    return [
      DataCell(Text("${source.name}")),
      DataCell(Text("${source.deliveryAddress}")),
      DataCell(Text("${source.pickupAddress}")),
      DataCell(Text("${source.plannedDeliveryDate}")),
      DataCell(Text("${source.effectiveDeliveryDate}")),
      DataCell(Text("${source.showStatus()}"))
    ];
  }

  void selectedAll(bool checked) {
    _list.forEach((source) {
      source.isSelected = checked;
    });
    _rowSelectedCount = checked ? _list.length : 0;
    notifyListeners();
  }

  @override
  bool get isRowCountApproximate => false;

  @override
  int get rowCount => _list.length;

  @override
  int get selectedRowCount => _rowSelectedCount;
}

我的组件小部件表:

class DeliveryTable extends StatefulWidget {
  DeliveryTable({Key key}) : super(key: key);

  @override
  State<StatefulWidget> createState() {
    return new DeliveryTableState();
  }
}

class DeliveryTableState extends State<DeliveryTable> {
  int _rowsPerPage = 10;

  @override
  Widget build(BuildContext context) {
    RequestDelivery delivery = new RequestDelivery();
    delivery.name = "livraison test";
    RequestDeliverySource source = new RequestDeliverySource(delivery);
    DeliveryTableSource tableSource = new DeliveryTableSource([source]);
    return Container(
        width: double.infinity,
        child: SingleChildScrollView(
            child: PaginatedDataTable(
                header: Text("Livraison effectuée",
                    textAlign: TextAlign.center,
                    style: TextStyle(fontSize: 16.0)),
                rowsPerPage: _rowsPerPage,
                onSelectAll: tableSource.selectedAll,
                onRowsPerPageChanged: (int value) {
                  setState(() {
                    _rowsPerPage = value;
                  });
                },
                columns: _buildColumns(),
                source: tableSource)));
  }

  List<DataColumn> _buildColumns() {
    return [
      DataColumn(label: Text("Nom"), tooltip: "Nom de la livraison"),
      DataColumn(
          label: Text("Lieux de livraison"), tooltip: "Adresse de livraison"),
      DataColumn(
          label: Text("Lieux de ramassage"), tooltip: "Adresse de ramassage"),
      DataColumn(
          label: Text("Date de livraison"), tooltip: "Date de livraison"),
      DataColumn(
          label: Text("Livrée le"), tooltip: "Date de livraison effective"),
      DataColumn(label: Text("Statut"), tooltip: "Statu de la livraison")
    ];
  }
}

enter image description here

最佳答案

发生这种情况是因为如果提供的源中的计数大于 0,PaginatedDataTable 将替换 header 。要绕过此问题,您可以在 DataTableSource 中创建自己的 header 和 getter。

enter image description here

class DataTable extends StatefulWidget {
  _DataTableState createState() => _DataTableState();
}

class _DataTableState extends State<DataTable> {
  final source = MySource();

  @override
  Widget build(BuildContext context) {
    return PaginatedDataTable(
      columns: <DataColumn>[
        DataColumn(
          label: Text('Label'),
        ),
      ],
      header: Container(
        child: Text('I have ${source.selectedItems} deliveries selected.'),
      ),
      source: source,
    );
  }
}

class MySource extends DataTableSource {
  @override
  DataRow getRow(int index) {
    return DataRow(
      cells: <DataCell>[
        DataCell(
          Text('New cell'),
        ),
      ],
    );
  }

  int get selectedItems => 20; // Create your own counter

  @override
  bool get isRowCountApproximate => false;

  @override
  int get rowCount => 10;

  @override
  int get selectedRowCount => 0; // You want to keep this at zero
}

关于android - 指示在 Datatable Flutter 上选择的项目数的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53871056/

相关文章:

flutter - 如何使用_formKey验证TextFormField?

string - 分割字符串并将子字符串保存在dart列表中

json - 如何将具有日期属性的json数据转换为dart

java - 无法从文本微调器 getSelectedItem()

flutter - 如何用 flutter 创建动画表情符号雨?

java - Home Intent 启动 SettingsActivity 而不是 MainActivity?

dart - WebStorm中的控制台中未显示打印语句-Dart

dart - Flutter:是否可能有多个 Futurebuilder 或一个 Futurebuilder 用于多个 Future 方法?

android - React Native png 图像是像素化的而不是高清的

java - 按下音量按钮时如何使通知静音?