allscore_app/lib/plugins/api.dart

108 lines
3.2 KiB
Dart
Raw Permalink Normal View History

2025-01-07 13:38:36 +00:00
import 'package:http/http.dart' as http;
import 'package:shared_preferences/shared_preferences.dart';
import 'dart:convert';
import 'package:image_picker/image_picker.dart';
2025-01-18 09:28:24 +00:00
import '../config/config.dart';
2025-01-07 13:38:36 +00:00
class Api {
2025-01-18 09:28:24 +00:00
static const String baseUrl = Config.baseUrl;
2025-01-07 13:38:36 +00:00
// 사용자 정보를 업데이트하는 메서드
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);
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> 반환
}
}