Flutter媒体缓存插件cached_media的使用

Flutter媒体缓存插件cached_media的使用

这个包会将你的媒体文件本地存储起来,以节省带宽和资源。


示例代码

import 'package:cached_media/cached_media.dart' as cm;
import 'package:cached_media/widget/cached_media.dart';
import 'package:flutter/material.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  // 初始化缓存媒体插件,设置缓存最大大小为50MB,并开启日志记录
  await cm.initializeCachedMedia(cacheMaxSize: 50, showLogs: true);
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData(primarySwatch: Colors.cyan),
      home: const MyHomePage(),
      debugShowCheckedModeBanner: false,
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key});

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  [@override](/user/override)
  void dispose() {
    super.dispose();
    // 清理缓存媒体插件
    cm.disposeCachedMedia();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('Cached Media Example')),
      body: SafeArea(
        child: Center(
          child: Container(
            color: Colors.grey[200],
            height: 250,
            width: 250,
            child: CachedMedia(
              uniqueId: 'bcd', // 唯一标识符,用于区分不同的媒体文件
              mediaUrl: 'https://www.gstatic.com/webp/gallery/2.jpg', // 要加载的媒体文件URL
              builder: (context, snapshot) {
                // 根据下载状态构建UI
                if (snapshot.status == DownloadStatus.loading) {
                  // 如果正在加载,则显示圆形进度条
                  return const Center(child: CircularProgressIndicator.adaptive());
                } else if (snapshot.status == DownloadStatus.success && snapshot.bytes != null) {
                  // 如果下载成功且有字节数据,则显示图像
                  return Image.memory(
                    snapshot.bytes!, // 显示内存中的图像数据
                  );
                } else {
                  // 如果出现错误,则显示错误文本
                  return const Center(child: Text('Error'));
                }
              },
            ),
          ),
        ),
      ),
    );
  }
}

更多关于Flutter媒体缓存插件cached_media的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter媒体缓存插件cached_media的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


cached_media 是一个用于 Flutter 的插件,它允许你在应用中缓存媒体文件(如图片、音频、视频等),以便在后续访问时能够快速加载,减少网络请求和提高用户体验。使用 cached_media 可以有效地管理媒体资源的缓存,避免重复下载相同的内容。

以下是如何在 Flutter 项目中使用 cached_media 插件的步骤:

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 cached_media 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  cached_media: ^0.0.1  # 请根据最新版本号更新

然后运行 flutter pub get 来获取依赖。

2. 初始化缓存

在你的应用启动时,初始化 cached_media 插件。通常可以在 main.dart 中的 main 函数中进行初始化:

import 'package:cached_media/cached_media.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await CachedMedia.initialize();  // 初始化缓存
  runApp(MyApp());
}

3. 使用缓存媒体

你可以使用 CachedMedia 来加载和缓存媒体文件。以下是一个简单的例子,展示如何使用 CachedMedia 来缓存和显示一张图片:

import 'package:flutter/material.dart';
import 'package:cached_media/cached_media.dart';

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Cached Media Example'),
        ),
        body: Center(
          child: CachedMedia(
            url: 'https://example.com/image.jpg',  // 图片的URL
            placeholder: CircularProgressIndicator(),  // 加载时的占位符
            errorWidget: Icon(Icons.error),  // 加载失败时显示的Widget
          ),
        ),
      ),
    );
  }
}

4. 清理缓存

你可以手动清理缓存,以释放设备存储空间。例如,在某个按钮的点击事件中调用以下代码:

await CachedMedia.clearCache();  // 清理所有缓存

或者,你可以根据某些条件(如文件大小、缓存时间等)来清理缓存:

await CachedMedia.clearCache(maxSizeMB: 100);  // 清理超过100MB的缓存
回到顶部