Flutter网络Lottie动画缓存插件cache_lottie_network的使用

Flutter网络Lottie动画缓存插件cache_lottie_network的使用

希望这个插件可以帮助我们将Lottie网络动画保存到本地存储。

插件目标

帮助我们在使用Lottie网络动画时保存动画字节数据。因此,当设备没有连接到WIFI或移动数据时,应用程序可以展示之前加载过的动画。

使用步骤

1. 设置你的Lottie URL(JSON格式)

例如:'https://cache_lottie_network.json'

2. 设置你的Widget

我建议你使用类似于“Circular Progress Indicator”或“SkeletonAvatar”的小部件。这些小部件会在以下情况下显示:

  • 设备在加载动画前已经没有网络连接。
  • 这个包的本地存储为空且没有网络连接。

3. 设置你的Keys

为什么需要设置Key?因为这个插件使用了本地存储,并且需要Keys!如果你使用这个插件多次,请确保不要使用相同的Keys。 例如:

CacheLottieNetwork(
  LottieUrl: "https://loremipsum.json",
  function: CircularProgressIndicator(),
  keys: "lottie1"
)

CacheLottieNetwork(
  LottieUrl: "https://loremipsum.json",
  function: CircularProgressIndicator(),
  keys: "lottie2"
)

完整示例Demo

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Lottie Animation Cache Demo')),
        body: Center(
          child: LottieAnimationExample(),
        ),
      ),
    );
  }
}

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

class _LottieAnimationExampleState extends State<LottieAnimationExample> {
  // 设置你的Lottie URL
  final String lottieUrl = 'https://loremipsum.json';

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[
        // 使用CircularProgressIndicator作为加载指示器
        CacheLottieNetwork(
          LottieUrl: lottieUrl,
          function: CircularProgressIndicator(),
          keys: "lottie1",
        ),
        SizedBox(height: 20),
        // 再次使用不同的Keys以避免冲突
        CacheLottieNetwork(
          LottieUrl: lottieUrl,
          function: CircularProgressIndicator(),
          keys: "lottie2",
        ),
      ],
    );
  }
}

更多关于Flutter网络Lottie动画缓存插件cache_lottie_network的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter网络Lottie动画缓存插件cache_lottie_network的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


cache_lottie_network 是一个 Flutter 插件,用于缓存从网络加载的 Lottie 动画文件。通过使用这个插件,你可以减少网络请求的次数,提高应用性能,特别是在需要多次加载相同的 Lottie 动画时。

安装

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

dependencies:
  flutter:
    sdk: flutter
  cache_lottie_network: ^0.0.3 # 请检查最新版本

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

使用

cache_lottie_network 提供了一个 CachedLottieNetwork 小部件,你可以用它来加载和缓存 Lottie 动画。

基本用法

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

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Cached Lottie Network Example'),
      ),
      body: Center(
        child: CachedLottieNetwork(
          'https://assets8.lottiefiles.com/packages/lf20_5rQ1TS.json',
          height: 200,
          width: 200,
        ),
      ),
    );
  }
}

在上面的例子中,CachedLottieNetwork 会从指定的 URL 加载 Lottie 动画,并将其缓存到本地。下次再次加载时,它将直接从缓存中读取,而不需要再次下载。

参数说明

CachedLottieNetwork 构造函数接受以下参数:

  • url: Lottie 动画的 URL。
  • key: 用于标识动画的可选键。
  • height: 动画的高度。
  • width: 动画的宽度。
  • fit: 动画的缩放方式,默认为 BoxFit.contain
  • alignment: 动画的对齐方式,默认为 Alignment.center
  • repeat: 是否重复播放动画,默认为 false
  • animate: 是否自动播放动画,默认为 true
  • frameRate: 动画的帧率,默认为 FrameRate.max
  • onLoaded: 当动画加载完成时的回调函数。
  • onLoading: 当动画正在加载时的回调函数。
  • onError: 当动画加载失败时的回调函数。

缓存管理

cache_lottie_network 插件会自动管理缓存,但你也可以通过以下方法来手动控制缓存:

  • 清除缓存

    import 'package:cache_lottie_network/cache_lottie_network.dart';
    
    Future<void> clearCache() async {
      await CachedLottieNetwork.clearCache();
    }
    
  • 获取缓存大小

    import 'package:cache_lottie_network/cache_lottie_network.dart';
    
    Future<int> getCacheSize() async {
      return await CachedLottieNetwork.getCacheSize();
    }
回到顶部