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
Implementers
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
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