在开发时你可能因为需求的不断修改需要反复的修改、删除、添加一些资产文件。在这个过程中可能遗留一些已经不需要的资产文件,但经过一段时间后你很难判断这些资产文件是否真的可以删除,可能在你不注意的角落仍然有功能需要它们。这个时候我们可能需要一个资产管理器能够去管理这些文件,并给出一点提示,让我们可以更好的判断资产文件是否在项目中使用到。
安装
这个包的目的是帮助我们管理资产文件,并给出提示资产文件是否在项目中使用到。在一般情况下,把它放在dev_dependencies下,在你的pubspec.yaml
中。
dev_dependencies:
asset_manager_tool:
使用
内置命令
asset_manager_tool包暴露了一个binary文件,它可以使用dart run asset_manager_tool <command>
执行命令。
可用的命令有watch,build:asset,build:list,clean。
注意: 安装后第一次运行命令应该是watch或build: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:assets和flutter: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-path、asset-path的路径。--format-type
:value
asset_list.dart格式类型,目前有value、model。
在终端中设置参数示例,优先级第一位
$ 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:assets和flutter: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');
}