ResourceListProvider class

Owns one resource's list: records, search term, active sort, pagination.

Debouncing lives in the screen, not here — a provider owning a timer is untestable without pumping fake async, and the screen is where the keystroke actually arrives.

Inheritance

Constructors

ResourceListProvider({required ResourceDataSource source, required ResourceSchema resource})

Properties

activeFilterCount int
Counts every entry in filters, INCLUDING a filter node's seeded default that the user has not touched — so a resource with two defaulted filters reports 2 from the very first frame, before any interaction. This is deliberate, not a side effect of _seedFilters: Filament's own web panel shows an indicator chip for a defaulted filter too, so this is parity with it, and a default the user cannot see applied is worse than a badge counting one they didn't set themselves. Task 5's filter-count badge should read this as-is rather than trying to subtract seeded defaults back out.
no setter
activeSort ResourceSort?
no setter
errorMessage String?
no setter
filters Map<String, Object?>
name => String | List<String> — a SNAPSHOT copy at the moment of the call, not a live view: both setFilter and clearFilters reassign the backing map rather than mutate it in place, so a previously-returned value never reflects a later change. Re-read this getter after notifyListeners fires (a listening widget already does, on every rebuild) rather than holding onto one call's result.
no setter
hashCode int
The hash code for this object.
no setterinherited
hasListeners bool
Whether any listeners are currently registered.
no setterinherited
hasMore bool
no setter
isLoadingMore bool
no setter
isReordering bool
True while a drag-to-reorder session (P18) is open — see enterReorderMode.
no setter
isSavingReorder bool
True while saveReorder's POST is in flight.
no setter
isUnauthenticated bool
True when the load failed on a 401 — see FilamentTransportException.statusCode.
no setter
loadMoreFailed bool
no setter
records List<ResourceRecord>
no setter
reorderedRecords List<ResourceRecord>
The full, unpaginated list in its current drag order. Only meaningful while isReordering — empty otherwise.
no setter
resource ResourceSchema
final
runtimeType Type
A representation of the runtime type of the object.
no setterinherited
searchTerm String
no setter
source ResourceDataSource
final
status LoadStatus
no setter

Methods

addListener(VoidCallback listener) → void
Register a closure to be called when the object changes.
inherited
clearFilters() Future<void>
Clears EVERY filter this resource's schema publishes — including ones never touched and ones with no seeded default — to the explicit '' "any" value, and refetches: the reorder-ordered page instead while isReordering. Same reasoning as setFilter: writing '' for every published filter name (rather than emptying the map) is what stops the server from reinstating any of their defaults on the next request.
dispose() → void
Discards any resources used by the object.
inherited
enterReorderMode() Future<void>
Opens a drag-to-reorder session (P18): fetches the FULL, unpaginated list ordered by the resource's declared reorder column (source.list(reorder: true)), never the paginated rows already on screen — a drag has to be able to place a record anywhere in the whole set, not just within whichever page happened to be loaded. Sends the list's current searchTerm along — a term already active on the paginated list stays active once reorder mode opens, same as Filament.
exitReorderMode() → void
Abandons the drag session with no write: restores the last server-confirmed order and closes reorder mode.
load() Future<void>
loadMore() Future<void>
Appends the next page. A failure here keeps whatever is already on screen — losing a scrolled list because page four timed out is worse than the missing page — but loadMoreFailed still flips, so the trailing row can show a retry instead of a spinner that never resolves into anything the user is told about.
moveRecord(int oldIndex, int newIndex) → void
Moves one record from oldIndex to newIndex within reorderedRecords, purely locally — no network call.
noSuchMethod(Invocation invocation) → dynamic
Invoked when a nonexistent method or property is accessed.
inherited
notifyListeners() → void
Call all the registered listeners.
inherited
refresh({bool keepPrevious = false}) Future<void>
Refetches page one. keepPrevious is used by background polling so an unchanged or transiently-failed refresh never flashes a skeleton over a list the user was already reading.
removeListener(VoidCallback listener) → void
Remove a previously registered closure from the list of closures that are notified when the object changes.
inherited
saveReorder() Future<void>
Commits the current drag order: POST {resource}/reorder with every record CURRENTLY VISIBLE's id, first entry first — the searched subset when a search term is active, same as _fetchReorderedPage fetched. This matches Filament's own reorder-while-filtered behavior: the server renumbers only the posted ids 1..N among themselves, leaving records outside the filter wherever they already were.
While isReordering, this refetches the reorder-ordered list WITH the term (?reorder=1&search=...) instead of the hidden paginated list — Filament keeps its own search filter active while reordering, and a search box that visibly renders but only ever touches the paginated list underneath reorderedRecords would be exactly the silent no-op this screen's own class doc argues against.
searchFilterOptions(String filter, String query) Future<OptionsPage>
Searches one filter's remote options through an optional source capability. Existing custom ResourceDataSource implementations remain source-compatible; opening a remote filter on one reports a real error state instead of pretending the server returned no matches.
setFilter(String name, Object? value) Future<void>
Sets or clears one filter (P24) and refetches page one — the reorder-ordered page instead, while isReordering, same as search.
sortBy(ResourceSort sort) Future<void>
toString() String
A string representation of this object.
inherited

Operators

operator ==(Object other) bool
The equality operator.
inherited