Flutter 图像加载和缓存
Flutter Image loading and caching
这是我的用例:
- 我正在获取图像 URL 列表。
- 我想在数据库中显示和缓存它们,而不仅仅是针对特定会话,因此下次它不应该执行 Web 服务调用。
我们的应用程序也可以离线运行。我尝试了一些像 flutter_advanced_networkimage
和 flutter_cache_manager
这样的库,但我的速度很慢,而且大多数时候应用程序崩溃了。
将其保存在您应用的临时目录中:
import 'dart:io';
// https://pub.dev/packages/path_provider
import 'package:path_provider/path_provider.dart';
final Directory temp = await getTemporaryDirectory();
final File imageFile = File('${temp.path}/images/someImageFile.png');
if (await imageFile.exists()) {
// Use the cached images if it exists
} else {
// Image doesn't exist in cache
await imageFile.create(recursive: true);
// Download the image and write to above file
...
}
它会在应用启动时持续存在,只有在用户亲自清除缓存或重新安装应用时才会被删除。
我一直在使用 cached_network_image
,与宣传的一样有效
如果你想兑现图像或从 API 检索到的任何字段,你可以使用 SharedPref 包
在你的 pubspec.yame :
shared_preferences: ^2.0.5 . // use latest version
这是 SharedPref class:
class AppSharedPref {
static const String KEY_STAFF_AVATAR = "Avatar";
static setString(String key, String value) async {
final sp = await SharedPreferences.getInstance();
sp.setString(key, value);
}
static Future<String?> getString(String key) async {
final sp = await SharedPreferences.getInstance();
return sp.getString(key) == null ? "" : sp.getString(key);
}
}
您可以这样兑现:
AppSharedPref.setString(AppSharedPref.KEY_STAFF_AVATAR, "$UrlFromAPIResponse");
然后像这样检索它:
String photoURL ='';
AppSharedPref.getString(AppSharedPref.KEY_STAFF_AVATAR).then((value) {
photoURL = value!;
});
在您的小部件中使用 photoURL:
Image.network(photoURL);
或
NetworkImage(photoURL);
这是我的用例:
- 我正在获取图像 URL 列表。
- 我想在数据库中显示和缓存它们,而不仅仅是针对特定会话,因此下次它不应该执行 Web 服务调用。
我们的应用程序也可以离线运行。我尝试了一些像 flutter_advanced_networkimage
和 flutter_cache_manager
这样的库,但我的速度很慢,而且大多数时候应用程序崩溃了。
将其保存在您应用的临时目录中:
import 'dart:io';
// https://pub.dev/packages/path_provider
import 'package:path_provider/path_provider.dart';
final Directory temp = await getTemporaryDirectory();
final File imageFile = File('${temp.path}/images/someImageFile.png');
if (await imageFile.exists()) {
// Use the cached images if it exists
} else {
// Image doesn't exist in cache
await imageFile.create(recursive: true);
// Download the image and write to above file
...
}
它会在应用启动时持续存在,只有在用户亲自清除缓存或重新安装应用时才会被删除。
我一直在使用 cached_network_image
,与宣传的一样有效
如果你想兑现图像或从 API 检索到的任何字段,你可以使用 SharedPref 包 在你的 pubspec.yame :
shared_preferences: ^2.0.5 . // use latest version
这是 SharedPref class:
class AppSharedPref {
static const String KEY_STAFF_AVATAR = "Avatar";
static setString(String key, String value) async {
final sp = await SharedPreferences.getInstance();
sp.setString(key, value);
}
static Future<String?> getString(String key) async {
final sp = await SharedPreferences.getInstance();
return sp.getString(key) == null ? "" : sp.getString(key);
}
}
您可以这样兑现:
AppSharedPref.setString(AppSharedPref.KEY_STAFF_AVATAR, "$UrlFromAPIResponse");
然后像这样检索它:
String photoURL ='';
AppSharedPref.getString(AppSharedPref.KEY_STAFF_AVATAR).then((value) {
photoURL = value!;
});
在您的小部件中使用 photoURL:
Image.network(photoURL);
或
NetworkImage(photoURL);