Fix image cache cause copy image not works

This commit is contained in:
2024-10-29 11:23:30 +00:00
committed by GitHub
parent 6d2c445cd4
commit e2515520d6
2 changed files with 13 additions and 6 deletions

View File

@@ -29,7 +29,7 @@ class DioImage extends ImageProvider<DioImage> {
/// The arguments [url] and [scale] must not be null.
/// [dio] will be the default [Dio] if not set.
DioImage.string(String url,
{this.scale = 1.0, this.headers, this.onData, Dio? dio})
{this.scale = 1.0, this.headers, this.onData, Dio? dio, this.key})
: dio = dio ?? defaultDio,
url = Uri.parse(url);
@@ -37,7 +37,8 @@ class DioImage extends ImageProvider<DioImage> {
///
/// The arguments [url] and [scale] must not be null.
/// [dio] will be the default [Dio] if not set.
DioImage(this.url, {this.scale = 1.0, this.headers, this.onData, Dio? dio})
DioImage(this.url,
{this.scale = 1.0, this.headers, this.onData, this.key, Dio? dio})
: dio = dio ?? defaultDio;
/// The URL from which the image will be fetched.
@@ -56,6 +57,8 @@ class DioImage extends ImageProvider<DioImage> {
final void Function(Uint8List, Headers, String)? onData;
final Key? key;
@override
Future<DioImage> obtainKey(ImageConfiguration configuration) {
return SynchronousFuture<DioImage>(this);
@@ -164,11 +167,14 @@ class DioImage extends ImageProvider<DioImage> {
if (other.runtimeType != runtimeType) {
return false;
}
return other is DioImage && other.url == url && other.scale == scale;
return other is DioImage &&
other.url == url &&
other.scale == scale &&
other.key == key;
}
@override
int get hashCode => Object.hash(url, scale);
int get hashCode => Object.hash(url, scale, key);
@override
String toString() =>

View File

@@ -47,6 +47,7 @@ class SinglePageViewer extends StatefulWidget {
class _SinglePageViewer extends State<SinglePageViewer>
with ThemeModeWidget, IsTopWidget2 {
final Key _key = GlobalKey();
late PageController _pageController;
late int _index;
late GalleryData? _data;
@@ -143,8 +144,8 @@ class _SinglePageViewer extends State<SinglePageViewer>
_photoViewController.reset();
}
return PhotoViewGalleryPageOptions(
imageProvider: DioImage.string(api.getFileUrl(f.id), dio: dio,
onData: (data, headers, url) {
imageProvider: DioImage.string(api.getFileUrl(f.id),
dio: dio, key: _key, onData: (data, headers, url) {
_imgData[index] = (data, headers.value("content-type"), url);
}),
initialScale: PhotoViewComputedScale.contained,