前端学习-flutter学习-007-资源管理

《Flutter实战·第二版》
Flutter APP 安装包中会包含代码和 assets(资源)两部分。Assets 是会打包到程序安装包中的,可在运行时访问。常见类型的 assets 包括静态数据(例如JSON文件)、配置文件、图标和图片等。

指定assets 以及assets变体

assets指定应包含在应用程序中的文件, 每个 asset 都通过相对于pubspec.yaml文件所在的文件系统路径来标识自身的路径。asset 的声明顺序是无关紧要的,asset的实际目录可以是任意文件夹
构建期间,Flutter 将 asset 放置到称为 asset bundle 的特殊存档中,应用程序可以在运行时读取它们(但不能修改)。

assets:
  - assets/my_icon.png

构建过程支持“asset变体”的概念:在pubspec.yaml的assets 部分中指定 asset 路径时,构建过程中,会在相邻子目录中查找具有相同名称的任何文件。这些文件随后会与指定的 asset 一起被包含在 asset bundle 中。如:
…/graphics/background.png
…/graphics/dark/background.png
则如果这样声明,两张图片都会一起被包含在 asset bundle 中

flutter:
  assets:
    - graphics/background.png

加载assets

加载文本assets

  • 通过rootBundle (opens new window)对象加载:每个Flutter应用程序都有一个rootBundle (opens new window)对象;直接使用package:flutter/services.dart中全局静态的rootBundle对象来加载asset即可。
  • 通过 DefaultAssetBundle (opens new window)加载:建议使用 DefaultAssetBundle (opens new window)来获取当前 BuildContext 的AssetBundle。
    通常,可以使用DefaultAssetBundle.of()在应用运行时来间接加载 asset(例如JSON文件),而在widget 上下文之外,或其他AssetBundle句柄不可用时,可以使用rootBundle直接加载这些 asset,例如:
import 'dart:async' show Future;
import 'package:flutter/services.dart' show rootBundle;

Future<String> loadAsset() async {
  return await rootBundle.loadString('assets/config.json');
}

加载图片

  • 声明分辨率相关的图片 assets
    必须根据特定的目录结构来保存asset:
    主资源默认对应于1.0倍的分辨率图片。看一个例子:

…/my_icon.png
…/2.0x/my_icon.png
…/3.0x/my_icon.png
在设备像素比率为1.8的设备上,.../2.0x/my_icon.png 将被选择。对于2.7的设备像素比率,.../3.0x/my_icon.png将被选择。

  • 加载图片
    • 要加载图片,可以使用 AssetImage 类(AssetImage 并非是一个widget, 它实际上是一个ImageProvider)
Widget build(BuildContext context) {
  return DecoratedBox(
    decoration: BoxDecoration(
      image: DecorationImage(
        image: AssetImage('graphics/background.png'),
      ),
    ),
  );
}
  • 也可以使用Image.asset()方法,得到一个显示图片的widget
Widget build(BuildContext context) {
  return Image.asset('graphics/background.png');
}
  • 依赖包中的资源图片
    假设应用程序依赖于一个名为“my_icons”的包
AssetImage('icons/heart.png', package: 'my_icons')
Image.asset('icons/heart.png', package: 'my_icons')

这节没咋看懂。。

posted @ 2024-07-11 21:30  ayubene  阅读(4)  评论(0编辑  收藏  举报