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);
      }
    });
  }
相关推荐
咖啡八杯1 小时前
GoF设计模式——策略模式
java·后端·spring·设计模式
kyriewen3 小时前
别再 console.log 了:5 个 Chrome DevTools 调试技巧,用过就回不去了
前端·javascript·面试
IT_陈寒5 小时前
Python搞不定字符串编码?这破玩意坑我两小时!
前端·人工智能·后端
DigitalOcean6 小时前
Laravel 开发者已在 DigitalOcean 上开通超过 10 万台服务器
前端·laravel
星始流年6 小时前
从 Tool 到 Skill——基于 LangChain 的服务端Skill实现
前端·langchain·agent
李惟6 小时前
开源本地通信库,纯客户端 RPC,像聊天一样通信
前端
YAwu116 小时前
深入解析 React 炫彩鼠标跟随标题组件:从坐标定位到动画性能
前端·react.js
GuWenyue6 小时前
排序效率低?5分钟吃透快速排序,性能飙升至O(nlogn)
前端·javascript·面试
OpenTiny社区6 小时前
🎨 看完 GenUI SDK 源码我悟了!
前端·vue.js·github
叁两6 小时前
前端转型AI Agent该如何学习?(前置篇)
前端·人工智能·node.js