Flutter文件缓存管理插件cache_manager的使用

Flutter 文件缓存管理插件 cache_manager 的使用

cache_manager 是一个用于处理 Flutter 应用程序缓存的强大工具。它为 iOS 和 Android 平台提供了支持。

安装

pubspec.yaml 文件中添加依赖项:

dependencies:
  cache_manager: ^<最新版本>

强大功能

缓存工具

  • CacheManagerUtils.conditionalCache({key, valueType, actionIfNull, actionIfNotNull})

    根据缓存值进行条件构建。actionIfNullactionIfNotNull 是动态参数,用于导航视图、渲染 UI、调试值等。valueType 表示缓存的数据类型(StringValueBoolValueIntValueDoubleValue)。

  • CacheManagerUtils.cacheTextBuilder(textStyle, cacheKey})

    用于缓存值的文本构建器。cacheKey 是用于寻址缓存的键。如果缓存缺失,将返回 ‘Invalid cache’。使用 textStyle 来设置缓存值的样式。

读取缓存

  • ReadCache.getJson(key):获取存储为缓存的 JSON。
  • ReadCache.getString(key):获取存储为缓存的字符串。
  • ReadCache.getBool(key):获取存储为缓存的布尔值。
  • ReadCache.getInt(key):获取存储为缓存的整数。
  • ReadCache.getDouble(key):获取存储为缓存的双精度浮点数。

写入缓存

  • WriteCache.setJson(key,value):将 JSON 设置为缓存。
  • WriteCache.setString(key,value):将字符串设置为缓存。
  • WriteCache.setInt(key,value):将整数设置为缓存。
  • WriteCache.setBool(key,value):将布尔值设置为缓存。
  • WriteCache.setDouble(key,value):将双精度浮点数设置为缓存。
  • WriteCache.setListString(key,value):将字符串列表设置为缓存。

删除缓存

  • DeleteCache.deleteKey(key,[takeAction]):删除缓存并在缓存被删除时执行操作(可选)。

示例:带有缓存用户 ID 的登录流程

以下是一个示例,展示了如何在登录视图中使用缓存用户 ID。

// 登录视图中的附加函数
Future<String?> login({
    required BuildContext context,
    required String email,
    required String password,
  }) async {
    try {
      var userId = await _authenticationService.login(
          context: context, email: email, password: password);
      await WriteCache.setString(key: "cache", value: userId!);
    } catch (e) {
      print(e); // 如果发生错误,进行处理
   }
 }
 
// 欢迎页面视图
import 'dart:async';
import 'package:cache_manager/cache_manager.dart';
import 'package:flutter/material.dart';

class SplashView extends StatefulWidget {
  [@override](/user/override)
  _SplashViewState createState() => _SplashViewState();
}

class _SplashViewState extends State<SplashView> {
  Future initiateCache() async {
    return CacheManagerUtils.conditionalCache(
        key: "cache",
        valueType: ValueType.StringValue,
        actionIfNull: () {
          Navigator.of(context).pushNamed(AppRoutes.LoginRoute);
        },
        actionIfNotNull: () {
          Navigator.of(context).pushNamed(AppRoutes.HomeRoute);
        });
  }

  [@override](/user/override)
  void initState() {
    Timer(Duration(seconds: 1), initiateCache);
    super.initState();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Text("演示应用程序"),
      ),
    );
  }
}

// 主页视图
import 'package:cache_manager/core/cache_manager_utils.dart';
import 'package:cache_manager/core/delete_cache_service.dart';
import 'package:flutter/material.dart';

class HomeView extends StatefulWidget {
  [@override](/user/override)
  _HomeViewState createState() => _HomeViewState();
}

class _HomeViewState extends State<HomeView> {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: CacheManagerUtils.cacheTextBuilder(
            textStyle: TextStyle(color: Colors.white), cacheKey: "cache"),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          DeleteCache.deleteKey(
              "cache", Navigator.of(context).pushNamed(AppRoutes.LoginRoute));
        },
      ),
    );
  }
}

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

1 回复

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


当然,以下是一个关于如何在Flutter项目中使用cache_manager插件进行文件缓存管理的代码案例。cache_manager是一个强大的Flutter插件,用于管理文件的缓存,支持从网络下载文件并缓存到本地,同时提供缓存失效和更新机制。

首先,确保你的pubspec.yaml文件中已经添加了cache_manager依赖:

dependencies:
  flutter:
    sdk: flutter
  cache_manager: ^x.y.z  # 请替换为最新版本号

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

接下来,我们来看一个具体的代码示例:

import 'package:flutter/material.dart';
import 'package:cache_manager/cache_manager.dart';
import 'package:flutter_cache_manager/flutter_cache_manager.dart';
import 'dart:io';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'CacheManager Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: CacheManagerDemo(),
    );
  }
}

class CacheManagerDemo extends StatefulWidget {
  @override
  _CacheManagerDemoState createState() => _CacheManagerDemoState();
}

class _CacheManagerDemoState extends State<CacheManagerDemo> {
  final BaseCacheManager _cacheManager = DefaultCacheManager();

  Future<void> _fetchAndShowImage() async {
    // 假设我们有一个图片的URL
    String imageUrl = 'https://example.com/path/to/image.jpg';

    // 使用CacheManager获取文件
    File file = await _cacheManager.getSingleFile(imageUrl);

    // 显示图片
    setState(() {
      // 这里你可以使用Image.file(file)来显示图片
      // 但为了简化示例,我们只打印文件路径
      print('Cached image path: ${file.path}');
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('CacheManager Demo'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: _fetchAndShowImage,
          child: Text('Fetch and Show Cached Image'),
        ),
      ),
    );
  }
}

在这个示例中,我们做了以下几件事情:

  1. 初始化CacheManager:我们创建了一个DefaultCacheManager实例。在实际应用中,你也可以根据需要自定义CacheManager。

  2. 获取并缓存文件:在_fetchAndShowImage方法中,我们使用CacheManager的getSingleFile方法从给定的URL下载并缓存文件。这个方法会检查文件是否已经在缓存中,如果不在,它会下载文件并缓存;如果已经在缓存中,它会直接返回缓存的文件。

  3. 显示文件:在这个示例中,我们只是打印了缓存文件的路径。在实际应用中,你可以使用Image.file(file)来显示图片,或者使用其他方式来访问缓存的文件。

这个示例展示了如何使用cache_manager插件进行基本的文件缓存管理。cache_manager还提供了很多高级功能,比如配置缓存策略、监听缓存事件等,你可以根据需求进一步探索和使用这些功能。

回到顶部