38 lines
977 B
Dart
38 lines
977 B
Dart
|
|
class LoadableState<TState> {
|
|
final LoadingState loadingState;
|
|
final TState? data;
|
|
|
|
const LoadableState({required this.loadingState, required this.data});
|
|
|
|
LoadableState<TState> loading() =>
|
|
LoadableState<TState>(loadingState: LoadingState.loading, data: null);
|
|
|
|
LoadableState<TState> cached(TState state) =>
|
|
LoadableState<TState>(loadingState: LoadingState.loading, data: state);
|
|
|
|
LoadableState<TState> done(TState state) =>
|
|
LoadableState<TState>(loadingState: LoadingState.none, data: state);
|
|
|
|
LoadableState<TState> error({TState? state}) =>
|
|
LoadableState<TState>(loadingState: LoadingState.failed, data: state);
|
|
|
|
bool isBackgroundLoading() =>
|
|
loadingState == LoadingState.loading && data != null;
|
|
|
|
bool hasError() =>
|
|
loadingState == LoadingState.failed;
|
|
|
|
bool hasStateData() =>
|
|
data != null;
|
|
|
|
bool errorBarVisible() =>
|
|
hasError() && hasStateData();
|
|
}
|
|
|
|
enum LoadingState {
|
|
loading,
|
|
failed,
|
|
none,
|
|
}
|