import 'package:freezed_annotation/freezed_annotation.dart'; part 'data_grid_state.freezed.dart'; /// State for a DataGrid instance. @freezed class DataGridState with _$DataGridState { const factory DataGridState({ /// Current items being displayed. @Default([]) List items, /// Total count of items (may differ from items.length for pagination). @Default(0) int totalCount, /// Whether data is currently loading. @Default(false) bool isLoading, /// Whether initial load is in progress. @Default(true) bool isInitialLoad, /// Error that occurred during loading. Object? error, /// Current search query. @Default('') String searchQuery, /// Index of the column currently sorted by. int? sortColumnIndex, /// Whether sort is descending. @Default(false) bool sortDescending, /// Currently selected item IDs (if selectable). @Default({}) Set selectedIds, /// Current page (for paginated mode). @Default(0) int currentPage, /// Whether more items can be loaded (for infinite scroll). @Default(false) bool hasMore, }) = _DataGridState; } /// Extension methods for DataGridState. extension DataGridStateX on DataGridState { /// Whether the grid has an error. bool get hasError => error != null; /// Whether the grid is empty (no items and not loading). bool get isEmpty => items.isEmpty && !isLoading && !hasError; /// Whether all visible items are selected. bool get allSelected => items.isNotEmpty && selectedIds.length == items.length; /// Whether some (but not all) items are selected. bool get someSelected => selectedIds.isNotEmpty && selectedIds.length < items.length; /// Number of selected items. int get selectedCount => selectedIds.length; }