Flutter中的'_InternalLinkedHashMap <String,dynamic>'不是'Map <String,String>'类型的子类型

时间:2020-11-11 14:33:14

标签: image api flutter dart upload

此问题在StackOverFlow和网络的其他地方可能也有类似的问题。但是我没有找到适合我的解决方案的成功。 我将提供尝试做的事情。 基本上,我试图使用API​​ POST将图像上传到REST后端。在发布请求中,我需要从图库或照相机设置该图像“字段”。为此,我使用了image_picker库并使用path_provider软件包来获取路径。

当我尝试传递数据对象时,出现上述错误,无法弄清在哪里以及如何解决。这是我的第一个真实的扑扑项目,通过抓和失败我学到了很多东西。感谢您为解决该问题提供的任何帮助。

上传图片的服务电话

Future<dynamic> createThePet(data, apiUrl, File file, String fileName) async{
    var fullUrl = _baseUrl + apiUrl; // + await _getToken();
    //multipart request
    var request = http.MultipartRequest('POST', Uri.parse(fullUrl),);
    //
    Map<String, String> headers = {
      "Content-type" : "multipart/form-data" ,
    };
    //
    request.files.add(http.MultipartFile(
      'image',
      file.readAsBytes().asStream(),
      file.lengthSync(),
      filename: fileName,
      contentType: MediaType('image', 'jpeg'),
    ));
    //
    request.headers.addAll(headers);
    request.fields.addAll(data);
    //
    print('request ' + request.toString());
    var res = await request.send();
    print('the response '+ res.toString());
    // return res.statusCode;
    // final response = await http.post(fullUrl, body: jsonEncode(data), headers: _setHeaders());// _setHeaders());
    if(res.statusCode == 200){
      var responseString = await res.stream.bytesToString(); //  .body;
      print(responseString);
      var resp =json.decode(responseString);
      print(resp.toString());
      if(resp['success']){
        print("success response------------ "+ responseString);
        return petCreateFromJson(responseString);
      }else{
        print("failed response------------ "+ responseString);
        return errorModelFromJson(responseString);
      }
    }else{
      // throw Exception();
      return null;
    }
  }

传递给服务调用的请求正文

    PickedFile petImage = await picker.getImage(source: ImageSource.camera,maxHeight: 1000);
_imageURI = File(petImage.path);
fileName = _imageURI.path.split("/").last;

var dogData = Map<String, dynamic>.from({
      'user_email': userEmail,
      'user_token': userToken,
      'pet': {
        "age": petAgeController.text,
        "birth_date": bdate,
        'image': '', //this is the field I need to upload the image for...
        'name': petNameController.text,
        "sex": _petSex,
        'weight': petWeightController.text,
        'user_id': userID,
      }
    });

呼叫方法

final pet = await CallApi().createThePet(dogData, 'pets/create', _imageURI, fileName).timeout(const Duration(seconds: 30),onTimeout : () {
        pr.hide();
        setState(() {
          _showAlert = true;
        });
        _showSnackbar('Connection Timed out, Please Try Again Later.', errorNet);
        throw TimeoutException('The connection has timed out, Please try again!');
      });

.....

如果我可以解决此问题,将对您有所帮助。我看。转发给它。我尝试了12个小时才想到这种结构,但仍然没有运气。请尽我所能。

0 个答案:

没有答案