雖然 Android 區(qū)分對待資源文件 (resources) 和資產(chǎn)文件 (assets),但是 Flutter 應(yīng)用只有資產(chǎn)文件 (assets)。所有原本在 Android 中應(yīng)該放在 res/drawable-* 文件夾中的資源文件,在 Flutter 中都放在一個(gè) assets 文件夾中。
Flutter 遵循一個(gè)簡單的類似 IOS 的密度相關(guān)的格式。文件可以是一倍 (1.0x)、兩倍 (2.0x)、三倍 (3.0x) 或其它的任意倍數(shù)。Flutter 沒有 dp 單位,但是有邏輯像素尺寸,基本和設(shè)備無關(guān)的像素尺寸是一樣的。名稱為 devicePixelRatio 的尺寸表示在單一邏輯像素標(biāo)準(zhǔn)下設(shè)備物理像素的比例。
和 Android 的密度分類的對照表如下:
Android 密度修飾符
Flutter 像素比例

Android 密度修飾符Flutter 像素比例
文件放置于任意文件夾中—Flutter 沒有預(yù)先定義好的文件夾結(jié)構(gòu)。你在 pubspec.yaml 文件中定義文件(包括位置信息),F(xiàn)lutter 負(fù)責(zé)找到它們。
需要注意的是,在 Flutter 1.0 beta 2 之前,在 Flutter 中定義的文件不能被原生端訪問,反之亦然,原生端定義的資產(chǎn)文件 (assets) 和資源文件 (resources) 也無法被 Flutter 訪問,因?yàn)樗鼈兪欠胖糜诓煌奈募A中的。
至于 Flutter beta 2,文件是放置于原生端的 asset 文件夾中,所以可以被原生端的 AssetManager 訪問:
val flutterAssetStream = assetManager.open("flutter_assets/assets/my_flutter_asset.png")
然而對于 Flutter beta 2,F(xiàn)lutter 依然無法訪問原生資源文件(resources),也無法訪問原生資產(chǎn)文件(assets)。
如果你要向 Flutter 項(xiàng)目中添加一個(gè)新的叫 my_icon.png 的圖片資源,并且將其放入我們隨便起名的叫做 images 的文件夾中,你需要將基礎(chǔ)圖片(1.0x)放在 images 文件夾中,并將其它倍數(shù)的圖片放入以特定倍數(shù)作為名稱的子文件夾中:
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"); }
字符串儲(chǔ)存在哪里?如何處理本地化?
Flutter 當(dāng)下并沒有一個(gè)特定的管理字符串的資源管理系統(tǒng)。目前來講,最好的辦法是將字符串作為靜態(tài)域存放在類中,并通過類訪問它們。例如:
class Strings { static String welcomeMessage = "Welcome To Flutter"; }
接著在你們的代碼中,你可以這樣訪問你的字符串:
Text(Strings.welcomeMessage)