handleResult method

  1. @override
void handleResult(
  1. ViewStateHttpData<List<T>, E> httpData,
  2. LoadType loadType
)
override

Implementation

@override
void handleResult(
    ViewStateHttpData<List<T>, E> httpData, LoadType loadType) async {
  if (httpData.success) {
    if (loadType == LoadType.refresh) {
      _currentPage = 1;
    } else if (loadType == LoadType.loadMore) {
      _currentPage++;
    }

    // 自动推断hasMore逻辑
    if (_autoInferHasMore) {
      _autoInferHasMoreLogic(httpData.data ?? [], loadType);
    }
    if (EasyUtil.isNotEmpty(httpData.data)) {
      if (loadType == LoadType.refresh && getShouldClearRefresh()) {
        data.clear();
      }
      await handleAddList(httpData, loadType);
      setStateByLoadType(loadType);
    } else if (loadType == LoadType.refresh) {
      if (isRefreshBusy) {
        setRefreshSuccessButEmpty();
      } else {
        setSuccessEmpty();
      }
    } else if (loadType == LoadType.loadMore) {
      if (isLoadMoreBusy) {
        setLoadMoreSuccessButEmpty();
      } else {
        refresh();
      }
    }
  } else {
    if (loadType == LoadType.refresh) {
      _currentPage = 0;
      if (getShouldClearWhenRefreshError()) {
        data.clear();
        refresh();
      }
    } else if (loadType == LoadType.loadMore) {
      // 加载更多失败时,页码回退
      _currentPage = _currentPage > 0 ? _currentPage - 1 : 0;
    }

    if (data.isEmpty) {
      setError(httpData.error);
    } else {
      if (isRefreshBusy && loadType == LoadType.refresh) {
        setRefreshError(httpData.error);
      } else if (isLoadMoreBusy && loadType == LoadType.loadMore) {
        setLoadMoreError(httpData.error);
      } else {
        refresh();
      }
    }
  }
}