ForEachStore<ID, GlobalState, GlobalAction, ItemState, ItemAction> class
A widget that renders each element of a collection with its own scoped Store.
Each item gets a scoped store derived from the parent store. Items are cached by ID for performance - only new items trigger widget creation. Removed items have their cached widgets cleaned up automatically.
Constructors
- ForEachStore.indexed - identifies items by their index in the collection.
- ForEachStore.id - identifies items by a custom ID function.
- ForEachStore.indexedId - provides both index and custom ID to the builder.
Example
ForEachStore.id(
store: store,
getIterable: (state) => state.contacts,
embedAction: (id, action) => AppAction.contact(id, action),
toID: (contact) => contact.id,
iterableBuilder: IterableBuilder.listViewBuilder(),
builder: (context, contactStore, id) =>
ContactCard(store: contactStore),
);
See also:
- IterableBuilder for layout builder factories
- ForEachIterableReducer.forEach for the corresponding reducer
- Inheritance
-
- Object
- DiagnosticableTree
- Widget
- StatelessWidget
- ForEachStore
Properties
-
builder
→ Widget Function(BuildContext context, Store<
ItemState, ItemAction> store, ID id, int index, int itemCount) -
Builder function called for each item.
final
- embedAction → GlobalAction Function(ID id, ItemAction localAction)
-
Embeds a local item action into the global action type.
final
-
getIterable
→ Iterable<
ItemState> Function(GlobalState state) -
Extracts the iterable collection from the global state.
final
- hashCode → int
-
The hash code for this object.
no setterinherited
- iterableBuilder → Widget Function({required Widget? itemBuilder(BuildContext, int), int? itemCount})
-
Factory that creates the layout widget (e.g., ListView, Column).
final
- key → Key?
-
Controls how one widget replaces another widget in the tree.
finalinherited
- onEmptyBuilder → Widget Function(BuildContext)?
-
Builder shown when the collection is empty. If
null, an empty Container is rendered.final - runtimeType → Type
-
A representation of the runtime type of the object.
no setterinherited
-
store
→ Store<
GlobalState, GlobalAction> -
The parent store containing the collection state.
final
- toID → ID Function(int index, ItemState state)
-
Extracts a unique ID from an item and its index.
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
-
populateCache(
BuildContext context, Iterable< ItemState> items) → void - Builds and caches widgets for any new items not yet in the cache.
-
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
Static Methods
-
id<
ID, GlobalState, GlobalAction, ItemState, ItemAction> ({required Widget builder(BuildContext context, Store< ItemState, ItemAction> store, ID id), required Store<GlobalState, GlobalAction> store, required Iterable<ItemState> getIterable(GlobalState state), required GlobalAction embedAction(ID id, ItemAction localAction), required ID toID(ItemState state), required Widget iterableBuilder({required Widget? itemBuilder(BuildContext, int), int? itemCount}), Widget onEmptyBuilder(BuildContext)?}) → ForEachStore<ID, GlobalState, GlobalAction, ItemState, ItemAction> -
Creates a ForEachStore that identifies items by a custom
toIDfunction. -
indexed<
GlobalState, GlobalAction, ItemState, ItemAction> ({required Widget builder(BuildContext context, Store< ItemState, ItemAction> store, int index, int itemCount), required Store<GlobalState, GlobalAction> store, required Iterable<ItemState> getIterable(GlobalState state), required GlobalAction embedAction(int index, ItemAction localAction), required Widget iterableBuilder({required Widget? itemBuilder(BuildContext, int), int? itemCount}), Widget onEmptyBuilder(BuildContext)?}) → ForEachStore<int, GlobalState, GlobalAction, ItemState, ItemAction> - Creates a ForEachStore that identifies items by their index.
-
indexedId<
ID, GlobalState, GlobalAction, ItemState, ItemAction> ({required Widget builder(BuildContext context, Store< ItemState, ItemAction> store, ID id, int index, int itemCount), required Store<GlobalState, GlobalAction> store, required Iterable<ItemState> getIterable(GlobalState state), required GlobalAction embedAction(ID id, ItemAction localAction), required ID toID(ItemState state), required Widget iterableBuilder({required Widget? itemBuilder(BuildContext, int), int? itemCount}), Widget onEmptyBuilder(BuildContext)?}) → ForEachStore<ID, GlobalState, GlobalAction, ItemState, ItemAction> - Creates a ForEachStore that provides both a custom ID and the index to the builder.