добавление кнопки в sfdatagrid получить всю информацию о строке onTap
я добавляюSfDataGrid
в мое веб-приложение вFlutter
Все работает нормально, только с одной проблемой, с которой я сталкиваюсь, как показано ниже.
Ниже мойDataSourceMethod
для SfDataGrid`
class EmployeeDataSource extends DataGridSource {
EmployeeDataSource({required List<Employee> employees}) {
_employees = employees
.map<DataGridRow>((e) => DataGridRow(cells: [
DataGridCell<int>(columnName: 'id', value: e.id),
DataGridCell<String>(columnName: 'status', value: e.status),
DataGridCell<String>(columnName: 'name', value: e.name),
DataGridCell<String>(columnName: 'heartbeat', value: e.heartbeat),
DataGridCell<String>(columnName: 'visibility', value: e.visibility),
DataGridCell<String>(columnName: 'location', value: e.location),
DataGridCell<String>(columnName: 'connectors', value: e.connectors),
DataGridCell<String>(columnName: 'actions', value: e.actions),
])).toList();
}
List<DataGridRow> _employees = [];
@override
List<DataGridRow> get rows => _employees;
@override
DataGridRowAdapter? buildRow(DataGridRow row) {
return DataGridRowAdapter(
cells: row.getCells().map<Widget>((dataGridCell) {
return dataGridCell.columnName == "status" ?
Container(
alignment: Alignment.centerLeft,
padding: EdgeInsets.all(16.0),
child: Icon(
Icons.circle,
color:
colorFromCssString(
functions.getStatusColor(dataGridCell.value),
defaultColor:
Colors.black,
),
size:
24,
),
) : dataGridCell.columnName == "actions" ?
Row(
children: [
FlutterFlowIconButton(
borderColor: Colors.transparent,
borderRadius: 30,
borderWidth: 1,
buttonSize: 60,
icon: Icon(
Icons.edit,
color: Color(0xFF13345B),
size: 30,
),
onPressed: () {
print('IconButton pressed ...');
},
),
FlutterFlowIconButton(
borderColor: Colors.transparent,
borderRadius: 30,
borderWidth: 1,
buttonSize: 60,
icon: Icon(
Icons.remove_red_eye,
color: Color(0xFF13345B),
size: 30,
),
onPressed: () async {
//So When I Tap On This Button I need Entire Row Details.
},
),
],
) :
Container(
alignment: Alignment.centerLeft,
padding: EdgeInsets.all(16.0),
child: Text(
dataGridCell.value.toString(),
textAlign: TextAlign.start,
),
);
}).toList());
}
}
Я не могу получить индекс, когда я нажимаю кнопку. У любого есть идея, как получить определенные данные строки при нажатии на кнопку. Я много искал, но я получаю только данныеonCellTap
метод не на кнопке, которую я добавил вDataGridRowAdapter
.
Пожалуйста, помогите мне в этом, если у кого-то есть идеи. Заранее спасибо
1 ответ
Вы можете получить все сведения о соответствующей строке из свойства строки в методе buildRow .
class EmployeeDataSource extends DataGridSource {
EmployeeDataSource({required List<Employee> employees}) {
_employees = employees
.map<DataGridRow>((e) => DataGridRow(cells: [
DataGridCell<int>(columnName: 'id', value: e.id),
DataGridCell<String>(columnName: 'status', value: e.status),
DataGridCell<String>(columnName: 'name', value: e.name),
DataGridCell<String>(columnName: 'heartbeat', value: e.heartbeat),
DataGridCell<String>(
columnName: 'visibility', value: e.visibility),
DataGridCell<String>(columnName: 'location', value: e.location),
DataGridCell<String>(
columnName: 'connectors', value: e.connectors),
DataGridCell<String>(columnName: 'actions', value: e.actions),
]))
.toList();
}
List<DataGridRow> _employees = [];
@override
List<DataGridRow> get rows => _employees;
@override
DataGridRowAdapter? buildRow(DataGridRow row) {
return DataGridRowAdapter(
cells: row.getCells().map<Widget>((dataGridCell) {
return dataGridCell.columnName == "status"
? Container(
alignment: Alignment.centerLeft,
padding: const EdgeInsets.all(16.0),
child: Icon(
Icons.circle,
color: dataGridCell.value == 'available'
? Colors.green
: Colors.red,
size: 24,
),
)
: dataGridCell.columnName == "actions"
? Row(
children: [
IconButton(
icon: const Icon(
Icons.edit,
color: Color(0xFF13345B),
size: 30,
),
onPressed: () {
print('IconButton pressed ...');
},
),
IconButton(
icon: const Icon(
Icons.remove_red_eye,
color: Color(0xFF13345B),
size: 30,
),
onPressed: () async {
// You can get the entire details of the corresponding row when tapping on the button
print('ID ${row.getCells()[0].value}');
for (var details in row.getCells()) {
print(details.value);
}
},
),
],
)
: Container(
alignment: Alignment.centerLeft,
padding: const EdgeInsets.all(16.0),
child: Text(
dataGridCell.value.toString(),
textAlign: TextAlign.start,
),
);
}).toList());
}
}