Flutter DataTable - 点击行

Zai*_*SMJ 12 datatable dart flutter

我正在使用 Flutter DataTables 来显示购物车中的项目列表。现在我想编辑任何选定行的数量。有没有办法获取用户点击的行的信息?

以下是我的数据表的完整代码:

class _DataTableSampleState extends State<DataTableSample> {

  void _getSelectedRowInfo() {
    print('Selected Item Row Name Here...')
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('DataTable Sample'),
      ),
      body: Container(
        child: DataTable(
          onSelectAll: (b) {},
          sortAscending: true,
          columns: <DataColumn>[
            DataColumn(
              label: Text('Item'),
            ),
            DataColumn(
              label: Text('Price'),
            ),
          ],
          rows: items
              .map(
                (itemRow) => DataRow(
                      cells: [
                        DataCell(
                          Text(itemRow.itemName),
                          showEditIcon: false,
                          placeholder: false,
                        ),
                        DataCell(
                          Text(itemRow.itemPrice),
                          showEditIcon: true,
                          placeholder: false,
                          onTap: _getSelectedRowInfo,
                        ),
                      ],
                    ),
              )
              .toList(),
        ),
      ),
    );
  }
}

class ItemInfo {
  String itemName;
  String itemPrice;

  ItemInfo({
    this.itemName,
    this.itemPrice,
  });
}

var items = <ItemInfo>[
  ItemInfo(
    itemName: 'Item A',
    itemPrice: '250',
  ),
  ItemInfo(
    itemName: 'Item B',
    itemPrice: '100',
  ),
  ItemInfo(
    itemName: 'Item C',
    itemPrice: '150',
  ),
];
Run Code Online (Sandbox Code Playgroud)

单击编辑图标时,将调用“_getSelectedRowInfo”方法。我想在此功能中获得选定/点击行的完整详细信息。

小智 16

您可以使用DataRow 中的onSelectChanged属性。

rows: items
    .map(
        (itemRow) => DataRow(
            onSelectChanged: (bool selected) {
                if (selected) {
                    log.add('row-selected: ${itemRow.index}');
                }
            },
            cells: [
                // ..
            ],
        ),
Run Code Online (Sandbox Code Playgroud)

  • 要隐藏复选框,您只需在数据表定义中添加属性 showCheckboxColumn: false 即可。 (9认同)
  • 谢谢它起作用了。但是有没有办法隐藏复选框? (5认同)

Ram*_*him 11

尝试这个 :

DataTable(
    showCheckboxColumn: false, // <-- this is important
    columns: [
        DataColumn(label: Text('FirstName')),
         DataColumn(label: Text('LastName')),
    ],
     rows:[
        DataRow(
            cells: [
                DataCell(Text(obj['user1'])),
                DataCell(Text(obj['name-a'])),
            ],
            onSelectChanged: (newValue) {
                print('row 1 pressed');
            },
        ),
        DataRow(
            cells: [
                DataCell(Text(obj['user2'])),
                DataCell(Text(obj['name-b'])),
            ],
            onSelectChanged: (newValue) {
                print('row 2 pressed');
            },
        ),
    ]
),
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助。谢谢


小智 10

每个DataCell都有一个onTap回调。您可以使用此功能,而无需在表格行上显示不可隐藏的复选框。例如

DataCell(Text(itemrow.itemname),
      onTap: () {
// Your code here
})
Run Code Online (Sandbox Code Playgroud)

这对我有用。如果您希望onTap对整个DataRow而不是仅对一个起作用DataCell,您可以将逻辑添加到onTap每个中DataCell并获得所需的结果。