Request<T> class

Request is a listenable data source that loads data in either synchronous or asynchronous manner.

Similar to Future and Stream, Request can hold 3-state result, which could data, error or waiting. Unlike Future and Stream, Request also provide method to read or write result in both synchronous or asynchronous way.

Request is designed to be used with BuildAsyncSnapshot protocol. It can be consumed with BuildAsyncSnapshotActions.buildRequest as same as Future and Stream.

Request is abstract class, a derived class should be created for particular use case. Derived class should at least implement load method to explicitly specify how request should load data.

load can be either synchronous or asynchronous, it can return the result directly if data can be loaded synchronously

  • Returns value directly if result can be loaded synchronously
  • Returns a Future that holds result if data loaded asynchronously

load method should do its job without any parameters, consider to add parameters required by load method as Request's field. Depends on whether those parameter fields are mutable or final,Request can be either mutable or immutable.

Request only start to load data when Request.resultStream is listened, typically it is when Request is listenable by a widget with BuildAsyncSnapshot protocol. This behavior can be customized for different scenarios:

The loading behaviour of Request can be customized for different scenario, check document for Request constructor for more detail

Request is designed to handle asynchronous scenario, so its API is more complex and could be more expensive to instantiate. To deal with synchronous data only, consider use ResultNotifier instead of Request


Request({T initialValue, bool loadOnListened = true, bool initialLoadQuietly = false})
Constructor of Request.


currentData → T
Get latest data.
currentError Object
Get latest error
currentErrorStackTrace StackTrace
Get latest stack trace of latest error
ensuredCurrentData → T
Similar to currentData, but throws StateError when data is not available
firstResult Future<T>
Returns a future which resolves when first data or error fetched
hasError bool
Check whether request has a error
hashCode int
The hash code for this object.
read-only, inherited
hasResult bool
Check whether request has a data or an error.
hasValue bool
Check whether request has a data
isLoading bool
Check whether request is in loading state
resultStream Stream<T>
The stream that provides the latest result of current request
runtimeType Type
A representation of the runtime type of the object.
read-only, inherited


execute(FutureOr<T> action(), {bool quiet = false}) Future
Execute the action, updates request with the return value from action.
load() FutureOr<T>
Contract that specifies how request loads data
markAsLoading() → void
Update request as loading synchronously
noSuchMethod(Invocation invocation) → dynamic
Invoked when a non-existent method or property is accessed.
putError(Object error, [StackTrace stackTrace]) → void
Update request with error synchronously
putValue(T value) → void
Update request with value synchronously
reload({dynamic quiet = false}) Future
Enforce a request to reload data with current parameters
toString() String
A string representation of this object.
update(FutureOr<T> value, {dynamic quiet = false}) Future
Update request with value either synchronously or asynchronously
updateValue(ValueUpdater<T> updater) → void
Update request with updater synchronously
updateValueAsync(AsyncValueUpdater<T> updater, {dynamic quiet = false}) Future
Update request with updater asynchronously


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