虽然 Android 区分对待资源文件 (resources) 和资产文件 (assets),但是 Flutter 应用只有资产文件 (assets)。所有原本在 Android 中应该放在 res/drawable-* 文件夹中的资源文件,在 Flutter 中都放在一个 assets 文件夹中。
Flutter 遵循一个简单的类似 IOS 的密度相关的格式。文件可以是一倍 (1.0x)、两倍 (2.0x)、三倍 (3.0x) 或其它的任意倍数。Flutter 没有 dp 单位,但是有逻辑像素尺寸,基本和设备无关的像素尺寸是一样的。名称为 devicePixelRatio 的尺寸表示在单一逻辑像素标准下设备物理像素的比例。
和 Android 的密度分类的对照表如下:
Android 密度修饰符
Flutter 像素比例
Android 密度修饰符Flutter 像素比例
文件放置于任意文件夹中—Flutter 没有预先定义好的文件夹结构。你在 pubspec.yaml 文件中定义文件(包括位置信息),Flutter 负责找到它们。
需要注意的是,在 Flutter 1.0 beta 2 之前,在 Flutter 中定义的文件不能被原生端访问,反之亦然,原生端定义的资产文件 (assets) 和资源文件 (resources) 也无法被 Flutter 访问,因为它们是放置于不同的文件夹中的。
至于 Flutter beta 2,文件是放置于原生端的 asset 文件夹中,所以可以被原生端的 AssetManager 访问:
val flutterAssetStream = assetManager.open("flutter_assets/assets/my_flutter_asset.png")
然而对于 Flutter beta 2,Flutter 依然无法访问原生资源文件(resources),也无法访问原生资产文件(assets)。
如果你要向 Flutter 项目中添加一个新的叫 my_icon.png 的图片资源,并且将其放入我们随便起名的叫做 images 的文件夹中,你需要将基础图片(1.0x)放在 images 文件夹中,并将其它倍数的图片放入以特定倍数作为名称的子文件夹中:
images/my_icon.png // Base: 1.0x image images/2.0x/my_icon.png // 2.0x image images/3.0x/my_icon.png // 3.0x image
接下来,你需要在 pubspec.yaml 文件中定义这些图片:
assets: - images/my_icon.jpeg
然后你就可以使用 AssetImage 访问你的图片了:
return AssetImage("images/my_icon.jpeg");
或者通过 Image Widget 直接访问:
@override Widget build(BuildContext context) { return Image.asset("images/my_image.png"); }
Flutter 当下并没有一个特定的管理字符串的资源管理系统。目前来讲,最好的办法是将字符串作为静态域存放在类中,并通过类访问它们。例如:
class Strings { static String welcomeMessage = "Welcome To Flutter"; }
接着在你们的代码中,你可以这样访问你的字符串:
Text(Strings.welcomeMessage)