DataTable: получить значение первой ячейки из выбранной строки. - PullRequest
0 голосов
/ 17 января 2020

Я пытаюсь удалить выбранную строку из DataTable, извлекая значение первой ячейки (id) и передавая его в функцию deleteRow. Как мне получить это значение?

                         child: DataTable(
                              columns: data.first.keys
                                  .map((dynamic keys) => DataColumn(label: Text(keys.toString())))
                                  .toList(),
                              rows: data.map((map) {
                                return DataRow(
                                    onSelectChanged: (bool selected) {
                                      if (selected) {
                                        try {
                                          //determine the id of the selected row
                                          int selectedId = /*get index of selected row and return value of the first cell*/
                                          //delete row associated with id in db
                                          deleteRow(selectedId);
                                          //update ui to remove that row
                                          setState(() {});
                                        } catch (e) {
                                          return SnackBar(
                                            content: Text('Cant delete this row. EXCEPTION: $e'),
                                          );
                                        }
                                      }
                                    },
                                    cells: map.values.map((dynamic val) => DataCell(Text(val.toString()))).toList());
                              }).toList()),

1 Ответ

0 голосов
/ 17 января 2020
List<Map> data = [], selected = [];

  @override
  void initState() {
    super.initState();
    data.add({'id': 'Emp1', 'name': 'Naveen', 'salary': 50000});
    data.add({'id': 'Emp3', 'name': 'Satish', 'salary': 35000});
    data.add({'id': 'Emp2', 'name': 'Ram', 'salary': 40000});
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        body: Container(
      padding: EdgeInsets.all(15),
      alignment: Alignment.center,
      child: Column(
        mainAxisSize: MainAxisSize.min,
        children: <Widget>[
          Text(
              selected.length < 1
                  ? 'Nothing Selected !'
                  : 'First cell : ${selected[0].values.toList()[0]}',
              textAlign: TextAlign.center),
          DataTable(
              columns: data.first.keys
                  .map((dynamic keys) =>
                      DataColumn(label: Text(keys.toString())))
                  .toList(),
              rows: data.map((map) {
                return DataRow(
                    selected: selected.contains(map),
                    onSelectChanged: (boo) {
                      if (boo) {
                        setState(() {
                          selected.add(map);
                        });
                      } else {
                        setState(() {
                          selected.remove(map);
                        });
                      }
                    },
                    cells: map.values.map((value) {
                      return DataCell(Text(value.toString()));
                    }).toList());
              }).toList()),
        ],
      ),
    ));
  }

pic

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...