BloomPendingIndicator class final

A surgical, non-intrusive pending progress indicator that isolates background re-evaluation signals from the primary UI view tree.

Implements PreferredSizeWidget for direct embedding into AppBar.bottom, Scaffold, or top-level layout headers.

System Architectural Flow

┌────────────────────────────────────────────────────────────────────────┐
│                     BloomPendingIndicator SWR Flow                      │
├────────────────────────────────────────────────────────────────────────┤
│                                                                        │
│         [ Upstream SWR: source.retained(pending: pendingCoupler) ]      │
│                                     │                                  │
│        ┌────────────────────────────┴────────────────────────────┐     │
│        ▼                                                         ▼     │
│   Primary Data (Bloom<T>)                                Coupler (Bloom<bool>)
│        │                                                         │     │
│        ▼                                                         ▼     │
│   [NewsListView] (Intact! Rebuild count: 0)        [BloomPendingIndicator]│
│                                                    (Rebuilds surgically!)
│                                                                        │
└────────────────────────────────────────────────────────────────────────┘

Key Invariants & Architectural Benefits

  1. Zero Primary Rebuilds: Renders background pending signals without invalidating or rebuilding the main data view subtree.
  2. Continuous Frame Driving: Driven by ComposedDriveFunctor (composed.drive) for smooth 60/120fps progress animation without manual ticker controllers.
  3. App Header Compatibility: Implements PreferredSizeWidget for drop-in embedding in AppBar.bottom.

Examples

final pendingCoupler = BloomCoupler<bool>.late();
late final newsFeedBloom = remoteFeed.retained(pending: pendingCoupler);

Widget build(BuildContext context) {
  return Scaffold(
    appBar: AppBar(
      title: const Text('Live Feed'),
      bottom: BloomPendingIndicator(target: pendingCoupler.bloom),
    ),
    body: composed((context, via) => NewsListView(via(newsFeedBloom))),
  );
}
Inheritance
Implemented types

Constructors

BloomPendingIndicator({Key? key, required Bloom<bool> target, double height = 2.0, Color? color, Color? backgroundColor, Widget builder(BuildContext context, bool isPending)?})
Creates a surgical isolated pending progress indicator.
const

Properties

backgroundColor → Color?
Background track color (defaults to transparent Color(0x00000000)).
final
builder → Widget Function(BuildContext context, bool isPending)?
Optional custom builder for full indicator rendering customization.
final
color → Color?
Foreground active progress indicator color (defaults to Color(0xFF2196F3)).
final
hashCode → int
The hash code for this object.
no setterinherited
height → double
The height of the pending indicator (defaults to 2.0).
final
key → Key?
Controls how one widget replaces another widget in the tree.
finalinherited
preferredSize → Size
The size this widget would prefer if it were otherwise unconstrained.
no setteroverride
runtimeType → Type
A representation of the runtime type of the object.
no setterinherited
target → Bloom<bool>
The target reactive node providing the pending boolean signal.
final

Methods

build(BuildContext context, BloomVia via) → Widget
Describes the part of the user interface represented by this widget, with explicit BloomVia tracking.
override
createElement() → BloomElement
Inflates this configuration to a concrete instance.
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