Я хочу ОПУБЛИКОВАТЬ / ИСПРАВИТЬ карту <Строка,список>, а также файл изображения с использованием Dio во flutter

#flutter #dart

#flutter #dart

Вопрос:

Я хочу отправить этот файл JSON в API —

  {
            "speciality": [7,2]
        } 
  

Мои разработки:

     class Doctor {
          dynamic specialities;
        
          Doctor({
            this.specialities,
          });
        
          Map<String,dynamic>toJson()=>{
            "speciality": List<dynamic>.from(specialities.map((x) => x)),
         };
        }  


            
  

Поэтому, когда я использовал http.patch, он работал нормально (код ниже). Мой вопрос в том, как сделать то же самое, используя пакет Dio, потому что я работаю с многочастным файлом.

 response = await http.patch(
      Uri.encodeFull(fullUrl),
      body: jsonEncode(doctor.toJson()),//jsonEncode(data),
      headers: {
       'Content-type' : 'application/json',
       'Accept' : 'application/json',
       'Authorization' : 'Token $token',
     },
    );
  

Я попытался использовать код Dio (ниже), я не получил ошибки в консоли, но исправление не выполняется успешно.

 updateDoctorInformation(Doctor doctor,token) async{
    Dio dio = new Dio();
            var formData = FormData();
            formData = FormData.fromMap(doctor.toJson());
            
            Response response = await dio.patch(
                      Uri.encodeFull(fullUrl),
                      data: formData,
                      options: Options(
                        followRedirects: false,
                        validateStatus: (status) {
                          return status < 500;
                        },
                        headers: {
                          'Content-type' : 'multipart/form-data',
                          'Accept' : '*/*',
                          'Authorization' : 'Token $token',
                        },
                      )).catchError((onError){
                    print(onError.toString());
                  }).whenComplete(() => print("completed"));
                  print(response.data);
                  return response;
}
    
  

Мне нужно исправление кода Dio. Заранее спасибо.

Ответ №1:

Я нашел способ добавлять отдельно.

 if(doctor.specialities !=null){
        for(int i=0;i<doctor.specialities.length;i  ){
          formData.fields.add(
              MapEntry("speciality",doctor.specialities[i].toString())
          );
        }
      } 
  

Тем не менее, я ищу лучшее решение, например, используя toJSON выше