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> serverRequest({ required String uri, required Map 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 res; if (response.statusCode == 200) { String responseBody = utf8.decode(response.bodyBytes); final Map 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> uploadProfileImage(XFile image, {Map? 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 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 반환 } }