postFormMultiAsync<T> method

Future<MappedNetworkServiceResponse<T>?> postFormMultiAsync<T>(
  1. String path,
  2. dynamic data
)

Implementation

Future<MappedNetworkServiceResponse<T>?> postFormMultiAsync<T>(
    String path, dynamic data) async {
  var content = json.encoder.convert(data);
  final Map<String, dynamic> rawMap = jsonDecode(content);

  rawMap.removeWhere((k, v) {
    return rawMap[k] == null;
  });

  final Map<String, String> reqMap = {};
  for (var ak in rawMap.keys) {
    reqMap[ak] = rawMap[ak].toString();
  }

  var request = http.MultipartRequest("POST", Uri.parse(path));
  request.fields.addAll(reqMap);

  request.fields['token'] = MxBaseUserInfo.instance.getToken()!;

  var resp;

  await request.send().then((response) async {
    if (!((response.statusCode < 200) || (response.statusCode >= 300))) {
      String jsonResult = '';
      await response.stream.toStringStream().listen((json) {
        jsonResult = json;
      });
      Map? resultClass = jsonDecode(jsonResult);
      resp = MappedNetworkServiceResponse<T>(
          mappedResult: resultClass,
          networkServiceResponse: NetworkServiceResponse<T>(success: true));
    } else {
      var jsonResult = response.stream.toString();
      dynamic resultClass = {"succeed": false};
      resp = MappedNetworkServiceResponse<T>(
          mappedResult: resultClass,
          networkServiceResponse: NetworkServiceResponse<T>(success: false));
    }
  });
  return resp;
}