Flutter资源管理插件asset_manager_tool的使用

Flutter资源管理插件asset_manager_tool的使用

在开发时你可能因为需求的不断修改需要反复地修改、删除、添加一些资产文件。在这个过程中可能遗留一些已经不需要的资产文件,但经过一段时间后你很难判断这些资产文件是否真的可以删除,可能在你不注意的角落仍然有功能需要它们。这个时候我们可能需要一个资产管理器能够去管理这些文件,并给出一点提示,让我们可以更好地判断资产文件是否在项目中使用到。

安装

这个包的目的是帮助我们管理资产文件,并给出提示资产文件是否在项目中使用到。在一般情况下,把它放在dev_dependencies下,在你的pubspec.yaml中。

dev_dependencies:
  asset_manager_tool:

使用

内置命令

asset_manager_tool包暴露了一个binary文件,它可以使用dart run asset_manager_tool <command>执行命令。

可用的命令有watchbuild:assetbuild:listclean

注意: 安装后第一次运行命令应该是watchbuild:asset以生成资产清单文件,默认它是asset_list.dart

  • watch: 以asset资源为起点创建清单list数据,然后监听asset和清单list的修改重建list或删除asset。
  • build:asset: 以asset资源为起点创建清单list数据。
  • build:list: 以清单list数据为起点删除或恢复asset资源。
  • clean: 以清单list数据为起点清除未使用的asset资源。

命令参数

  • --help: 打印帮助信息。
  • --lib-path: ['lib/**.dart'] 监听的lib路径。
  • --asset-path: ['lib/assets/*.*'] 监听的asset资产路径。当是flutter项目并且没有配置asset-path时,会取flutter:assetsflutter:fonts的资产路径。
  • --dustbin-path: '.asset_dustbin/' 删除的asset资产保存的垃圾箱文件夹dustbin路径。
  • --list-path: lib/asset_list.dart 通过asset资产创建的清单list。
  • --config-path: pubspec.yaml config文件路径。
  • --name-replace: {'libAssets':''} asset资产实例名替换。
  • --exclude-path: ['.*', '.*/**.*', '**/.*', '**/.*/**.*'] 排除监听的文件,可以包含lib-pathasset-path的路径。
  • --format-type: value asset_list.dart格式类型,目前有valuemodel
在终端中设置参数示例,优先级第一位
$ dart run asset_manager_tool watch --dustbin-path=.asset_dustbin/ --list-path=lib/asset_list.dart --name-replace=libAssets:
$ dart run asset_manager_tool build:asset --dustbin-path=.asset_dustbin/ --list-path=lib/asset_list.dart --name-replace=libAssets:
$ dart run asset_manager_tool build:list --dustbin-path=.asset_dustbin/ --list-path=lib/asset_list.dart --name-replace=libAssets:
$ dart run asset_manager_tool clean --dustbin-path=.asset_dustbin/ --list-path=lib/asset_list.dart --name-replace=libAssets:
在asset_manager_tool.yaml中设置参数示例,优先级第二位
asset_manager_tool:
  dustbin-path: .asset_dustbin/
  list-path: lib/asset_list.dart
  name-replace:
    libAssets:
在pubspec.yaml中设置参数示例,优先级第三位

注意: 当是flutter项目并且没有配置asset-path时,会取flutter:assetsflutter:fonts的资产路径。

flutter:
  assets:
    - lib/assets/options/
    - lib/assets/img/

  fonts:
    - family: Iconfont
      fonts:
        - asset: lib/assets/fonts/iconfont.ttf
          style: italic

asset_manager_tool:
  dustbin-path: .asset_dustbin/
  list-path: lib/asset_list.dart
  name-replace:
    libAssets:

项目中使用

// asset_list.dart文件由参数list-path决定
import 'asset_list.dart';

