Reputation: 43
I'm new to flutter, I use Dio in my project to make Members Register features.. but everytime I execute the register process, the Debug Console give me this error
I/flutter (13428): Instance of 'FormData'
I/flutter (13428): DioError [DioErrorType.RESPONSE]: Http status error [500]
however, when I tried to register with POSTMAN, It was a success. So I'm not sure where the problem is.. here's my code, could you guys please help me? i've been stuck on this for weeks..
final String url = "https://api.censored.org/api/members/register";
Dio.FormData formData = Dio.FormData.fromMap({
"nama_lengkap": name,
"tempat_lahir": tempatlahir,
"tanggal_lahir": selectedDate.toString(),
"email": email,
"password": password,
"username": username,
"nomor_ktp": noKTP,
"alamat_ktp": alamatktpmember,
"alamat_domisili": alamatmember,
"pekerjaan": pekerjaanmember,
"alamat_pekerjaan": alamatperusahaanmember,
"no_whatsapp": noWAmember,
"no_hp": noteleponmember,
"nama_pemilik_rekening": namarekmember,
"nomor_rekening": norekmember,
"bank_id": _valBank,
"aggrement": _eulargprogramming,
//Foto
"foto_ktp": await Dio.MultipartFile.fromFile(_fotoKtp.path),
"selfie_dengan_ktp": await Dio.MultipartFile.fromFile(_fotoSelfie.path),
"foto_kk": await Dio.MultipartFile.fromFile(_fotoKK.path),
"foto_pengenal_lainnya":
await Dio.MultipartFile.fromFile(_fotoKartu.path),
"foto_buku_rekening":
await Dio.MultipartFile.fromFile(_fotoRekening.path),
"foto_profil": await Dio.MultipartFile.fromFile(_fotoSelfie.path),
//Array
"penjamin": {
"stakeholder_id": _subrgProgramming1,
"nama": penjaminNama,
"nomor_ktp": penjaminNoktp,
"alamat_ktp": penjaminAlamat,
"alamat_domisili": penjaminDomisili,
"no_hp": notelppenjamin,
},
"sosial_media": [
{
"sosial_media_id": _sosmedrgprogramming,
"nama": sosialmediamember,
"screenshot": await Dio.MultipartFile.fromFile(_fotoSosmed.path),
}
],
"saudara_kerabat": [
{
"stakeholder_id": 4,
"nama": namasaudara,
"no_hp": notelpsaudara,
},
{
"stakeholder_id": 5,
"nama": namakerabat1,
"no_hp": notelpkerabat1,
},
{
"stakeholder_id": 5,
"nama": namakerabat2,
"no_hp": notelpkerabat2,
},
{
"stakeholder_id": 5,
"nama": namakerabat3,
"no_hp": notelpkerabat3,
}
],
});
print(formData);
var res;
try {
Dio.Dio doo = Dio.Dio();
doo.options.headers['Accept'] = 'application/json';
doo.options.contentType = 'application/json';
doo.options.followRedirects = false;
Dio.Response response = await doo.post(url, data: formData);
if (response.statusCode == 200) {
print(response.data);
res = response;
final data = jsonDecode(res.body);
print(res);
int regvalue = data['value'];
String message = data['message'];
if (regvalue == 1) {
setState(() {
Navigator.pop(context);
});
print(message);
registerToast(message);
} else if (regvalue == 2) {
print(message);
registerToast(message);
} else {
print(message);
registerToast(message);
}
}
} on Dio.DioError catch (e) {
if (e.response.statusCode == 422) {
print(e.response.data);
}
} on Dio.DioError catch (e) {
if (e.response.statusCode == 500) {
print(e.response.data);
}
}
}
registerToast(String toast) {
return Fluttertoast.showToast(
msg: toast,
toastLength: Toast.LENGTH_SHORT,
gravity: ToastGravity.BOTTOM,
timeInSecForIos: 1,
backgroundColor: Colors.red,
textColor: Colors.white);
}
Upvotes: 4
Views: 26494
Reputation: 9
I was getting same Error. My APi working fine on Postmen but getting internal server error [500] in DioError. I just add '/' on the end of my URL. Its Solve the issue.
Upvotes: 1
Reputation: 259
After Hours of struggle i found the way of uploading multiple images through dio packge here is my code you can use it accordingly
import 'dart:io';
import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:rent_house/screens/Admin/View_Property/AdminViwe.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:http_parser/http_parser.dart';
var token;
Dio dio = Dio();
var apiURL = 'https://denga.r3therapeutic.com/public/api/addpost';
FormData formData = FormData();
Future<String> adminAddproperty({
title,
address,
price,
area,
bedrooms,
bathrooms,
parking,
other,
description,
List<File>? imageFileList,
context,
}) async {
List uploadList = [];
for (var imageFiles in imageFileList!) {
uploadList.add(await MultipartFile.fromFile(imageFiles.path,
filename: imageFiles.path.split('/').last,
contentType: MediaType('image', 'jpg')));
}
FormData formData = FormData.fromMap({
'title': title,
'address': address,
'price': price,
'area': area,
'bedrooms': bedrooms,
'bathrooms': bathrooms,
'parking': parking,
'others': "huhuhuhuh",
'description': description,
'images[]': uploadList,
});
SharedPreferences pref = await SharedPreferences.getInstance();
token = pref.getString('token');
print('AdminApisToken =$token');
print('_images');
Response responce;
responce = await dio.post(
apiURL ,
data: formData,
options: Options(headers: {
HttpHeaders.authorizationHeader: "Bearer $token",
}));
try{
if(responce.data=="false"){
Navigator.push(
context,
MaterialPageRoute(builder: (context) => AdminProperty()),
);
Fluttertoast.showToast(
msg: "Data Upload Successfull", backgroundColor: Colors.cyan);
}
else{
Fluttertoast.showToast(
msg: "Wrong Input Data Type", backgroundColor: Colors.cyan);
}
return '';
} catch (e) {
Fluttertoast.showToast(
msg: "Internet Connection Error", backgroundColor: Colors.cyan);
return '';
}
}
Upvotes: -1
Reputation: 1
I had the same problem when I try send a image with Dio. But the problem only appears when i use the iphone emulator in a mac, in a android emulator all is ok, so I tried to starting the debug and compile my app in a real iphone, no emulator, and i didtn have this error. Maybe you have the same problem too, i hope help you.
Upvotes: 0
Reputation: 339
this means your sever responded with InternalServerError
but dio sees this as an exception to fix this either use try and catch blocs or pass this to your dio instace
final res = await dio.delete(
url,
data: postData,
options: Options(
followRedirects: false,
// will not throw errors
validateStatus: (status) => true,
headers: headers,
),
);
Upvotes: 14