Flutter缓存管理插件vit_cache的使用

发布于 1周前 作者 phonegap100 来自 Flutter

Flutter缓存管理插件vit_cache的使用

本插件是一个用于缓存单个值和多个键值对的Dart包,并且具有时间至生命(TTL)机制。该插件通过在指定时间内缓存结果来减少冗余的网络调用或昂贵的操作。

功能

  • 使用TTL缓存单个值。
  • 使用独立TTL缓存多个键值对。
  • 自动获取并更新过期的缓存。
  • 手动更新或清除缓存。

开始使用

要开始使用此插件,请将其添加到您的 pubspec.yaml 文件中:

flutter pub add vit_cache

使用方法

单个缓存

以下是如何使用 SingularCache 来从API获取配置的示例:

import 'package:vit_cache/vit_cache.dart';

// 定义一个用户信息缓存类
class UserInfoCache extends SingularCache<Map<String, dynamic>> {

  // 缓存类应该是单例的,因为缓存是在类实例级别上的
  UserInfoCache._();

  [@override](/user/override)
  Future<Map<String, dynamic>> fetch() async {
    // 模拟从网络获取配置
    await Future.delayed(Duration(seconds: 2));
    return {
      'name': 'Dave',
      'auth_token': 'xxxxx'
    };
  }

  [@override](/user/override)
  Duration get ttl => Duration(seconds: 10);
}

// 创建一个UserInfoCache实例
final userInfoCache = UserInfoCache._();

void main() async {
  // 获取并缓存数据
  var info = await userInfoCache.get();
  print('Info: $info');

  // 缓存命中
  info = await userInfoCache.get();
  print('Info: $info');

  // 手动更新缓存值
  userInfoCache.update({
    'name': 'Dave',
    'auth_token': 'xxxxx'
  });

  // 清除缓存
  userInfoCache.clear();
}

多个缓存

以下是如何使用 MultiTimedCacheModel 来从API获取多个配置的示例:

import 'package:vit_cache/vit_cache.dart';

// 定义一个配置缓存类
class ConfigCache extends MultiTimedCacheModel<String, Map<String, dynamic>> {

  // 缓存类应该是单例的,因为缓存是在类实例级别上的
  ConfigCache._();

  [@override](/user/override)
  Future<Map<String, dynamic>> fetch(String key) async {
    // 模拟从网络获取配置
    await Future.delayed(Duration(seconds: 2));
    return {'apiUrl': 'https://api.example.com/$key', 'timeout': 5000};
  }

  [@override](/user/override)
  Future<Map<String, Map<String, dynamic>>> fetchMany(Iterable<String> keys) async {
    // 模拟从网络获取多个配置
    await Future.delayed(Duration(seconds: 2));
    return {for (var key in keys) key: {'apiUrl': 'https://api.example.com/$key', 'timeout': 5000}};
  }

  [@override](/user/override)
  Duration get ttl => Duration(seconds: 10);
}

// 创建一个ConfigCache实例
final configCache = ConfigCache._();

void main() async {
  // 获取并缓存单个配置
  var config = await configCache.get('service1');
  print('Config for service1: $config');

  // 获取并缓存多个配置
  await configCache.setMany(['service1', 'service2']);
  var config1 = await configCache.get('service1');
  var config2 = await configCache.get('service2');
  print('Config for service1: $config1');
  print('Config for service2: $config2');

  // 清除特定键的缓存
  configCache.invalidate('service1');

  // 清除整个缓存
  configCache.clear();
}

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

1 回复

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


当然,以下是一个关于如何使用Flutter缓存管理插件vit_cache的代码案例。vit_cache是一个轻量级的Flutter缓存库,用于管理应用程序中的数据缓存。

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

dependencies:
  flutter:
    sdk: flutter
  vit_cache: ^latest_version  # 请替换为最新版本号

然后运行flutter pub get来安装依赖。

接下来,我们来看一下如何使用vit_cache进行缓存管理。

1. 导入vit_cache

在你的Dart文件中导入vit_cache

import 'package:vit_cache/vit_cache.dart';

2. 初始化缓存管理

你可以在应用启动时初始化一个全局的缓存管理器。例如,在main.dart中:

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

void main() {
  // 初始化缓存管理器
  final cacheManager = VitCacheManager(
    storage: VitStorage.memory, // 或者 VitStorage.disk
    maxCount: 100, // 最大缓存项数量
    maxAge: Duration(days: 7), // 最大缓存时间
  );

  runApp(MyApp(cacheManager: cacheManager));
}

class MyApp extends StatelessWidget {
  final VitCacheManager cacheManager;

  MyApp({required this.cacheManager});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: HomeScreen(cacheManager: cacheManager),
    );
  }
}

3. 使用缓存管理器

在你的屏幕或组件中使用缓存管理器进行数据的缓存和获取。例如,在HomeScreen中:

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

class HomeScreen extends StatefulWidget {
  final VitCacheManager cacheManager;

  HomeScreen({required this.cacheManager});

  @override
  _HomeScreenState createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  Future<String?>? _fetchDataFuture;

  @override
  void initState() {
    super.initState();
    _fetchData();
  }

  Future<void> _fetchData() async {
    // 尝试从缓存中获取数据
    String? cachedData = await widget.cacheManager.get<String>('myDataKey');
    if (cachedData != null) {
      print('数据来自缓存: $cachedData');
      // 如果缓存中有数据,直接使用
      setState(() {});
    } else {
      // 如果缓存中没有数据,从网络或其他来源获取数据
      final newData = await _fetchDataFromNetwork();
      // 将数据存入缓存
      await widget.cacheManager.put<String>('myDataKey', newData);
      print('数据来自网络: $newData');
      setState(() {});
    }
  }

  Future<String> _fetchDataFromNetwork() async {
    // 模拟网络请求延迟
    await Future.delayed(Duration(seconds: 2));
    return '这是从网络获取的数据';
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('VitCache 示例'),
      ),
      body: Center(
        child: _fetchDataFuture == null
            ? CircularProgressIndicator()
            : Text(_fetchDataFuture!.result ?? '加载数据失败'),
      ),
    );
  }
}

在这个例子中,我们首先尝试从缓存中获取数据。如果缓存中有数据,我们直接使用它。如果缓存中没有数据,我们从网络或其他来源获取数据,并将其存入缓存中。

4. 清理缓存

你也可以在需要的时候清理缓存。例如,添加一个按钮来清理缓存:

FloatingActionButton(
  onPressed: () async {
    await widget.cacheManager.clear();
    print('缓存已清理');
    _fetchData(); // 重新获取数据
  },
  tooltip: '清理缓存',
  child: Icon(Icons.delete),
),

将上述按钮添加到你的ScaffoldfloatingActionButton属性中。

这样,你就完成了一个基本的Flutter应用,其中使用了vit_cache插件来管理数据缓存。希望这个代码案例对你有帮助!

回到顶部