SubProvider<T, R> class

Manages a Value T and exposes it to its descendants. Allows for smart Provider-Provider dependencies.

This is a combination of a SubValue and a Provider. Unlike a ProxyProvider where dependencies are sideloaded, this Widget completely recreates the Value when dependencies change.

The create function recieves all Providers which this depends on. The Providers are additionally treated as keys, so create is called again, should the Providers this SubProvider depends on change.

An example of a ProxyProvider

ProxyProvider<MyModel, MyOtherModel>(
  create: (_) => MyOtherModel(),
  update: (_, myModel, myOtherModel) => myOtherModel
    ..myModel = myModel,
  child: /* ... */,
);

looks like this as a SubProvider:

SubProvider<MyModel, MyOtherModel>(
  create: (_, myModel) => MyOtherModel(myModel: myModel),
  child: /* ... */,
);

The notable difference being, that myModel can now once again be passed through the constructor, and does not have to be sideloaded. MyOtherModel is automatically recreated whenever myModel changes.

Just like Providers, SubProviders can be used inside of a MultiProvider.

Inheritance
Implementers

Constructors

SubProvider({required SubProviderCreate<T, R> create, SubProviderUpdate<T, R>? update, SubValueBuilderKeys? keys, SubValueBuilderDispose<R>? dispose, TransitionBuilder? builder, Widget? child})
Manages a Value T and exposes it to its descendants.

Properties

builder TransitionBuilder?
Builds the child of this Widget.
finalinherited
create → SubValueBuilderCreate<R>
Creates the value. Called at least once and everytime keys changes.
finalinherited
dispose → SubValueBuilderDispose<R>?
Disposes the value. Called before recreation and when disposing. Useful for Listeners, etc.
finalinherited
hashCode int
The hash code for this object.
no setterinherited
key Key?
Controls how one widget replaces another widget in the tree.
finalinherited
keys → SubValueBuilderKeys?
Used to decide when to recreate the value. If null, the value is never recreated.
finalinherited
runtimeType Type
A representation of the runtime type of the object.
no setterinherited
update → SubValueBuilderUpdate<R>?
Updates the value. Called every build. If null, does nothing. In the call order, this comes after recreating the value.
finalinherited

Methods

build(BuildContext context) Widget
Describes the part of the user interface represented by this widget.
inherited
buildWithChild(BuildContext context, Widget? child) Widget
A build method that receives an extra child parameter.
inherited
buildWithValue(BuildContext context, R value, Widget? child) Widget
A build method that receives both a value and a child parameter.
inherited
createElement() SingleChildStatelessElement
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}) 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