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);
      }
    });
  }
相关推荐
excel15 小时前
为什么在 Three.js 中平面能产生“起伏效果”?
前端
excel16 小时前
Node.js 断言与测试框架示例对比
前端
天蓝色的鱼鱼18 小时前
前端开发者的组件设计之痛:为什么我的组件总是难以维护?
前端·react.js
codingandsleeping18 小时前
使用orval自动拉取swagger文档并生成ts接口
前端·javascript
考虑考虑19 小时前
Jpa使用union all
java·spring boot·后端
石金龙19 小时前
[译] Composition in CSS
前端·css
BG19 小时前
Flutter 简仿Excel表格组件介绍
flutter
用户37215742613519 小时前
Java 实现 Excel 与 TXT 文本高效互转
java
白水清风19 小时前
微前端学习记录(qiankun、wujie、micro-app)
前端·javascript·前端工程化
Ticnix19 小时前
函数封装实现Echarts多表渲染/叠加渲染
前端·echarts