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);
      }
    });
  }
相关推荐
不吃香菜学java4 小时前
Redis的java客户端
java·开发语言·spring boot·redis·缓存
码事漫谈4 小时前
大模型输出的“隐性结构塌缩”问题及对策
前端·后端
captain3764 小时前
事务___
java·数据库·mysql
北漂Zachary5 小时前
四大编程语言终极对比
android·java·php·laravel
小江的记录本5 小时前
【网络安全】《网络安全常见攻击与防御》(附:《六大攻击核心特性横向对比表》)
java·网络·人工智能·后端·python·安全·web安全
这儿有一堆花5 小时前
前端三件套真的落后了吗?揭开现代 Web 开发的底层逻辑
前端·javascript·css·html5
.Cnn5 小时前
JavaScript 前端基础笔记(网页交互核心)
前端·javascript·笔记·交互
醉酒的李白、5 小时前
Vue3 组件通信本质:Props 下发,Emits 回传
前端·javascript·vue.js
anOnion6 小时前
构建无障碍组件之Window Splitter Pattern
前端·html·交互设计
嗑嗑嗑瓜子的猫6 小时前
Java!它值得!
java·开发语言