Skip to content

Commit 3d99361

Browse files
committed
refactor: enhance image caching and loading logic in gallery view
- Introduce a new extension method for generating cache keys for GalleryImage. - Refactor image fetching logic to use the new method for improved cache management. - Update logging levels for better debugging visibility during image loading.
1 parent 3182473 commit 3d99361

File tree

5 files changed

+65
-49
lines changed

5 files changed

+65
-49
lines changed

lib/extension.dart

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -686,3 +686,16 @@ extension EhT<T> on T {
686686
return Optional<T>.fromNullable(this);
687687
}
688688
}
689+
690+
extension GalleryImageExt on GalleryImage {
691+
String getCacheKey(String url) {
692+
final bool isOriginImage = url == originImageUrl;
693+
final regExpXres = RegExp(r'xres=(\d+)');
694+
final xres = regExpXres.firstMatch(url)?.group(1) ?? '';
695+
return '${Uri.encodeComponent(href ?? '')}_${isOriginImage ? 'origin' : xres}';
696+
}
697+
698+
String get cacheKey {
699+
return getCacheKey(imageUrl ?? '');
700+
}
701+
}

lib/network/request.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,7 @@ Future<GalleryImage?> fetchImageInfoByApi(
258258
(sourceId?.isNotEmpty ?? false)) {
259259
logger.d(
260260
'使用常规请求,解析html: href $href,showKey $showKey, sourceId $sourceId, isMpv $isMpv, refresh $refresh');
261-
final resultImage = await _fetchImageInfo(
261+
final resultImage = await fetchImageInfoByHtml(
262262
href,
263263
refresh: refresh,
264264
sourceId: sourceId,
@@ -315,7 +315,7 @@ Future<GalleryImage?> fetchImageInfoByApi(
315315
return image;
316316
}
317317

318-
Future<GalleryImage?> _fetchImageInfo(
318+
Future<GalleryImage?> fetchImageInfoByHtml(
319319
String href, {
320320
bool refresh = false,
321321
String? sourceId,

lib/pages/image_view/common.dart

Lines changed: 42 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -65,80 +65,80 @@ class GalleryPara {
6565
}
6666

6767
for (int add = 1; add < max + 1; add++) {
68-
final int _ser = itemSer + add;
68+
final int ser = itemSer + add;
6969

70-
logger.t('开始预载 ser $_ser');
70+
logger.t('开始预载 ser $ser');
7171

72-
if (_processingSerSet.contains(_ser)) {
72+
if (_processingSerSet.contains(ser)) {
7373
continue;
7474
}
7575

76-
final GalleryImage? _imageTemp = imageMap[_ser];
77-
if (_imageTemp == null) {
76+
final GalleryImage? imageTemp = imageMap[ser];
77+
if (imageTemp == null) {
7878
// yield null;
7979
continue;
8080
}
8181

82-
GalleryImage _image = _imageTemp;
82+
GalleryImage image = imageTemp;
8383

84-
if (_image.completeCache ?? false) {
85-
logger.t('ser $_ser 已预载完成 跳过');
84+
if (image.completeCache ?? false) {
85+
logger.t('ser $ser 已预载完成 跳过');
8686
continue;
8787
}
8888

89-
if (_image.startPrecache ?? false) {
90-
logger.t('ser $_ser 已开始预载 跳过');
89+
if (image.startPrecache ?? false) {
90+
logger.t('ser $ser 已开始预载 跳过');
9191
continue;
9292
}
9393

94-
String _url = '';
95-
if (_image.imageUrl?.isEmpty ?? true) {
94+
String url = '';
95+
if (image.imageUrl?.isEmpty ?? true) {
9696
if (showKey == null) {
97-
logger.d('ser $_ser, showKey is null, skip precache');
97+
logger.d('ser $ser, showKey is null, skip precache');
9898
continue;
9999
}
100100

101-
_processingSerSet.add(_ser);
102-
final String _href = imageMap[_ser]?.href ?? '';
101+
_processingSerSet.add(ser);
102+
final String href = imageMap[ser]?.href ?? '';
103103

104104
// paraImageLageInfoFromHtml
105-
// final GalleryImage? _imageFetch = await fetchImageInfo(_href);
106-
final GalleryImage? _imageFetch =
107-
await fetchImageInfoByApi(_href, showKey: showKey);
108-
109-
_url = _imageFetch?.imageUrl ?? '';
110-
111-
_image = _image.copyWith(
112-
imageUrl: _url.oN,
113-
imageWidth: _imageFetch?.imageWidth.oN,
114-
imageHeight: _imageFetch?.imageHeight.oN,
115-
originImageUrl: _imageFetch?.originImageUrl.oN,
116-
filename: _imageFetch?.filename.oN,
117-
showKey: _imageFetch?.showKey.oN,
105+
final GalleryImage? imageFetch = await fetchImageInfoByHtml(href);
106+
// final GalleryImage? imageFetch =
107+
// await fetchImageInfoByApi(href, showKey: showKey);
108+
109+
url = imageFetch?.imageUrl ?? '';
110+
111+
image = image.copyWith(
112+
imageUrl: url.oN,
113+
imageWidth: imageFetch?.imageWidth.oN,
114+
imageHeight: imageFetch?.imageHeight.oN,
115+
originImageUrl: imageFetch?.originImageUrl.oN,
116+
filename: imageFetch?.filename.oN,
117+
showKey: imageFetch?.showKey.oN,
118118
);
119119

120-
_processingSerSet.remove(_ser);
120+
_processingSerSet.remove(ser);
121121
}
122122

123-
_url = _image.imageUrl ?? '';
123+
url = image.imageUrl ?? '';
124124

125-
if (_url.isEmpty) {
125+
if (url.isEmpty) {
126126
// yield null;
127127
continue;
128128
}
129129

130-
_map.putIfAbsent(_url, () {
131-
logger.d('ser $_ser, 开始预载图片 $_url');
132-
return _precacheSingleImage(_url, _image);
130+
_map.putIfAbsent(url, () {
131+
logger.d('ser $ser, 开始预载图片 $url');
132+
return _precacheSingleImage(url, image);
133133
});
134134

135-
final Future<GalleryImage?>? _future = _map[_url];
135+
final Future<GalleryImage?>? futureImage = _map[url];
136136

137-
if (_future != null) {
138-
final GalleryImage? value = await _future;
137+
if (futureImage != null) {
138+
final GalleryImage? value = await futureImage;
139139
// logger.d('yield rult ser ${value?.ser} ${value?.toJson()}');
140140
yield value?.copyWith(completeCache: true.oN);
141-
_map.remove(_url);
141+
_map.remove(url);
142142
continue;
143143
}
144144
}
@@ -148,17 +148,20 @@ class GalleryPara {
148148
String url,
149149
GalleryImage image,
150150
) async {
151-
logger.t('_precacheSingleImage, 开始预载图片 $url');
151+
final cacheKey = image.getCacheKey(url);
152+
logger.d('_precacheSingleImage, 开始预载图片 $url,\ncacheKey: $cacheKey');
152153
final ImageProvider imageProvider = ExtendedNetworkImageProvider(
153154
url,
154155
cache: true,
156+
cacheKey: cacheKey,
155157
retries: 5,
156158
timeLimit: const Duration(seconds: 5),
157159
);
158160

159161
/// 预缓存图片
160162
try {
161163
await precacheImage(imageProvider, Get.context!);
164+
logger.d('预载图片完成 $url');
162165
return image.copyWith(completeCache: true.oN);
163166
} catch (e, stack) {
164167
logger.e('$e /n $stack');

lib/pages/image_view/view/view_image.dart

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -497,7 +497,7 @@ class _ViewImageState extends State<ViewImage> with TickerProviderStateMixin {
497497
final GalleryImage? currentImageData =
498498
vState.pageState?.imageMap[widget.imageSer];
499499

500-
logger.d('currentImageData ${currentImageData?.toJson()}\n'
500+
logger.t('currentImageData ${currentImageData?.toJson()}\n'
501501
'imageData ${imageData?.toJson()}');
502502

503503
// 图片文件已下载 加载显示本地图片文件
@@ -569,17 +569,17 @@ class _ViewImageState extends State<ViewImage> with TickerProviderStateMixin {
569569
// );
570570
// }
571571

572-
logger.d('ImageExtProvider, imageUrl: ${imageData?.imageUrl}');
572+
logger.t('ImageExtProvider, imageUrl: ${imageData?.imageUrl}');
573573
Widget image = ImageExtProvider(
574574
image: ExtendedResizeImage.resizeIfNeeded(
575575
provider: ExtendedNetworkImageProvider(
576576
imageData?.imageUrl ?? '',
577-
timeLimit: const Duration(seconds: 10),
578-
cache: false,
579-
retries: 5,
580-
timeRetry: const Duration(seconds: 5),
577+
timeLimit: const Duration(seconds: 5),
578+
cache: true,
579+
retries: 2,
580+
timeRetry: const Duration(seconds: 2),
581581
printError: true,
582-
cacheRawData: true,
582+
cacheKey: imageData?.cacheKey,
583583
),
584584
// provider: getEhImageProvider(
585585
// imageData?.imageUrl ?? '',

lib/pages/image_view/view/view_widget.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -453,7 +453,7 @@ class ImageExtProvider extends GetView<ViewExtController> {
453453
initGestureConfigHandler: initGestureConfigHandler,
454454
onDoubleTap: onDoubleTap,
455455
loadStateChanged: (ExtendedImageState state) {
456-
logger.d(
456+
logger.t(
457457
'loadStateChanged ser:$ser, state:${state.extendedImageLoadState}, image:$image');
458458
switch (state.extendedImageLoadState) {
459459
case LoadState.loading:

0 commit comments

Comments
 (0)