修复用户端个人头像展示
This commit is contained in:
@@ -1,3 +1,5 @@
|
||||
import 'dart:typed_data';
|
||||
|
||||
import '../../domain/models/client_models.dart';
|
||||
import '../services/api_client.dart';
|
||||
|
||||
@@ -39,6 +41,9 @@ class ClientRepository {
|
||||
Future<UserProfile> profile() async =>
|
||||
UserProfile.fromJson(jsonMap(await _api.get('$root/auth/profile')));
|
||||
|
||||
/// 通过用户端鉴权接口读取当前登录用户的头像二进制内容。
|
||||
Future<Uint8List?> profileAvatar() => _api.getBytes('$root/auth/avatar');
|
||||
|
||||
Future<WalletSummary> wallet() async =>
|
||||
WalletSummary.fromJson(jsonMap(await _api.get('$root/wallet')));
|
||||
|
||||
@@ -93,15 +98,17 @@ class ClientRepository {
|
||||
required String channel,
|
||||
required String payType,
|
||||
String openid = '',
|
||||
}) async => jsonMap(await _api.post(
|
||||
'$root/$business/orders/$identity/pay',
|
||||
body: {
|
||||
'request_no': requestNo,
|
||||
'channel': channel,
|
||||
}) async => jsonMap(
|
||||
await _api.post(
|
||||
'$root/$business/orders/$identity/pay',
|
||||
body: {
|
||||
'request_no': requestNo,
|
||||
'channel': channel,
|
||||
'pay_type': payType,
|
||||
if (openid.isNotEmpty) 'openid': openid,
|
||||
},
|
||||
));
|
||||
},
|
||||
),
|
||||
);
|
||||
|
||||
Future<void> createRefund({
|
||||
required String business,
|
||||
@@ -110,11 +117,14 @@ class ClientRepository {
|
||||
required String reason,
|
||||
required List<Map<String, Object?>> items,
|
||||
}) async {
|
||||
await _api.post('$root/$business/orders/$identity/refunds', body: {
|
||||
'request_no': requestNo,
|
||||
'reason': reason,
|
||||
'items': items,
|
||||
});
|
||||
await _api.post(
|
||||
'$root/$business/orders/$identity/refunds',
|
||||
body: {
|
||||
'request_no': requestNo,
|
||||
'reason': reason,
|
||||
'items': items,
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
Future<Map<String, Object?>?> serviceRelation() async {
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
// 功能描述:封装用户端 HTTP 请求,并将服务端错误转换为安全、可读的中文提示。
|
||||
// 版本:1.1.0
|
||||
import 'dart:convert';
|
||||
import 'dart:typed_data';
|
||||
|
||||
import 'package:http/http.dart' as http;
|
||||
|
||||
@@ -104,6 +105,20 @@ class ApiClient {
|
||||
Future<Object?> get(String path, {bool authenticated = true}) =>
|
||||
_send('GET', path, authenticated: authenticated);
|
||||
|
||||
/// 读取需要鉴权的二进制资源;资源不存在时返回空值。
|
||||
Future<Uint8List?> getBytes(String path) async {
|
||||
final request = http.Request('GET', Uri.parse('$baseUrl$path'));
|
||||
request.headers['accept'] = 'image/jpeg, image/png';
|
||||
final token = _tokenProvider();
|
||||
if (token.isNotEmpty) request.headers['authorization'] = token;
|
||||
final response = await _sendRequest(request);
|
||||
if (response.statusCode == 404) return null;
|
||||
if (response.statusCode < 200 || response.statusCode >= 300) {
|
||||
throw ApiException(response.statusCode, '头像加载失败');
|
||||
}
|
||||
return response.bodyBytes.isEmpty ? null : response.bodyBytes;
|
||||
}
|
||||
|
||||
Future<Object?> post(
|
||||
String path, {
|
||||
Map<String, Object?>? body,
|
||||
|
||||
Reference in New Issue
Block a user