InjectedCRUD<T, P> class abstract

Injection of a state that can create, read, update and delete from a backend or database service.

This injected state abstracts the best practices of the clean architecture to come out with a simple, clean, and testable approach to manage CRUD operations.

The approach consists of the following steps:

  • Define uer Item Model. (The name is up to you).
  • You may define a class (or enum) to parametrize the query.
  • Your repository must implements ICRUD<T, P> where T is the Item type and P is the parameter type. with ICRUD<T, P> you define CRUD methods.
  • Instantiate an InjectedCRUD object using RM.injectCRUD method.
  • Later on use InjectedCRUD.crud.create, InjectedCRUD.auth.read, InjectedCRUD.auth.update, and InjectedCRUD.auth.delete item.
  • In the UI you can use ReactiveStatelessWidget, OnReactive, or ObBuilder to listen the this injected state and define the appropriate view for each state.
  • You may use InjectedCRUD.item.inherited for performant list of item rendering.

See: InjectedCRUD.crud, _CRUDService.read, _CRUDService.create, _CRUDService.update, _CRUDService.delete,InjectedCRUD.item, _Item.inherited and OnCRUDBuilder

Implemented types
Available extensions

Constructors

InjectedCRUD()

Properties

canRedoState → bool
Whether the state can be redone.
no setterinherited
canUndoState → bool
Whether the state can be done
no setterinherited
connectionState → ConnectionState
no setterinherited
crud → _CRUDService<T, P>
To create Read Update and Delete
no setter
currentWidget → Widget?

Available on Injected<List<SavedPopWidget?>>, provided by the PopWidgetsX extension

no setter
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
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 listeners 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
isOnCRUD → bool
Whether the state is waiting for a CRUD operation to finish
no setter
isStateInitialized → bool
no setterinherited
isWaiting → bool
The state is waiting for and asynchronous task to end.
no setterinherited
item → _Item<T, P>
Optimized for item displaying. Used with
latefinal
rebuild → _Rebuild<T, P>

Available on InjectedCRUD<T, P>, provided by the InjectedCRUDX extension

listen to InjectedCRUD
no setter
runtimeType → Type
A representation of the runtime type of the object.
no setterinherited
snapState → SnapState<List<T>>
A snap representation of the state
no setterinherited
state ↔ List<T>
The current state
getter/setter pairinherited
stateAsync ↔ Future<List<T>>
The current Async state
getter/setter pairinherited
subscription ↔ StreamSubscription?
It is not null if the state is waiting for a Future or is subscribed to a Stream
getter/setter pairinherited

Methods

addCleaner(VoidCallback listener) → VoidCallback
Add a callback to be executed when the state is disposed of.
inherited
addObserver({required ObserveReactiveModel listener, bool shouldAutoClean = false, bool isSideEffects = true}) → VoidCallback
Add observer to this state.
inherited
call(BuildContext context, {bool defaultToGlobal = false}) → Injected<List<T>>
Obtain the Injected model from the nearest InheritedWidget inserted using inherited.
inherited
cleanState() → void
Clean the state
inherited
clearUndoStack() → void
Clear undoStack;
inherited
deletePersistState() → void
Delete the state form the persistence store
inherited
dispose() → void
Dispose the state
inherited
disposeIfNotUsed() → void
Dispose the state if it has no listener
inherited
getRepoAs<R extends ICRUD<T, P>>() → R
Get the repository implementation
inherited({Key? key, required Widget builder(BuildContext), required FutureOr<List<T>> stateOverride()?, bool connectWithGlobal = true, SideEffects<List<T>>? sideEffects, String? debugPrintWhenNotifiedPreMessage, String toDebugString(List<T>?)?}) → Widget
Provide the injected model using an InheritedWidget that wraps its state.
inherited
initializeState() → FutureOr<List<T>?>
Initialize the state
inherited
injectCRUDMock(ICRUD<T, P> fakeRepository()) → void
Inject a fake implementation of this injected model.
injectFutureMock(Future<List<T>> fakeCreator()) → void
Inject a fake future implementation of this injected model.
inherited
injectMock(List<T> fakeCreator()) → void
Inject a fake implementation of this injected model.
inherited
injectStreamMock(Stream<List<T>> fakeCreator()) → void
Inject a fake stream implementation of this injected model.
inherited
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}) → List<T>
Obtain the state from the nearest InheritedWidget inserted using inherited.
inherited
onAll<R>({R onIdle()?, required R onWaiting()?, required R onError(dynamic error, VoidCallback refreshError)?, required R onData(List<T> data)}) → R
Listen to the injected Model and rebuild when it emits a notification.
inherited
onOrElse<R>({R onIdle()?, R onWaiting()?, R onError(dynamic error, VoidCallback refreshError)?, R onData(List<T> data)?, required R orElse(List<T> data)}) → R
Listen to the injected Model and rebuild when it emits a notification.
inherited
persistState() → void
Persist the state
inherited
redoState() → void
Redo to the next valid state (isWaiting and hasError are ignored)
inherited
refresh() → Future<List<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.
inherited
setState(Object? mutator(List<T> s), {SideEffects<List<T>>? sideEffects, StateInterceptor<List<T>>? stateInterceptor, bool shouldOverrideDefaultSideEffects(SnapState<List<T>> snap)?, int debounceDelay = 0, int throttleDelay = 0}) → Future<List<T>?>
Mutate the state of the model and notify observers.
inherited
setToHasData(dynamic data) → void
Set the state to the data status
inherited
setToHasError(dynamic error, {StackTrace? stackTrace, VoidCallback? refresher}) → void
Set the state to the error status
inherited
setToIsIdle() → void
Set the state to the idle status
inherited
setToIsWaiting() → void
Set the state to the waiting status
inherited
toString() → String
A string representation of this object.
inherited
undoState() → void
Undo to the last valid state (isWaiting and hasError are ignored)
inherited
whenConnectionState<R>({R onIdle()?, required R onWaiting()?, required R onError(dynamic error)?, required R onData(List<T> data)}) → R
inherited

Operators

operator ==(Object other) → bool
The equality operator.
inherited