Можно ли получить выбранную строку из таблицы данных при нажатии на виджет внутри таблицы? - PullRequest
0 голосов
/ 21 июня 2020

У меня есть DataTable с раскрывающимся списком, где я могу выбрать пользователя. Но мне нужно узнать индекс строки, которая изменилась (например, когда я меняю первую строку с пользователя 1 на пользователя 2, я хочу получить 1 (или 0, что угодно)). Я пытался использовать onSelectedChanged для DataTable с этими флажками, но как только я нажимаю на раскрывающийся список, он не устанавливает флажок в указанной c строке.

Есть ли способ получить номер строки?

DataTable(
  columnSpacing: 12,
  columns: [
    DataColumn(label: Text('ID')),
    DataColumn(label: Text('Date')),
    DataColumn(label: Text('Weekday')),
    DataColumn(label: Text('User'))
  ],
  rows: days
      .map(
        ((element) => DataRow(

          selected: selected.contains(element),
            onSelectChanged: (checked) {
              if (checked) {
                setState(() {
                  selected.add(element);
                });
              } else {
                setState(() {
                  selected.remove(element);
                });
              }
            },
              cells: <DataCell>[
                DataCell(Text(element["ID"])),
                DataCell(Text(element["DAY"])),
                DataCell(Text(element["WEEKDAY"])),
                DataCell(dropDownList(element["USER"]))
              ],
            )),
      )
      .toList(),
);

Раскрывающийся список:

  Widget dropDownList(String currentUser) {
return DropdownButton(
  value: currentUser,
  iconSize: 24,
  elevation: 16,
  style: TextStyle(color: Colors.red[900], fontWeight: FontWeight.bold),
  onChanged: (String newValue) {
    setState(() {
      currentUser = newUser;
    });

  },
  items: users
      .map<DropdownMenuItem<String>>((String value) {
    return DropdownMenuItem<String>(
      value: value,
      child: Text(value),
    );
  }).toList(),
);

}

Изображение: с возможностью датирования с раскрывающимся списком

...