Flutter图片缓存插件cached_s5_image的使用
Flutter图片缓存插件cached_s5_image的使用
cached_s5_image
一个用于S5 CID的简单缓存图像提供器。
使用
查看示例。
基本用法:
Widget cachedS5Image = CachedS5Image(
cid: cid, // 字符串
s5: s5, // 参见 https://pub.dev/packages/s5
thumbhash: thumbhashText, // thumbhash的字符串表示
);
感谢
这项工作得到了Sia基金会的支持。
完整示例代码
import 'package:cached_s5_image/cached_s5_image.dart';
import 'package:cached_s5_image_example/src/s5.dart';
import 'package:cached_s5_manager/cached_s5_manager.dart';
import 'package:flutter/material.dart';
import 'package:logger/logger.dart';
import 'package:s5/s5.dart';
void main() {
runApp(const CachedS5ImageDemo());
}
class CachedS5ImageDemo extends StatelessWidget {
const CachedS5ImageDemo({super.key});
// 这是你的应用的根组件。
[@override](/user/override)
Widget build(BuildContext context) {
return const MaterialApp(
title: '缓存S5图像演示',
home: Demo(),
);
}
}
class Demo extends StatefulWidget {
const Demo({super.key});
[@override](/user/override)
State<Demo> createState() => _DemoState();
}
class _DemoState extends State<Demo> {
String? cid;
final TextEditingController _cidController = TextEditingController(
text: "z2H7AJ1Pt8FdqG5UNzt4ffEhMY28c2z3K13TGf9fGcCRRwN7kS5B");
final TextEditingController _thumhashController =
TextEditingController(text: "mtcJLYbGWGaPeYiLl4dndYaAdgdY");
S5? s5;
Logger logger = Logger();
CachedS5Manager? cacheManager;
[@override](/user/override)
void initState() {
_initS5();
super.initState();
}
Future<void> _initCache() async {
await cacheManager?.init();
}
void _initS5() async {
// 这是一个示例S5节点,建议使用自己的节点以获得最佳性能
s5 = await initS5("https://s5.jptr.tech", "hive", null);
cacheManager = CachedS5Manager(s5: s5!);
await _initCache();
setState(() {}); // 更新UI
}
void _submitCID() async {
if (s5 != null) {
setState(() {
cid = _cidController.text;
});
}
}
void _clearCache() async {
cacheManager?.clear();
}
void _clearImage() async {
setState(() {
cid = null;
});
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
body: ListView(
children: [
Row(
children: [
const Text("S5状态:"),
(s5 == null)
? const CircularProgressIndicator()
: const Icon(Icons.check),
],
),
TextField(
controller: _cidController,
decoration: const InputDecoration(labelText: "CID: z2..."),
),
const SizedBox(
height: 10,
),
TextField(
controller: _thumhashController,
decoration: const InputDecoration(labelText: "Thumbhash: "),
),
const SizedBox(
height: 10,
),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ElevatedButton(
onPressed: _submitCID, child: const Text("提交CID")),
ElevatedButton(
onPressed: _clearCache, child: const Text("清除缓存")),
ElevatedButton(
onPressed: _clearImage,
child: const Text("清除加载的图像"))
],
),
const SizedBox(
height: 10,
),
AnimatedSwitcher(
duration: const Duration(milliseconds: 300),
child: (cid != null && s5 != null)
? CachedS5Image(
cid: cid!,
s5: s5!,
thumbhash: _thumhashController.text,
cacheManager: cacheManager,
)
: Container(),
),
],
),
);
}
}
更多关于Flutter图片缓存插件cached_s5_image的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter图片缓存插件cached_s5_image的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
cached_network_image
是 Flutter 中一个非常流行的插件,用于加载和缓存网络图片。它可以帮助你高效地加载网络图片,并且自动处理图片的缓存,避免重复下载相同的图片。
以下是如何在 Flutter 项目中使用 cached_network_image
插件的详细步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 cached_network_image
插件的依赖:
dependencies:
flutter:
sdk: flutter
cached_network_image: ^3.2.0
然后运行 flutter pub get
来安装依赖。
2. 基本用法
你可以使用 CachedNetworkImage
组件来加载网络图片。以下是一个简单的示例:
import 'package:flutter/material.dart';
import 'package:cached_network_image/cached_network_image.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('CachedNetworkImage Example'),
),
body: Center(
child: CachedNetworkImage(
imageUrl: 'https://example.com/image.jpg',
placeholder: (context, url) => CircularProgressIndicator(),
errorWidget: (context, url, error) => Icon(Icons.error),
),
),
),
);
}
}
3. 参数说明
imageUrl
: 要加载的图片的 URL。placeholder
: 在图片加载过程中显示的占位符。通常是一个加载指示器(如CircularProgressIndicator
)。errorWidget
: 如果图片加载失败时显示的组件,通常是一个错误图标。fit
: 图片的填充方式,例如BoxFit.cover
、BoxFit.contain
等。width
和height
: 图片的宽度和高度。fadeInDuration
: 图片淡入的持续时间。fadeInCurve
: 图片淡入的动画曲线。
4. 高级用法
缓存管理
你可以使用 CachedNetworkImageProvider
来手动管理图片缓存:
final imageProvider = CachedNetworkImageProvider('https://example.com/image.jpg');
清除缓存
你可以使用 CachedNetworkImage.evictFromCache
方法来清除缓存中的特定图片:
CachedNetworkImage.evictFromCache('https://example.com/image.jpg');
自定义缓存配置
你可以在 CachedNetworkImage
初始化时配置缓存的大小和过期时间:
CachedNetworkImage(
imageUrl: 'https://example.com/image.jpg',
maxWidthDiskCache: 1000, // 最大磁盘缓存宽度
maxHeightDiskCache: 1000, // 最大磁盘缓存高度
cacheKey: 'custom_cache_key', // 自定义缓存键
);
5. 完整示例
以下是一个完整的示例,展示了如何使用 CachedNetworkImage
加载和显示网络图片:
import 'package:flutter/material.dart';
import 'package:cached_network_image/cached_network_image.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('CachedNetworkImage Example'),
),
body: Center(
child: CachedNetworkImage(
imageUrl: 'https://example.com/image.jpg',
placeholder: (context, url) => CircularProgressIndicator(),
errorWidget: (context, url, error) => Icon(Icons.error),
fit: BoxFit.cover,
width: 200,
height: 200,
),
),
),
);
}
}