水印优化+ORC优化
This commit is contained in:
@@ -1,8 +1,11 @@
|
||||
import 'package:dio/dio.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:path_provider/path_provider.dart';
|
||||
|
||||
import '../core/network/api_env.dart';
|
||||
import '../core/network/api_exception.dart';
|
||||
import '../core/network/dio_client.dart';
|
||||
import '../models/photo.dart';
|
||||
|
||||
final photoApiProvider = Provider<PhotoApi>((ref) => PhotoApi(ref.watch(dioProvider)));
|
||||
|
||||
@@ -59,6 +62,51 @@ class PhotoApi {
|
||||
}
|
||||
}
|
||||
|
||||
/// 分页列表,最新的在前
|
||||
Future<PhotoPage> list({int page = 1, int size = 30}) async {
|
||||
try {
|
||||
final res = await _dio.get<dynamic>(
|
||||
'/photos',
|
||||
queryParameters: {'page': page, 'size': size},
|
||||
);
|
||||
final data = res.data;
|
||||
if (data is Map<String, dynamic>) return PhotoPage.fromJson(data);
|
||||
if (data is Map) return PhotoPage.fromJson(Map<String, dynamic>.from(data));
|
||||
return PhotoPage.empty;
|
||||
} on DioException catch (e) {
|
||||
final err = e.error;
|
||||
throw err is ApiException ? err : ApiException(-1, '照片列表加载失败');
|
||||
}
|
||||
}
|
||||
|
||||
/// 把原图下载到临时文件,返回本地路径。
|
||||
///
|
||||
/// 「重新打水印」必须先有本地文件:编辑页要读它拿尺寸、显示预览、合成成品。
|
||||
/// 原图可能好几 MB,所以留了进度回调让界面能显示进度。
|
||||
///
|
||||
/// [url] 是后端给的相对地址(`/uploads/...`),这里用 [resolveAssetUrl]
|
||||
/// 补成绝对地址 —— `/uploads` 不在 `/api` 前缀下,不能直接丢给 dio。
|
||||
Future<String> downloadOriginal(
|
||||
String url, {
|
||||
void Function(int received, int total)? onProgress,
|
||||
}) async {
|
||||
try {
|
||||
final dir = await getTemporaryDirectory();
|
||||
final path = '${dir.path}/photo_${DateTime.now().millisecondsSinceEpoch}.jpg';
|
||||
await _dio.download(
|
||||
resolveAssetUrl(url),
|
||||
path,
|
||||
onReceiveProgress: onProgress,
|
||||
// 原图几 MB,移动网络下给宽一点
|
||||
options: Options(receiveTimeout: const Duration(seconds: 120)),
|
||||
);
|
||||
return path;
|
||||
} on DioException catch (e) {
|
||||
final err = e.error;
|
||||
throw err is ApiException ? err : ApiException(-1, '原图下载失败');
|
||||
}
|
||||
}
|
||||
|
||||
/// 从路径里取个带扩展名的文件名,后端靠它判断文件类型
|
||||
static String _fileName(String path) {
|
||||
final normalized = path.replaceAll('\\', '/');
|
||||
|
||||
Reference in New Issue
Block a user