Files
monisuo/flutter_monisuo/lib/data/services/user_service.dart
2026-04-07 01:05:05 +08:00

75 lines
2.1 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import 'dart:typed_data';
import 'package:dio/dio.dart';
import '../../core/constants/api_endpoints.dart';
import '../../core/network/api_response.dart';
import '../../core/network/dio_client.dart';
import '../models/user.dart';
/// 用戶服務
class UserService {
final DioClient _client;
UserService(this._client);
/// 用戶登錄
Future<ApiResponse<Map<String, dynamic>>> login(
String username,
String password,
) async {
return _client.post<Map<String, dynamic>>(
ApiEndpoints.login,
data: {'username': username, 'password': password},
);
}
/// 用戶註冊multipart含身份證圖片和可選推廣碼
Future<ApiResponse<Map<String, dynamic>>> register(
String username,
String password, {
String? referralCode,
required Uint8List frontBytes,
required Uint8List backBytes,
}) async {
final formData = FormData.fromMap({
'username': username,
'password': password,
if (referralCode != null && referralCode.isNotEmpty) 'referralCode': referralCode,
'front': MultipartFile.fromBytes(frontBytes, filename: 'front.jpg'),
'back': MultipartFile.fromBytes(backBytes, filename: 'back.jpg'),
});
return _client.upload<Map<String, dynamic>>(
ApiEndpoints.register,
formData: formData,
);
}
/// 獲取用戶信息
Future<ApiResponse<User>> getUserInfo() async {
return _client.get<User>(
ApiEndpoints.userInfo,
fromJson: (data) => User.fromJson(data as Map<String, dynamic>),
);
}
/// 上傳 KYC 資料(身份證正反面圖片字節)
/// 使用 fromBytes 以兼容 Web 和移動端
Future<ApiResponse<void>> uploadKyc(
Uint8List frontBytes,
Uint8List backBytes,
) async {
final formData = FormData.fromMap({
'front': MultipartFile.fromBytes(frontBytes, filename: 'front.jpg'),
'back': MultipartFile.fromBytes(backBytes, filename: 'back.jpg'),
});
return _client.upload<void>(
ApiEndpoints.kyc,
formData: formData,
);
}
/// 退出登錄
Future<ApiResponse<void>> logout() async {
return _client.post<void>(ApiEndpoints.logout);
}
}