109 lines
3.3 KiB
Dart
109 lines
3.3 KiB
Dart
|
import 'package:http/http.dart' as http;
|
||
|
import 'package:shared_preferences/shared_preferences.dart';
|
||
|
import 'dart:convert';
|
||
|
import 'package:image_picker/image_picker.dart';
|
||
|
|
||
|
class Api {
|
||
|
static const String baseUrl = 'https://eldsoft.com:8097';
|
||
|
|
||
|
// 사용자 정보를 업데이트하는 메서드
|
||
|
static Future<Map<String, dynamic>> serverRequest({
|
||
|
required String uri,
|
||
|
required Map<String, dynamic> body,
|
||
|
}) async {
|
||
|
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||
|
String? authToken = prefs.getString('auth_token');
|
||
|
|
||
|
final url = '$baseUrl$uri'; // URL 생성
|
||
|
final headers = { // 헤더 설정
|
||
|
'Content-Type': 'application/json',
|
||
|
'auth-token': authToken ?? '',
|
||
|
};
|
||
|
|
||
|
final response = await http.post(
|
||
|
Uri.parse(url),
|
||
|
headers: headers,
|
||
|
body: json.encode(body),
|
||
|
);
|
||
|
|
||
|
// 변경 가능한 변수 res 선언
|
||
|
Map<String, dynamic> res;
|
||
|
|
||
|
if (response.statusCode == 200) {
|
||
|
String responseBody = utf8.decode(response.bodyBytes);
|
||
|
final Map<String, dynamic> jsonResponse = jsonDecode(responseBody);
|
||
|
print('응답: $jsonResponse');
|
||
|
print('응답[result]: ${jsonResponse['result']}');
|
||
|
|
||
|
await prefs.setString('auth_token', jsonResponse['auth']['token']);
|
||
|
res = {
|
||
|
'result': "OK",
|
||
|
'response': jsonResponse,
|
||
|
};
|
||
|
} else {
|
||
|
res = {
|
||
|
'result': "FAIL",
|
||
|
'response': '',
|
||
|
}; // 요청 실패 시 응답 반환
|
||
|
}
|
||
|
|
||
|
return res; // res 반환
|
||
|
}
|
||
|
|
||
|
static Future<Map<String, dynamic>> uploadProfileImage(XFile image, {Map<String, dynamic>? body}) async {
|
||
|
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||
|
String? authToken = prefs.getString('auth_token');
|
||
|
|
||
|
final uri = Uri.parse('https://eldsoft.com:8097/user/update/profile/img');
|
||
|
final headers = { // 헤더 설정
|
||
|
'auth-token': authToken ?? '',
|
||
|
};
|
||
|
|
||
|
final request = http.MultipartRequest('POST', uri)
|
||
|
..headers.addAll(headers); // 헤더 추가
|
||
|
|
||
|
// 이미지 파일을 MultipartFile로 변환
|
||
|
final file = await http.MultipartFile.fromPath('file', image.path);
|
||
|
request.files.add(file);
|
||
|
|
||
|
// body가 null이 아닐 경우 추가
|
||
|
if (body != null) {
|
||
|
request.fields['body'] = json.encode(body); // JSON 형식으로 body 추가
|
||
|
}
|
||
|
|
||
|
Map<String, dynamic> res;
|
||
|
|
||
|
try {
|
||
|
// 서버에 요청 전송
|
||
|
final response = await request.send();
|
||
|
|
||
|
if (response.statusCode == 200) {
|
||
|
// 응답을 바이트로 읽고 UTF-8로 디코딩
|
||
|
final responseData = await response.stream.toBytes();
|
||
|
final responseString = utf8.decode(responseData); // UTF-8로 디코딩
|
||
|
final jsonResponse = json.decode(responseString);
|
||
|
print('응답: $jsonResponse');
|
||
|
print('응답[result]: ${jsonResponse['result']}');
|
||
|
|
||
|
await prefs.setString('auth_token', jsonResponse['auth']['token']);
|
||
|
res = {
|
||
|
'result': "OK",
|
||
|
'response': jsonResponse,
|
||
|
};
|
||
|
} else {
|
||
|
res = {
|
||
|
'result': "FAIL",
|
||
|
'response': '',
|
||
|
}; // 요청 실패 시 응답 반환
|
||
|
}
|
||
|
} catch (e) {
|
||
|
print('업로드 중 오류 발생: $e');
|
||
|
res = {
|
||
|
'result': "FAIL",
|
||
|
'response': '',
|
||
|
};
|
||
|
}
|
||
|
|
||
|
return res; // Map<String, dynamic> 반환
|
||
|
}
|
||
|
}
|