InventoryGrid class
A data-driven grid over an InventorySnapshot — like QuestViewModel/
LeaderboardEntry, this widget holds no game logic or catalog of its
own; itemBuilder is the caller's own renderer (item icon, rarity
frame, stack count, equipped badge — this package doesn't ship a
concrete item catalog, see ItemDefinition's doc), and a tap never
mutates anything here — the caller's own tap handler is expected to
call InventoryService.consume/setEquipped/moveSlot itself.
Cells beyond snapshot.slots.length render via emptyBuilder (falls
back to a plain dim placeholder) up to unlockedCapacity (default:
snapshot.capacity, meaning no locked cells at all), then
lockedBuilder for the rest — e.g. capacity the player hasn't
unlocked yet with an IAP/level-up. InventorySnapshot itself has no
notion of "locked", so this is purely a presentation concept the
caller opts into via unlockedCapacity.
Stable identity across reorder/update: each filled cell is keyed
by InventorySlot.slotId (never by its list index) via KeyedSubtree
— the exact same reasoning as InventorySlot.slotId's own doc comment
("survives a grant/consume elsewhere in the inventory changing the
list's indices"). Without this, Flutter would reuse a tile's
State/subtree by POSITION when the list reorders, silently handing
item A's rendered state (an in-progress local animation, say) to
wherever item B now sits.
Lazy: built on GridView.builder — only visible cells are ever built/laid out, regardless of how large unlockedCapacity is.
- Inheritance
-
- Object
- DiagnosticableTree
- Widget
- StatelessWidget
- InventoryGrid
Constructors
-
InventoryGrid({Key? key, required InventorySnapshot snapshot, required InventoryItemBuilder itemBuilder, int? unlockedCapacity, InventoryPlaceholderBuilder? emptyBuilder, InventoryPlaceholderBuilder? lockedBuilder, int crossAxisCount = 4, double spacing = NeonTheme.s8, int? selectedSlotId, ValueChanged<
InventorySlot> ? onSlotTap, ValueChanged<InventorySlot> ? onSlotLongPress, void onReorder(int fromSlotId, int toSlotId)?, bool shrinkWrap = false, ScrollPhysics? physics}) -
const
Properties
- crossAxisCount → int
-
final
- emptyBuilder → InventoryPlaceholderBuilder?
-
final
- hashCode → int
-
The hash code for this object.
no setterinherited
- itemBuilder → InventoryItemBuilder
-
final
- key → Key?
-
Controls how one widget replaces another widget in the tree.
finalinherited
- lockedBuilder → InventoryPlaceholderBuilder?
-
final
- onReorder → void Function(int fromSlotId, int toSlotId)?
-
Fires with the dragged slot's id and the drop target slot's id when
a filled cell is dropped onto another —
null(the default) disables drag entirely. Never reorders anything itself; the caller is expected to callInventoryService.moveSlot(or its own reordering command) from this callback.final -
onSlotLongPress
→ ValueChanged<
InventorySlot> ? -
final
-
onSlotTap
→ ValueChanged<
InventorySlot> ? -
final
- physics → ScrollPhysics?
-
final
- runtimeType → Type
-
A representation of the runtime type of the object.
no setterinherited
- selectedSlotId → int?
-
The currently-selected slot's id, or
nullfor no selection — this widget never tracks selection itself (see class doc), a caller wanting selection re-passes the updated id after onSlotTap fires.final - shrinkWrap → bool
-
final
- snapshot → InventorySnapshot
-
final
- spacing → double
-
final
- unlockedCapacity → int?
-
How many of
max(snapshot.capacity, this)total cells are usable (item or empty) rather than locked.nullmeans every capacity slot is unlocked — no locked cells rendered at all.final
Methods
-
build(
BuildContext context) → Widget -
Describes the part of the user interface represented by this widget.
override
-
createElement(
) → StatelessElement -
Creates a StatelessElement to manage this widget's location in the tree.
inherited
-
debugDescribeChildren(
) → List< DiagnosticsNode> -
Returns a list of DiagnosticsNode objects describing this node's
children.
inherited
-
debugFillProperties(
DiagnosticPropertiesBuilder properties) → void -
Add additional properties associated with the node.
inherited
-
noSuchMethod(
Invocation invocation) → dynamic -
Invoked when a nonexistent method or property is accessed.
inherited
-
toDiagnosticsNode(
{String? name, DiagnosticsTreeStyle? style}) → DiagnosticsNode -
Returns a debug representation of the object that is used by debugging
tools and by DiagnosticsNode.toStringDeep.
inherited
-
toString(
{DiagnosticLevel minLevel = DiagnosticLevel.info}) → String -
A string representation of this object.
inherited
-
toStringDeep(
{String prefixLineOne = '', String? prefixOtherLines, DiagnosticLevel minLevel = DiagnosticLevel.debug, int wrapWidth = 65}) → String -
Returns a string representation of this node and its descendants.
inherited
-
toStringShallow(
{String joiner = ', ', DiagnosticLevel minLevel = DiagnosticLevel.debug}) → String -
Returns a one-line detailed description of the object.
inherited
-
toStringShort(
) → String -
A short, textual description of this widget.
inherited
Operators
-
operator ==(
Object other) → bool -
The equality operator.
inherited