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>> login( String username, String password, ) async { return _client.post>( ApiEndpoints.login, data: {'username': username, 'password': password}, ); } /// 用户注册(multipart:含身份证图片和可选推广码) Future>> 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>( ApiEndpoints.register, formData: formData, ); } /// 获取用户信息 Future> getUserInfo() async { return _client.get( ApiEndpoints.userInfo, fromJson: (data) => User.fromJson(data as Map), ); } /// 上传 KYC 资料(身份证正反面图片字节) /// 使用 fromBytes 以兼容 Web 和移动端 Future> 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( ApiEndpoints.kyc, formData: formData, ); } /// 退出登录 Future> logout() async { return _client.post(ApiEndpoints.logout); } }