Flutter缓存管理插件flutter_hi_cache_c3的使用

Flutter缓存管理插件flutter_hi_cache_c3的使用

flutter_hi_cache



flutter_hi_cache_c3 是一个基于 shared_preferences 的缓存管理器。它可以在 iOS、Android 和 Web 上工作。

内容

示例

开始使用

HiCache.getInstance().setString("cache_key", "cache_value");
HiCache.getInstance().get("cache_key");

贡献

欢迎提交问题。请附上你的bug截图和代码片段。最快解决问题的方法是在其中一个示例中重现问题。

欢迎提交 Pull Requests。如果你想改变API或进行重大更改,最好先创建一个问题并讨论。


MIT 许可证


完整示例Demo

以下是一个完整的示例,展示了如何使用 flutter_hi_cache_c3 插件来管理缓存。

example/lib/main.dart

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

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

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

  // 这个小部件是你的应用的根。
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        // 这是你的应用的主题。
        //
        // 尝试一下:运行你的应用(使用 "flutter run")。你会看到应用有一个紫色的工具栏。然后,在不退出应用的情况下,尝试将颜色方案中的seedColor更改为Colors.green
        // 并触发热重载(保存更改或按热重载按钮在支持Flutter的IDE中,或在命令行启动应用时按 "r")。
        //
        // 注意:计数器没有重置回零;应用程序状态在重载时不丢失。要重置状态,请使用热重启。
        //
        // 这适用于代码,而不仅仅是值:大多数代码更改可以通过简单的热重载来测试。
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      // home: const MyHomePage(title: 'Flutter Demo Home Page'),
      home: FutureBuilder<dynamic>(
          future: HiCache.preInit(),
          builder: (BuildContext context, AsyncSnapshot<dynamic> snapshot) {
            var widget = snapshot.connectionState == ConnectionState.done
                ? const MyHomePage(title: 'HiCache Demo')
                : const Scaffold(
                    body: Center(
                      child: CircularProgressIndicator(),
                    ),
                  );
            return widget;
          }),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});

  // 这个小部件是你的应用的主页。它是有状态的,意味着它有一个状态对象(在下面定义),该状态对象包含影响其外观的字段。

  // 这个类是状态的配置。它保存了由父级(在这个例子中是App小部件)提供的值(在这种情况下是标题)并用于状态的构建方法。小部件子类中的字段总是标记为"final"。

  final String title;

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

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;
  int showResult = 0;
  static const COUNT_KEY = 'key_count';

  void _incrementCounter() {
    HiCache.getInstance().setInt(COUNT_KEY, ++_counter);
    setState(() {
      showResult = HiCache.getInstance().get<int>(COUNT_KEY);
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    // 这个方法每次调用setState都会被重新运行,比如上面的_incrementCounter方法。
    //
    // Flutter框架已经优化了重建方法,使其变得快速,因此你可以重新构建任何需要更新的东西,而不是个别更改小部件实例。
    return Scaffold(
      appBar: AppBar(
        // 尝试一下:将这里的颜色更改为特定颜色(例如Colors.amber)并触发热重载以查看AppBar的颜色变化,而其他颜色保持不变。
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        // 这里我们从MyHomePage对象中获取值,该对象是由App.build方法创建的,并将其用于设置我们的appbar标题。
        title: Text(widget.title),
      ),
      body: Center(
        // Center是一个布局小部件。它接受一个子元素并将其定位在父元素的中间。
        child: Column(
          // Column也是一个布局小部件。它接受一个子元素列表并垂直排列它们。默认情况下,它水平调整自己的大小以适应其子元素,并尽可能高。
          //
          // Column有几个属性可以控制其自身大小和子元素的位置。这里我们使用mainAxisAlignment来垂直居中子元素;主轴是垂直的(交叉轴是水平的)。
          //
          // 尝试一下:启用调试绘制(选择IDE中的"切换调试绘制"操作,或按控制台中的 "p" 键),以查看每个小部件的线框。
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            const Text(
              '你点击按钮的次数:',
            ),
            Text(
              '$showResult',
              style: Theme.of(context).textTheme.headlineMedium,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: '增加',
        child: const Icon(Icons.add),
      ), // 这个尾随逗号使自动格式化更美观。
    );
  }
}

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

1 回复

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


flutter_hi_cache_c3 是一个用于 Flutter 应用的缓存管理插件,它可以帮助你在应用中存储和读取缓存数据。使用这个插件,你可以轻松地在本地存储键值对数据、对象等。

以下是如何使用 flutter_hi_cache_c3 插件的步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  flutter_hi_cache_c3: ^1.0.0  # 请确保使用最新版本

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

2. 初始化缓存

在使用缓存之前,你需要初始化缓存管理器。通常你可以在应用的 main 函数中进行初始化:

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

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

3. 使用缓存

初始化之后,你就可以在应用中使用缓存了。以下是一些常见的操作:

存储数据

你可以使用 HiCache.getInstance() 来获取缓存实例,然后使用 setString, setInt, setBool, setDouble, setObject 等方法来存储数据。

import 'package:flutter_hi_cache_c3/flutter_hi_cache_c3.dart';

void storeData() {
  var cache = HiCache.getInstance();
  
  // 存储字符串
  cache.setString('key_string', 'Hello, World!');
  
  // 存储整数
  cache.setInt('key_int', 123);
  
  // 存储布尔值
  cache.setBool('key_bool', true);
  
  // 存储对象
  cache.setObject('key_object', {'name': 'John', 'age': 30});
}

读取数据

你可以使用 getString, getInt, getBool, getDouble, getObject 等方法来读取缓存中的数据。

import 'package:flutter_hi_cache_c3/flutter_hi_cache_c3.dart';

void readData() {
  var cache = HiCache.getInstance();
  
  // 读取字符串
  String? stringValue = cache.getString('key_string');
  print('String Value: $stringValue');
  
  // 读取整数
  int? intValue = cache.getInt('key_int');
  print('Int Value: $intValue');
  
  // 读取布尔值
  bool? boolValue = cache.getBool('key_bool');
  print('Bool Value: $boolValue');
  
  // 读取对象
  Map<String, dynamic>? objectValue = cache.getObject('key_object');
  print('Object Value: $objectValue');
}

删除数据

你可以使用 remove 方法来删除缓存中的某个键值对。

import 'package:flutter_hi_cache_c3/flutter_hi_cache_c3.dart';

void deleteData() {
  var cache = HiCache.getInstance();
  
  // 删除某个键值对
  cache.remove('key_string');
}

清空缓存

你可以使用 clear 方法来清空所有缓存数据。

import 'package:flutter_hi_cache_c3/flutter_hi_cache_c3.dart';

void clearCache() {
  var cache = HiCache.getInstance();
  
  // 清空所有缓存
  cache.clear();
}

4. 其他注意事项

  • flutter_hi_cache_c3 插件是基于 shared_preferences 实现的,因此它的存储方式与 shared_preferences 类似,适合存储小量的数据。
  • 如果你需要存储大量的数据或复杂的结构,可能需要考虑使用其他存储方式,如 SQLite 或文件存储。

5. 示例代码

以下是一个完整的示例代码,展示了如何使用 flutter_hi_cache_c3 插件进行缓存管理:

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

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await HiCache.preInit();
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Cache Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: CacheDemo(),
    );
  }
}

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

class _CacheDemoState extends State<CacheDemo> {
  var cache = HiCache.getInstance();

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Cache Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            ElevatedButton(
              onPressed: () {
                cache.setString('key_string', 'Hello, World!');
                cache.setInt('key_int', 123);
                cache.setBool('key_bool', true);
                cache.setObject('key_object', {'name': 'John', 'age': 30});
              },
              child: Text('Store Data'),
            ),
            ElevatedButton(
              onPressed: () {
                String? stringValue = cache.getString('key_string');
                int? intValue = cache.getInt('key_int');
                bool? boolValue = cache.getBool('key_bool');
                Map<String, dynamic>? objectValue = cache.getObject('key_object');
                print('String Value: $stringValue');
                print('Int Value: $intValue');
                print('Bool Value: $boolValue');
                print('Object Value: $objectValue');
              },
              child: Text('Read Data'),
            ),
            ElevatedButton(
              onPressed: () {
                cache.remove('key_string');
              },
              child: Text('Delete Data'),
            ),
            ElevatedButton(
              onPressed: () {
                cache.clear();
              },
              child: Text('Clear Cache'),
            ),
          ],
        ),
      ),
    );
  }
}
回到顶部