Flutter微小图片加载插件ak_tiny_image的使用

Flutter微小图片加载插件ak_tiny_image的使用

功能说明:

  • 使用该工具包可以实现项目内指定目录下所有图片的压缩。
  • 可以记录以前项目中旧图片不做压缩。
  • 压缩后的图片会有压缩记录,下次压缩不会重复压缩。
  • 支持webp、png、jpeg三种格式文件压缩。

使用方法:

1. 脚本配置:

// 在项目中实现类似AKTinyDoSave.dart、AKTinyDoComp.dart做如下配置

AKTinyImageManager.instance.init(
  tinyImageApiKey: "x2zpZtVlK4MJjDm03P6b1h1DhGzGR4c4",     // TinyImage的Apikey可到TinyImage申请
  projectRootPath: '/Users/anker/tiny_image/ak_tiny_image',// 项目工程地址
  imageDirPaths: {
    '/Users/anker/tiny_image/ak_tiny_image/example/imageA'  // 需要压缩图片的根目录
  }
)

2. 如何记录项目中以前旧的图片不做压缩:

// 执行以下命令:
// 1. 会计算图片的md5值并保存到项目中的".ak_tiny_image_uiq_id" 文件中
// 2. 当执行图片压缩时会计算图片的md5值是否已经在文件中,如果存在则说明图片不需要做压缩
// 3. 该脚本一般只在项目开始使用该工具前调用一次或者在新增加图片前使用一次
// 4. ".ak_tiny_image_uiq_id"需要提交到git以统一记录压缩过的图片

dart AKTinyDoSave.dart

3. 如何执行图片压缩:

// 执行以下命令:
// 1. 会读取项目中的".ak_tiny_image_uiq_id" 文件中保存已经记录压缩过的图片md5值
// 2. 当执行图片压缩时会计算图片的md5值是否已经在文件中,如果存在则说明图片不需要做压缩
// 3. 将需要压缩的图片上传到tiny image进行压缩替换原来的图片
// 4. ".ak_tiny_image_uiq_id"需要提交到git以统一记录压缩过的图片

dart AKTinyDoComp.dart

完整示例Demo

import 'package:ak_tiny_image/ak_tiny_image.dart';

void main() {
  // 初始化插件
  AKTinyImageManager.instance.init(
    tinyImageApiKey: "x2zpZtVlK4MJjDm03P6b1h1DhGzGR4c4",
    projectRootPath: '/Users/anker/tiny_image/ak_tiny_image',
    imageDirPaths: {
      '/Users/anker/tiny_image/ak_tiny_image/example/imageA'
    }
  );

  // 记录未压缩的图片
  // AKTinyImageManager.instance.lastuiqIdSave();

  // 执行压缩操作
  AKTinyImageManager.instance.execCompressed();
}
1 回复

更多关于Flutter微小图片加载插件ak_tiny_image的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


ak_tiny_image 是一个用于 Flutter 的微小图片加载插件,旨在优化图片加载性能,特别是在需要加载大量小图片的场景中。它可以帮助开发者更高效地管理和加载小图片,减少内存占用和加载时间。

安装 ak_tiny_image

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

dependencies:
  flutter:
    sdk: flutter
  ak_tiny_image: ^1.0.0  # 请使用最新版本

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

使用 ak_tiny_image

1. 基本用法

ak_tiny_image 提供了 TinyImage 组件来加载小图片。你可以像使用 Image 组件一样使用它。

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

class MyHomePage extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Tiny Image Example'),
      ),
      body: Center(
        child: TinyImage(
          imageUrl: 'https://example.com/small_image.png',
          width: 100,
          height: 100,
          fit: BoxFit.cover,
        ),
      ),
    );
  }
}

2. 配置缓存

ak_tiny_image 提供了缓存机制,你可以配置缓存的策略和大小。

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

void main() {
  TinyImageCacheConfig(
    maxSize: 50, // 最大缓存数量
    maxSizeBytes: 10 * 1024 * 1024, // 最大缓存大小(10MB)
  );

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Tiny Image Example',
      home: MyHomePage(),
    );
  }
}

3. 自定义加载器

你可以自定义图片加载器,例如使用 cached_network_image 来加载图片。

import 'package:flutter/material.dart';
import 'package:ak_tiny_image/ak_tiny_image.dart';
import 'package:cached_network_image/cached_network_image.dart';

class MyHomePage extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Tiny Image Example'),
      ),
      body: Center(
        child: TinyImage(
          imageUrl: 'https://example.com/small_image.png',
          width: 100,
          height: 100,
          fit: BoxFit.cover,
          imageBuilder: (context, imageProvider) {
            return CachedNetworkImage(
              imageUrl: 'https://example.com/small_image.png',
              width: 100,
              height: 100,
              fit: BoxFit.cover,
            );
          },
        ),
      ),
    );
  }
}
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!