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, andInjectedCRUD.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
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
- 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< stateOverride()?, bool connectWithGlobal = true, SideEffects<T> >List< ? sideEffects, String? debugPrintWhenNotifiedPreMessage, String toDebugString(List<T> >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< fakeCreator()) → voidT> > -
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< fakeCreator()) → voidT> > -
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< ? sideEffects, StateInterceptor<T> >List< ? stateInterceptor, bool shouldOverrideDefaultSideEffects(SnapState<T> >List< snap)?, int debounceDelay = 0, int throttleDelay = 0}) → Future<T> >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