diff --git a/CHANGELOG.md b/CHANGELOG.md index 1d9ed94f..b9cf9a7b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -46,6 +46,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), - app:修复先前升级flutter版本导致的默认配色问题,现在使用默认的蓝色作为色调。 - app:修正各类边距值不是Material 3取值的问题。 - app:修复一些情况下,网络连接报错但UI没有更新的问题。 +- app:修复部分图片无法加载的问题。 - 翻译:修复部分错误翻译。 - 帖子:修复部分签名档存在样式溢出的用户的所在楼层无法回复和评分的问题。 - 帖子:修复帖子评分中头像无法加载时不显示且不断重试的问题。 diff --git a/lib/features/cache/repository/image_cache_repository.dart b/lib/features/cache/repository/image_cache_repository.dart index 94fd0408..dd7325f8 100644 --- a/lib/features/cache/repository/image_cache_repository.dart +++ b/lib/features/cache/repository/image_cache_repository.dart @@ -74,10 +74,9 @@ final class ImageCacheRepository with LoggerMixin { handle(err); throw err; } - final imageData = respEither.unwrap().data as List; - await _imageCacheProvider.updateCache(url, imageData); - _controller - .add(ImageCacheSuccessResponse(url, Uint8List.fromList(imageData))); + final imageData = respEither.unwrap().data as Uint8List; + await _imageCacheProvider.updateCache(url, Uint8List.fromList(imageData)); + _controller.add(ImageCacheSuccessResponse(url, imageData)); } catch (e) { _controller.add(ImageCacheFailedResponse(url)); } diff --git a/lib/shared/providers/image_cache_provider/image_cache_provider.dart b/lib/shared/providers/image_cache_provider/image_cache_provider.dart index 4074f6b1..e66eec8d 100644 --- a/lib/shared/providers/image_cache_provider/image_cache_provider.dart +++ b/lib/shared/providers/image_cache_provider/image_cache_provider.dart @@ -99,7 +99,7 @@ final class ImageCacheProvider with LoggerMixin { /// Update image cached file. /// /// Update cache file and info in database. - Future updateCache(String imageUrl, List imageData) async { + Future updateCache(String imageUrl, Uint8List imageData) async { final fileName = imageUrl.fileNameV5(); // Update image cache info to database. diff --git a/lib/shared/providers/net_client_provider/net_client_provider.dart b/lib/shared/providers/net_client_provider/net_client_provider.dart index 2354536c..bcfda036 100644 --- a/lib/shared/providers/net_client_provider/net_client_provider.dart +++ b/lib/shared/providers/net_client_provider/net_client_provider.dart @@ -3,6 +3,7 @@ import 'dart:io' if (dart.libaray.js) 'package:web/web.dart'; import 'package:cookie_jar/cookie_jar.dart'; import 'package:dio/dio.dart'; import 'package:dio/io.dart'; +import 'package:dio_brotli_transformer/dio_brotli_transformer.dart'; import 'package:dio_cookie_manager/dio_cookie_manager.dart'; import 'package:tsdm_client/exceptions/exceptions.dart'; import 'package:tsdm_client/features/settings/repositories/settings_repository.dart'; @@ -95,6 +96,8 @@ final class NetClientProvider with LoggerMixin { }, ); d.interceptors.add(_ErrorHandler()); + // decode br content-type. + d.transformer = DioBrotliTransformer(); } return NetClientProvider._(d); @@ -104,6 +107,8 @@ final class NetClientProvider with LoggerMixin { factory NetClientProvider.buildNoCookie({Dio? dio}) { final d = dio ?? getIt.get().buildDefaultDio(); d.interceptors.add(_ErrorHandler()); + // decode br content-type. + d.transformer = DioBrotliTransformer(); return NetClientProvider._(d); } diff --git a/lib/widgets/cached_image/cached_image_provider.dart b/lib/widgets/cached_image/cached_image_provider.dart index 3d978d99..02529392 100644 --- a/lib/widgets/cached_image/cached_image_provider.dart +++ b/lib/widgets/cached_image/cached_image_provider.dart @@ -126,7 +126,7 @@ final class CachedImageProvider extends ImageProvider error('failed to get image from $imageUrl, code=${resp.statusCode}'); return Uint8List(0); } - final imageData = resp.data as List; + final imageData = resp.data as Uint8List; // Make cache. await getIt.get().updateCache(imageUrl, imageData); diff --git a/pubspec.lock b/pubspec.lock index ae8ade19..f86bdbf9 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -86,6 +86,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.1" + brotli: + dependency: transitive + description: + name: brotli + sha256: "7f891558ed779aab2bed874f0a36b8123f9ff3f19cf6efbee89e18ed294945ae" + url: "https://pub.dev" + source: hosted + version: "0.6.0" build: dependency: transitive description: @@ -327,6 +335,14 @@ packages: url: "https://pub.dev" source: hosted version: "5.6.0" + dio_brotli_transformer: + dependency: "direct main" + description: + name: dio_brotli_transformer + sha256: "2ceeaa997a6c2faeda7e1ad1765e87316c9be853fb9892fd0c80c71ca6788e92" + url: "https://pub.dev" + source: hosted + version: "2.0.0" dio_cookie_manager: dependency: "direct main" description: diff --git a/pubspec.yaml b/pubspec.yaml index 20081996..89e373c9 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -23,6 +23,7 @@ dependencies: dart_mappable: 4.2.2 device_info_plus: ^10.1.2 dio: ^5.6.0 + dio_brotli_transformer: ^2.0.0 dio_cookie_manager: ^3.1.1 drift: ^2.19.1+1 # For drift