Injected<T> class
abstract
A Wrapper class that encloses the state of the model we want to Inject. The state can be mutable or immutable and can also be global or local.
Injected model can be instantiated globally or as a member of classes. They can be instantiated inside the build method without losing the state after rebuilds.
-
Injected instantiation: To instantiate an Injected model, you use RM.inject, RM.injectFuture, RM.injectStream or RM.injectFlavor.
-
Injected lifecycle: The state wrapped by the Injected model has a lifecycle. It is created when first used and destroyed when no longer used even if it is declared globally. Between the creation and the destruction of the state, it can be listened to and mutated to notify its registered listeners.
-
Injected state and null safety: The state of an injected model is null safe, that is it can not be null. For this reason the initial state will be inferred by the library, and in case it is not, it must be defined explicitly. The initial state of primitives is inferred as follows: (int: 0, double, 0.0, String:'', and bool: false). For other non-primitive objects the initial state will be the first created instance.
-
Listening to an Injected: To listen to an Injected model you can use one of the following options:
ReactiveModelBuilder.listen
,ReactiveModelBuilder.futureBuilder
,ReactiveModelBuilder.streamBuilder
,ReactiveModelBuilder.rebuilder
,ReactiveModelBuilder.whenRebuilder
, andReactiveModelBuilder.whenRebuilderOr
. -
Injected state mutation: To mutate the state and notify listeners, you use ReactiveModel.state setter, ReactiveModel.setState, or ReactiveModel.toggle if the state is bool. You can also notify listeners without changing the state using ReactiveModel.notify. You can also refresh the state to its initial state and reinvoke the creation function then notify listeners using ReactiveModel.refresh.
-
Injected state cleaning: When the state is disposed of, its list of listeners is cleared, and if the state is waiting for a Future or subscribed to a Stream, it will cancel them to free resources.
-
State persistence: Injected state can be persisted using PersistState. By default the state is persisted each time the state is mutated. You can set it to persist manually or when the state is disposed. You can also throttle state persistence for the time you want.
-
Undo redo state mutation: You can undo or redo state mutation by defining the
undoStackLength
parameter of RM.inject RM.injectFuture, RM.injectStream or RM.injectFlavor. After state mutation you can redo it usingReactiveModelUndoRedoState.undoState
and redo it usingReactiveModelUndoRedoState.redoState
. -
Injected model dependence Injected models can depend on other Injected models and recalculate its state and notify its listeners whenever any of its of the Inject model that it depends on emits a notification.
-
Injected mock for testing: Injected model can be easily mocked to fake implementation in tests using : Injected.injectMock, Injected.injectFutureMock, or Injected.injectStreamMock.
- Inheritance
-
- Object
- ReactiveModel<
T> - Injected
- Implementers
- Available Extensions
Constructors
- Injected()
Properties
- autoDisposeWhenNotUsed → bool
-
no setterinherited
- canRedoState → bool
-
Whether the state can be redone.
no setter
- canUndoState → bool
-
Whether the state can be done
no setter
- connectionState → ConnectionState
-
no setterinherited
- customStatus ↔ Object?
-
Custom status of the state. Set manually to mark the state with a particular
tag to be used in your logic.
getter/setter pairinherited
- debugMessage ↔ String?
-
getter/setter pairinherited
- error → dynamic
-
The error
no setterinherited
- hasData → bool
-
The state is mutated successfully.
no setterinherited
- hasError → bool
-
The stats has error
no setterinherited
- hashCode → int
-
The hash code for this object.
no setterinherited
- hasObservers → bool
-
Whether the state has observers
no setterinherited
- isActive → bool
-
Whether the state is active or not.
no setterinherited
- isDone → bool
-
The state is mutated using a stream and the stream is done.
no setterinherited
- isIdle → bool
-
The state is initialized and never mutated.
no setterinherited
- isWaiting → bool
-
The state is waiting for and asynchronous task to end.
no setterinherited
- observerLength → int
-
no setterinherited
-
oldSnapState
→ SnapState<
T> -
no setterinherited
- rebuild → _Rebuild
-
Callable class used to listen to a reactive (injected) model and rebuild widget
latefinalinherited
- runtimeType → Type
-
A representation of the runtime type of the object.
no setterinherited
-
snapState
↔ SnapState<
T> -
A snap representation of the state
getter/setter pairinherited
- state ↔ T
-
Sync state mutation.
getter/setter pairinherited
-
stateAsync
↔ Future<
T> -
It is a future of the state. The future is active if the state is on the
isWaiting status.
getter/setter pairinherited
- subscription → StreamSubscription?
-
It is not null if the state is waiting for a Future or is subscribed to a
Stream
no setterinherited
Methods
-
call(
BuildContext context, {bool defaultToGlobal = false}) → Injected< T> - Obtain the Injected model from the nearest InheritedWidget inserted using inherited.
-
catchError(
void onError(dynamic error, StackTrace s)) → Future< InjectedBase< T> > -
inherited
-
clearUndoStack(
) → void - Clear undoStack;
-
deletePersistState(
) → void - Delete the state form the persistence store
-
dispose(
) → void -
Dispose the state.
inherited
-
future<
F> (Future< F> future(T s)) → Future<F> Function() -
inherited(
{Key? key, required Widget builder(BuildContext), required FutureOr< T> stateOverride()?, bool connectWithGlobal = true, SideEffects? sideEffects, String? debugPrintWhenNotifiedPreMessage, String toDebugString(T?)?}) → Widget - Provide the injected model using an InheritedWidget that wraps its state.
-
initializeState(
) → FutureOr< T?> -
Initialize the state
inherited
-
injectFutureMock(
Future< T> fakeCreator()) → void - Inject a fake future implementation of this injected model.
-
injectMock(
T fakeCreator()) → void - Inject a fake implementation of this injected model.
-
injectStreamMock(
Stream< T> fakeCreator()) → void - Inject a fake stream implementation of this injected model.
-
noSuchMethod(
Invocation invocation) → dynamic -
Invoked when a nonexistent method or property is accessed.
inherited
-
notify(
) → void -
Notify observers
inherited
-
of(
BuildContext context, {bool defaultToGlobal = false}) → T - Obtain the state from the nearest InheritedWidget inserted using inherited.
-
onAll<
R> ({R onIdle()?, required R onWaiting()?, required R onError(dynamic error, VoidCallback refreshError)?, required R onData(T data)}) → R -
inherited
-
onErrorRefresher(
) → void -
IF the state is in the hasError status, The last callback that causes the
error can be reinvoked.
inherited
-
onOrElse<
R> ({R onIdle()?, R onWaiting()?, R onError(dynamic error, VoidCallback refreshError)?, R onData(T data)?, required R orElse(T data)}) → R -
inherited
-
persistState(
) → void - Persist the state
-
redoState(
) → void - Redo to the next valid state (isWaiting and hasError are ignored)
-
refresh(
) → Future< T?> -
Refresh the Injected state. Refreshing the state means reinitialize
it and reinvoke its creation function and notify its listeners.
inherited
-
reInherited(
{Key? key, required BuildContext context, required Widget builder(BuildContext)}) → Widget - Provide the Injected model to another widget tree branch.
-
setState<
R> (FutureOr< R> fn(T s), {void onData(T data)?, void onError(dynamic error)?, On<void> ? onSetState, void onRebuildState()?, SideEffects<T> ? sideEffects, SnapState<T> ? stateInterceptor(SnapState<T> currentSnap, SnapState<T> nextSnap)?, int debounceDelay = 0, int throttleDelay = 0, bool shouldAwait = false, bool skipWaiting = false, BuildContext? context, bool shouldOverrideDefaultSideEffects(SnapState<T> snap)?}) → Future<T> -
Mutate the state of the model and notify observers.
inherited
-
setToHasData(
T data) → void -
inherited
-
setToHasError(
dynamic error, {StackTrace? stackTrace, VoidCallback? refresher}) → void -
inherited
-
setToIsIdle(
) → void -
inherited
-
setToIsWaiting(
) → void -
inherited
-
subscribeToRM(
void fn(SnapState< T> ? snap)) → VoidCallback -
Subscribe to the state
inherited
-
toggle(
) → void -
If the state is bool, toggle it and notify listeners
inherited
-
toString(
) → String -
A string representation of this object.
inherited
-
undoState(
) → void - Undo to the last valid state (isWaiting and hasError are ignored)
-
whenConnectionState<
R> ({required R onIdle(), required R onWaiting(), required R onData(T snapState), required R onError(dynamic error), bool catchError = true}) → R -
Exhaustively switch over all the possible statuses of connectionState.
Used mostly to return Widgets.
inherited
Operators
-
operator ==(
Object other) → bool -
The equality operator.
inherited