You can listen for column move events with the PlutoGrid.onColumnsMoved callback. However, there is no event for hiding a column, adding a column, or deleting a column. I have attached the code below for these events. import 'dart:async'; import 'package:flutter/material.dart'; import 'package:pluto_grid/pluto_grid.dart'; import '../dummy_data/development.dart'; class EmptyScreen extends StatefulWidget { static const routeName = 'empty'; const EmptyScreen({Key? key}) : super(key: key); @override _EmptyScreenState createState() => _EmptyScreenState(); } class _EmptyScreenState extends State<EmptyScreen> { late List<PlutoColumn> columns; late List<PlutoRow> rows; late PlutoGridStateManager stateManager; late StreamSubscription<PlutoNotifierEvent> notifierEvent; late final columnsNotifier = { stateManager.moveColumn.hashCode, stateManager.hideColumn.hashCode, stateManager.hideColumns.hashCode, stateManager.insertColumns.hashCode, stateManager.removeColumns.hashCode, stateManager.toggleFrozenColumn.hashCode, }; @override void initState() { super.initState(); final dummyData = DummyData(10, 100); columns = dummyData.columns; rows = dummyData.rows; } @override void dispose() { notifierEvent.cancel(); super.dispose(); } void _notifyListener(PlutoNotifierEvent event) { if (event.notifier.firstWhere((e) => columnsNotifier.contains(e)) != -1) { print('changed columns'); // Column currently displayed print(stateManager.columns.length); // All columns including hidden columns print(stateManager.refColumns.originalList.length); // fixed left column print(stateManager.leftFrozenColumns.length); // non-fixed column print(stateManager.bodyColumns.length); // fixed right column print(stateManager.rightFrozenColumns.length); // The index of the column according to the order in which the columns are displayed List<int> // Assuming there is a column [0,1,2,3,4] // If number 3 is fixed to the left, [3,0,1,2,4] print(stateManager.columnIndexesByShowFrozen); } } @override Widget build(BuildContext context) { return Scaffold( body: SafeArea( child: Container( padding: const EdgeInsets.all(15), child: PlutoGrid( columns: columns, rows: rows, onLoaded: (PlutoGridOnLoadedEvent event) { stateManager = event.stateManager; notifierEvent = stateManager.streamNotifier.stream.listen( _notifyListener, ); }, ), ), ), ); } }
