Flatter DataTable - Нажмите на строку - PullRequest
0 голосов
/ 07 ноября 2018

Я использую 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',
  ),
];

При нажатии на иконку редактирования вызывается метод "_getSelectedRowInfo". Я хочу получить полную информацию о выбранном / постучанном ряду в этой функции.

Ответы [ 3 ]

0 голосов
/ 06 марта 2019

Чтобы добавить к ответу, предоставленному @Samuel, есть возможность скрыть и флажки. Вам нужно создать свою собственную копию DataTable Widget. Вы можете выполнить эту процедуру:

  1. создать новый файл в вашем проекте с именем my_data_table.dart
  2. скопировать источник из https://github.com/flutter/flutter/blob/master/packages/flutter/lib/src/material/data_table.dart в my_data_table.dart
  3. заменить все DataTable на MyDataTable в файле.
  4. Заменить все DataRow на MyDataRow в файле
  5. Заменить все DataCell на MyDataCell в файле
  6. Заменить все DataColumn на MyDataColumn в файле
  7. теперь найдите метод сборки в MyDataTable классе и измените файл с текстом "final bool showCheckboxColumn = rows.any((MyDataRow row) => row.onSelectChanged != null);" на "final bool showCheckboxColumn = false;" и "final bool allChecked = showCheckboxColumn && !rows.any((MyDataRow row) => row.onSelectChanged != null && !row.selected);" на "final bool allChecked = false;"
  8. Теперь в вашем файле, где вы использовали DataTable , импортируйте файл my_data_table.dart и замените DataTable на MyDataTable , DataColumn с MyDataColumn , DataRow с MyDataRow и DataCell с MyDataCell . Ваш onSelectChanged по-прежнему будет работать без каких-либо флажков.
0 голосов
/ 22 марта 2019

Каждый DataCell имеет обратный вызов onTap. Вы могли бы использовать это без невидимого флажка, появляющегося в строках таблицы. Например

DataCell(Text(itemrow.itemname),
      onTap: () {
// Your code here
})

Это работает для меня. Если вы хотите, чтобы onTap работал для всего DataRow вместо DataCell, вы можете просто добавить логику к onTap каждого DataCell и получить желаемый результат.

0 голосов
/ 07 ноября 2018

вы можете использовать onSelectChanged свойство из DataRow.

rows: items
    .map(
        (itemRow) => DataRow(
            onSelectChanged: (bool selected) {
                if (selected) {
                    log.add('row-selected: ${itemRow.index}');
                }
            },
            cells: [
                // ..
            ],
        ),
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...