ffRefreshResult method

  1. @override
dynamic ffRefreshResult(
  1. bool isHead,
  2. dynamic api(
    1. IRefreshParam? iRefreshParam
    ),
  3. FFScaffoldState? state, {
  4. IRefreshParam? iRefreshParam,
})
override

处理结果

Implementation

@override
ffRefreshResult(bool isHead, Function(IRefreshParam? iRefreshParam) api,
    FFScaffoldState? state,
    {IRefreshParam? iRefreshParam}) async {
  if (isHead) {
    ffrefreshApiStatus = RefreshApiStatus.status_refreshing_head;
  } else {
    ffrefreshApiStatus = RefreshApiStatus.status_refreshing_foot;
  }

  if (isHead) {
    setPage(1);
  }

  //开始请求
  MFFRequestControl requestControl = MFFRequestControl();
  //拿到结果
  IFFR r = await requestControl.ffApiIs(api, iRefreshParam);
  ffrefreshApiStatus = RefreshApiStatus.status_none;

  ///错误页 无数据也能刷新 需要处理
  if (r.rStatus == RStatus.noData || r.rStatus == RStatus.error) {
    if (refreshController.headerStatus == RefreshStatus.refreshing) {
      if (r.rStatus == RStatus.error) {
        refreshController.refreshFailed();
      } else if (r.rStatus == RStatus.noData) {
        refreshController.refreshCompleted();
      }
    }
  }

  //根据请求结果区分
  if (isHead == true) {
    ffDidMaxNumber(false);
    //头刷新
    switch (r.rStatus) {
      case RStatus.result: //有结果
        {
          state?.datas = [];

          if (!FFEmpty.listIsEmpty(r.data)) {
            List dataList = r.data as List;
            for (int i = 0; i < dataList.length; i++) {
              state?.datas.add(dataList[i]);
            }
          }

          setPage(getPage() + 1);
          if (state?.iffScaffold.ffPageStatus == FFPageStatus.firstLoading) {
            //当前是第一次进来
            state?.iffScaffold.ffPageStatus = FFPageStatus.result;
          } else if (state?.iffScaffold.ffPageStatus == FFPageStatus.result) {
            state?.iffScaffold.ffPageStatus = FFPageStatus.result;
            // 当前结果页
            ffRefreshCompleted(
                resultStatus: RefreshResultStatus.status_result);
          } else if (state?.iffScaffold.ffPageStatus ==
                  FFPageStatus.netError ||
              state?.iffScaffold.ffPageStatus == FFPageStatus.noData) {
            //当前错误页 或者 无数据页
            ffRefreshCompleted(
                resultStatus: RefreshResultStatus.status_result);
            await Future.delayed(duration, () {
              state?.iffScaffold.ffPageStatus = FFPageStatus.result;
            });
          }

          break;
        }
      case RStatus.noData:
        {
          if (state?.iffScaffold.ffPageStatus == FFPageStatus.netError ||
              state?.iffScaffold.ffPageStatus == FFPageStatus.result) {
            //从错误页过来
            await Future.delayed(duration, () {
              state?.iffScaffold.ffPageStatus = FFPageStatus.noData;
            });
          } else {
            state?.iffScaffold.ffPageStatus = FFPageStatus.noData;
          }
          break;
        }
      case RStatus.error:
        {
          if (state?.iffScaffold.ffPageStatus == FFPageStatus.noData ||
              state?.iffScaffold.ffPageStatus == FFPageStatus.result) {
            //从无数据页过来
            await Future.delayed(duration, () {
              state?.iffScaffold.ffPageStatus = FFPageStatus.netError;
            });
          } else {
            state?.iffScaffold.ffPageStatus = FFPageStatus.netError;
          }
          break;
        }
      case RStatus.timeout:
        {
          state?.iffScaffold.ffPageStatus = FFPageStatus.netError;

          break;
        }
    }
  } else {
    //尾刷新
    switch (r.rStatus) {
      case RStatus.result: //有结果
        {
          state?.datas.addAll(r.data);
          int length = state?.datas.length ?? 0;
          int maxLength = ffMaxNumberOfLines() ?? 999999999;
          if (length > maxLength) {
            //超过了最大的值

            var obj = state?.datas.sublist(0, maxLength);
            state?.datas = obj ?? [];
            ffDidMaxNumber(true);
            ffLoadComplete(resultStatus: RefreshResultStatus.status_noData);
          } else {
            ffDidMaxNumber(false);
            setPage(getPage() + 1);
            ffLoadComplete(resultStatus: RefreshResultStatus.status_result);
          }
          break;
        }
      case RStatus.noData:
        {
          ffLoadComplete(resultStatus: RefreshResultStatus.status_noData);
          break;
        }
      case RStatus.error:
        {
          ffLoadComplete(resultStatus: RefreshResultStatus.status_netErr);
          break;
        }
      case RStatus.timeout:
        {
          ffLoadComplete(resultStatus: RefreshResultStatus.status_timeout);
          break;
        }
    }
  }

  state?.setState(() {});
}