雖然 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)