class LoadableState { final LoadingState loadingState; final TState? data; const LoadableState({required this.loadingState, required this.data}); LoadableState loading() => LoadableState(loadingState: LoadingState.loading, data: null); LoadableState cached(TState state) => LoadableState(loadingState: LoadingState.loading, data: state); LoadableState done(TState state) => LoadableState(loadingState: LoadingState.none, data: state); LoadableState error(TState state) => LoadableState(loadingState: LoadingState.none, data: state); bool isBackgroundLoading() => loadingState == LoadingState.loading && data != null; bool hasStateData() => data != null; } enum LoadingState { loading, failed, none, }