flutter 写一个通用方法,通过回调返回数据

//先获取数据,设置回调

c 复制代码
  ///获取好友资料
  getUserArchivesInfo(int? userId,
      {Function(bool isCache, ArchivesInfo archivesInfo)? onSuccess,
      Function(String error)? onError}) {
    RxHttp<ArchivesInfo>()
      ..init()
      ..setBaseUrl(Api.BASE_API)
      ..setPath(Api.GET_OTHER_ARCHIVES_INFO)
      ..setCacheMode(CacheMode.FIRST_CACHE_THEN_REQUEST)
      ..setParams({"user_id": userId})
      ..setJsonTransFrom((data) {
        PrintUtil.prints('$TAG 获取好友资料 ===> $data');
        return ArchivesInfo.fromJson(json.decoder.convert(data)['data']);
      })
      ..call(
          NetCallback(onNetFinish: (archivesInfo) {
            if (onSuccess != null) {
              CacheFileString().loadStringAsync(archivesInfo.avatar ?? '');
              CacheFileString().loadStringAsync(archivesInfo.avatarThumb ?? '');
              archivesInfo.userIMID = '${archivesInfo.userID}';
              archivesInfo.conversationID = 'c2c_${archivesInfo.userID}';
              onSuccess(false, archivesInfo);
            }
          }, onCacheFinish: (archivesInfo) {
            if (onSuccess != null) {
              onSuccess(true, archivesInfo);
            }
          }, onNetError: (errorCode, error) {
            if (onError != null) {
              onError('$error ($errorCode)');
            }
          }),
          server: Servers.microServices);
  }

//在回调处处理数据和刷新页面

c 复制代码
  ///获取好友的档案资料
  _getOtherArchivesInfo() {
    WsImUserInfoUtil().getUserArchivesInfo(int.parse(userID),
        onSuccess: (isCache, archivesInfo) {
      if (!isCache) {
        WsImDBUtil().updateUserInfo('c2c_$userID', archivesInfo, false);
      }
      print('回调了多少次');
      setOtherArchivesInfo(archivesInfo);
    }, onError: (error) {
      showToast(error);
    });
  }

//处理数据的方法

c 复制代码
setOtherArchivesInfo(data) {
    mySetState(() {
      // archivesInfo = ArchivesInfo.fromJson(data);
      archivesInfo = data;
      String photoIds = '';
      String videoIds = '';

      if (archivesInfo != null) {
        if (archivesInfo!.photos != null) {
          for (int i = 0; i < archivesInfo!.photos!.length; i++) {
            if (i == archivesInfo!.photos!.length - 1) {
              photoIds += '${archivesInfo!.photos![i].photoId}';
            } else {
              photoIds += '${archivesInfo!.photos![i].photoId},';
            }
          }
        }

        if (archivesInfo!.videos != null) {
          for (int i = 0; i < archivesInfo!.videos!.length; i++) {
            if (i == archivesInfo!.videos!.length - 1) {
              videoIds += '${archivesInfo!.videos![i].videoId}';
            } else {
              videoIds += '${archivesInfo!.videos![i].videoId},';
            }
          }
        }
      }

      if (photoIds != '') {
        _getPhotoState(archivesInfo!.photos!, photoIds);
      }

      if (videoIds != '') {
        _getVideoState(archivesInfo!.videos!, videoIds);
      }
    });
  }
相关推荐
meichaoWen25 分钟前
【Vue3】vue3的全面学习(一)
前端·javascript·学习
Y***h18741 分钟前
第二章 Spring中的Bean
java·后端·spring
小猪努力学前端1 小时前
在 React + React Router v7 SSR 项目里做多端适配,我踩的两个坑
前端·react.js
q***d1731 小时前
React桌面应用开发
前端·react.js·前端框架
8***29311 小时前
解决 Tomcat 跨域问题 - Tomcat 配置静态文件和 Java Web 服务(Spring MVC Springboot)同时允许跨域
java·前端·spring
0***141 小时前
React计算机视觉应用
前端·react.js·计算机视觉
Q***K551 小时前
React高级
前端·react.js·前端框架
c***97981 小时前
React语音识别案例
前端·react.js·语音识别
CoderYanger1 小时前
优选算法-栈:67.基本计算器Ⅱ
java·开发语言·算法·leetcode·职场和发展·1024程序员节
q***57741 小时前
WebSpoon9.0(KETTLE的WEB版本)编译 + tomcatdocker部署 + 远程调试教程
前端