我有这段代码
专栏
class _AdminShiftsState extends State<AdminShifts> {
late final List<PlutoMenuItem> orangeHoverMenus;
late DateTimeRange selectedDates;
String dropdownvalue = '';
/////// PLUTO TABLE
final List<PlutoColumn> columns = <PlutoColumn>[
PlutoColumn(
title: 'User',
field: 'usuario',
type: PlutoColumnType.select(<String>[
'usu1',
'usu2',
'usu3'
]),
enableSorting: true,
enableRowChecked: true,
enableDropToResize: true,
enableEditingMode: true,
enableColumnDrag: true,
suppressedAutoSize: false,
),
PlutoColumn(
title: 'Movement',
field: 'movimiento',
type: PlutoColumnType.select(<String>[
'ENTRADA',
'SALIDA',
'COMM',
]),
enableSorting: true,
enableEditingMode: true,
enableDropToResize: true,
enableColumnDrag: true),
PlutoColumn(
title: 'Comment',
field: 'comentario',
type: PlutoColumnType.text(),
enableSorting: true,
enableDropToResize: true,
enableEditingMode: true,
enableColumnDrag: true),
PlutoColumn(
title: 'Registry Date',
field: 'registro_d',
type: PlutoColumnType.date(
format: 'yyyy-MM-dd',
applyFormatOnInit: true,
defaultValue: DateTime.now()),
enableEditingMode: true,
enableDropToResize: true,
enableSorting: true,
enableColumnDrag: true),
PlutoColumn(
title: 'Registry Hour',
field: 'registro_h',
type: PlutoColumnType.time(
defaultValue: DateFormat('HH:mm').format(DateTime.now())),
enableSorting: true,
enableEditingMode: true,
enableDropToResize: true,
enableColumnDrag: true),
PlutoColumn(
title: 'Location',
field: 'posicion',
type: PlutoColumnType.text(),
enableSorting: true,
enableEditingMode: true,
enableColumnDrag: true,
enableDropToResize: true,
readOnly: true,
renderer: (rendererContext) {
if (rendererContext.cell.value != '') {
return RichText(
text: TextSpan(
text: rendererContext.cell.value,
style: TextStyle(color: Colors.blue),
recognizer: TapGestureRecognizer()
..onTap = () {
launchUrlString(rendererContext.cell.value);
}));
} else {
return const Text('');
}
}),
PlutoColumn(
title: 'Picture',
field: 'foto',
type: PlutoColumnType.text(),
enableEditingMode: false,
renderer: (rendererContext) {
if (rendererContext.cell.value != '') {
Uint8List bytes =
(base64Decode(rendererContext.cell.value.toString()));
return Image.memory(bytes);
} else {
return const Text('');
}
},
),
PlutoColumn(
title: 'Status',
field: 'status',
type: PlutoColumnType.number(),
// hide: true,
width: 250,
minWidth: 175,
),
PlutoColumn(
title: 'ID',
field: 'id',
type: PlutoColumnType.number(),
// hide: true,
width: 250,
minWidth: 175,
)
];
List<PlutoRow> rows = [];
创建这个网格
Container(
height: sizeHeight / 1.5,
width: sizeWidth / 1.2,
child: PlutoGrid(
columns: columns,
rows: rows,
onLoaded: (PlutoGridOnLoadedEvent event) {
stateManager = event.stateManager;
},
onChanged: (PlutoGridOnChangedEvent event) {
stateManager.currentCell!.row.cells['status']!.value = '1';
stateManager.notifyListeners();
},
configuration: const PlutoGridConfiguration(
columnFilter: PlutoGridColumnFilterConfig(
filters: FilterHelper.defaultFilters),
columnSize: PlutoGridColumnSizeConfig(
autoSizeMode: PlutoAutoSizeMode.scale),
localeText: PlutoGridLocaleText.spanish()),
createHeader: (stateManager) =>
_Header(stateManager2: stateManager),
),
)
引用_header(如exampleweb中的示例)
class _Header extends StatefulWidget {
const _Header({
required this.stateManager2,
Key? key,
}) : super(key: key);
final PlutoGridStateManager stateManager2;
@override
State<_Header> createState() => _HeaderState();
}
class _HeaderState extends State<_Header> {
int addCount = 1;
int addedCount = 0;
PlutoGridSelectingMode gridSelectingMode = PlutoGridSelectingMode.row;
@override
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
widget.stateManager2.setSelectingMode(gridSelectingMode);
});
}
void handleAddRows() {
final newRows = widget.stateManager2.getNewRows(count: addCount);
for (var e in newRows) {
e.cells['id']!.value = 0;
}
widget.stateManager2.appendRows(newRows);
widget.stateManager2.setCurrentCell(
newRows.first.cells.entries.first.value,
widget.stateManager2.refRows.length - 1,
);
widget.stateManager2.moveScrollByRow(
PlutoMoveDirection.down,
widget.stateManager2.refRows.length - 2,
);
widget.stateManager2.setKeepFocus(true);
}
void handleSaveAll() {
widget.stateManager2.setShowLoading(true);
for (var row in widget.stateManager2.refRows) {
if (row.cells['id']!.value == '0') {
/* AÑADIR LLAMADA DE ADD*/
// FUNCION ADD
postUserLog(
row.cells['usuario']!.value,
row.cells['movimiento']!.value,
row.cells['comentario']!.value,
row.cells['posicion']!.value,
row.cells['posicion']!.value,
row.cells['foto']!.value,
row.cells['registro_d']!.value,
row.cells['registro_h']!.value,
);
}
// FIN FUNCION ADD
else {
if (row.cells['status']!.value == 1) {
//row.cells['status']!.value = 'guest';
/* AÑADIR LLAMADA DE UPDATE*/
// FUNCION UPDATE
updaterow(
row.cells['id']!.value,
row.cells['usuario']!.value,
row.cells['movimiento']!.value,
row.cells['comentario']!.value,
row.cells['registro_d']!.value,
row.cells['registro_h']!.value);
// FIN FUNCION UPDATE
}
}
}
widget.stateManager2.setShowLoading(false);
}
void handleRemoveSelectedRowsButton() {
/* AÑADIR LLAMADA DE REMOVE*/
//FUNCION REMOVE
for (var row in widget.stateManager2.currentSelectingRows) {
if (row.cells['id']!.value != '0') {
deleterow(row.cells['id']!.value);
}
// END FUNCION REMOVE
widget.stateManager2
.removeRows(widget.stateManager2.currentSelectingRows);
}
}
@override
Widget build(BuildContext context) {
return SingleChildScrollView(
scrollDirection: Axis.horizontal,
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Wrap(
spacing: 10,
crossAxisAlignment: WrapCrossAlignment.center,
children: [
ElevatedButton(
onPressed: handleAddRows,
child: const Text('Add rows'),
),
ElevatedButton(
onPressed: handleSaveAll,
child: const Text('Save all'),
),
ElevatedButton(
onPressed: handleRemoveSelectedRowsButton,
child: const Text('Remove Selected Rows'),
),
],
),
),
);
}
}
但是当我在屏幕上选择(通过复选框或单击一行)时,widget.stateManager2.currentselectingRows 的列表中没有任何项目,就像没有选择任何行一样
你能帮帮我吗?