void main() {
  // 资产路径,assetName由资产路径和参数name-replace决定
  // 当format-type值为value时
  print(AssetList.assetName);
  // 当format-type值为model时
  print(AssetList.assetName.path);

  // 如果是图片,你还可以获得宽、高
  // 当format-type值为value时
  print(AssetList.assetName$width);
  print(AssetList.assetName$height);
  // 当format-type值为model时
  print(AssetList.assetName.width);
  print(AssetList.assetName.height);
}

资产管理和使用提示

  • 修改资产文件: 当添加、删除、修改资产文件时asset_list.dart中的资产清单也会跟随修改。
  • 修改asset_list.dart中的资产: 当删除、恢复资产信息实例时,资产文件会被移到、移出垃圾箱文件夹.asset_dustbin/
  • 是否使用: asset_list.dart中的每条资产信息实例前都有一段注释,里面备注了hash和是否使用,Y有使用,N没使用。
// 当format-type值为value时
abstract class AssetList {
  /* 9b024533 Y */
  static const String fontsIconfontRegularTtf = 'lib/assets/fonts/iconfont.ttf';

  /* 24d8912f N */
  static const String imgCoverJpg = 'lib/assets/img/cover.jpg';
  static const int imgCoverJpg$width = 1200;
  static const int imgCoverJpg$height = 800;

  /* 1757e9c5 N */
  static const String optionsDataJson = 'lib/assets/options/data.json';
}

// 当format-type值为model时
abstract class AssetList {
  /* 9b024533 Y */ static const AssetItem fontsIconfontRegularTtf = AssetItem('lib/assets/fonts/iconfont.ttf');
  /* 24d8912f N */ static const ImageAssetItem imgCoverJpg = ImageAssetItem('lib/assets/img/cover.jpg', 1200, 800);
  /* 1757e9c5 N */ static const AssetItem optionsDataJson = AssetItem('lib/assets/options/data.json');
}

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

1 回复

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


asset_manager_tool 是一个用于简化 Flutter 项目中资源管理的插件。它可以帮助你更高效地管理应用中的资源文件(如图片、字体、音频等),并自动生成与之相关的 Dart 代码,从而减少手动编写代码的工作量。

安装 asset_manager_tool

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

dev_dependencies:
  asset_manager_tool: ^1.0.0

然后运行 flutter pub get 来安装插件。

使用 asset_manager_tool

1. 配置资源文件

确保你的资源文件已经在 pubspec.yaml 文件中正确配置。例如:

flutter:
  assets:
    - assets/images/
    - assets/fonts/
  fonts:
    - family: MyCustomFont
      fonts:
        - asset: assets/fonts/MyCustomFont-Regular.ttf

2. 生成资源管理代码

在项目根目录下运行以下命令,生成资源管理代码:

flutter pub run asset_manager_tool

该命令会根据 pubspec.yaml 中的资源配置,自动生成一个 Dart 文件,通常命名为 assets.dart,该文件包含了所有资源的路径常量。

3. 使用生成的代码

生成的 assets.dart 文件将包含类似以下的代码:

class Assets {
  static const String imagesLogo = 'assets/images/logo.png';
  static const String fontsMyCustomFont = 'assets/fonts/MyCustomFont-Regular.ttf';
}

在代码中,你可以直接引用这些常量来加载资源:

import 'assets.dart';

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: Center(
          child: Image.asset(Assets.imagesLogo),
        ),
      ),
    );
  }
}

优点

  1. 减少手动编码:通过自动生成资源路径常量,减少了手动编写代码的工作量。
  2. 避免拼写错误:生成的常量避免了手动输入路径时可能出现的拼写错误。
  3. 易于维护:当资源文件发生变化时,只需重新运行生成命令,生成的代码会自动更新。

自定义配置

你可以通过命令行参数或配置文件来定制 asset_manager_tool 的行为,例如指定生成的 Dart 文件的路径、文件名等。

flutter pub run asset_manager_tool --output lib/generated/assets.dart
回到顶部