如何防止网络颤振缓存图像?
How to prevent caching images from network flutter?
我已经尝试了以下所有方法 Widget
从网络加载图像:
Image.network()
CachedNetworkImage()
还有他们的 ImageProvider
:
NetworkImage
CachedNetworkImageProvider
没有bool
选择不缓存图片。我发现的唯一方法是像 initState()
中一样加载 ImageProvider
,然后立即调用 evict()
。
我真的不知道这是否真的有效,或者这是否是最好的方法...
有什么方法可以防止“本地”从网络缓存?
我刚刚创建了一个小部件,它以 URL 形式获取图像,然后将其下载为 Uint8List
并在 Image.memory
小部件中显示。
你可以这样使用它:
NonCacheNetworkImage('https://riverpod.dev/img/logo.png'),
import 'dart:typed_data';
import 'package:flutter/material.dart';
import 'package:http/http.dart';
class NonCacheNetworkImage extends StatelessWidget {
const NonCacheNetworkImage(this.imageUrl, {Key? key}) : super(key: key);
final String imageUrl;
Future<Uint8List> getImageBytes() async {
Response response = await get(Uri.parse(imageUrl));
return response.bodyBytes;
}
@override
Widget build(BuildContext context) {
return FutureBuilder<Uint8List>(
future: getImageBytes(),
builder: (context, snapshot) {
if (snapshot.hasData) return Image.memory(snapshot.data!);
return SizedBox(
width: 100,
height: 100,
child: Text("NO DATA"),
);
},
);
}
}
您只需在图片 url.
末尾添加 ?
后跟 timestamp
即可实现此目的
Image.network(
'${imgUrl}?${DateTime.now().millisecondsSinceEpoch.toString()}',
fit: BoxFit.cover,
),
我已经尝试了以下所有方法 Widget
从网络加载图像:
Image.network()
CachedNetworkImage()
还有他们的 ImageProvider
:
NetworkImage
CachedNetworkImageProvider
没有bool
选择不缓存图片。我发现的唯一方法是像 initState()
中一样加载 ImageProvider
,然后立即调用 evict()
。
我真的不知道这是否真的有效,或者这是否是最好的方法...
有什么方法可以防止“本地”从网络缓存?
我刚刚创建了一个小部件,它以 URL 形式获取图像,然后将其下载为 Uint8List
并在 Image.memory
小部件中显示。
你可以这样使用它:
NonCacheNetworkImage('https://riverpod.dev/img/logo.png'),
import 'dart:typed_data';
import 'package:flutter/material.dart';
import 'package:http/http.dart';
class NonCacheNetworkImage extends StatelessWidget {
const NonCacheNetworkImage(this.imageUrl, {Key? key}) : super(key: key);
final String imageUrl;
Future<Uint8List> getImageBytes() async {
Response response = await get(Uri.parse(imageUrl));
return response.bodyBytes;
}
@override
Widget build(BuildContext context) {
return FutureBuilder<Uint8List>(
future: getImageBytes(),
builder: (context, snapshot) {
if (snapshot.hasData) return Image.memory(snapshot.data!);
return SizedBox(
width: 100,
height: 100,
child: Text("NO DATA"),
);
},
);
}
}
您只需在图片 url.
末尾添加?
后跟 timestamp
即可实现此目的
Image.network(
'${imgUrl}?${DateTime.now().millisecondsSinceEpoch.toString()}',
fit: BoxFit.cover,
),