最近把一個上周寫的 Flutter Module 引入一個 Flutter 項目中作為依賴項,發(fā)現(xiàn)一個問題:原先在 Module 中帶有文件資源的控件放到其它項目中顯示不出來了。經(jīng)過一番調(diào)試確定是打包和路徑問題,當我們的項目依賴到另一個項目中的時候项滑,其實類似于 images/xxx.jpg
這樣的文件路徑其實已經(jīng)變了见剩,因為 Flutter 的打包過程大致和 Android 是相似的期揪,所有 packages 最終會合并唐础,可能是 Flutter 并沒有像 Android 那樣的資源文件包名補齊的過程。
查了很多資料都找不到對應方案剧罩,又回頭去官網(wǎng)文檔里再仔細查一下栓拜,最終發(fā)現(xiàn)其實官網(wǎng)里寫了(??之前太粗心沒認真看),先看一下官網(wǎng)文檔里是怎么說的:
文檔里說了兩個很重要很重要的前提:
- 把資源文件夾放進
lib/
里的話惠昔,可以直接用幕与,不需要在pubspec.yaml
中指定 - 如果要把資源文件打進 package 里給別的項目用,是必須要在
pubspec.yaml
里指定
現(xiàn)在的問題就是怎么指定路徑以及怎么正確地引用到資源文件镇防,文檔里似乎沒有明說但其實已經(jīng)給出了對應方案:
把你的資源文件夾移到
lib/
里(通常我們是把這些文件放在項目根目錄)-
使用特殊的路徑規(guī)則:packages + 包名 + 文件相對路徑啦鸣,例如你的一個圖片
abc.jpg
的完整路徑是 flutter_ui/lib/images/2.0x/abc.jpg ,那在pubspec.yaml
中要寫成flutter: assets: - packages/flutter_ui/images/abc.jpg
在
pubspec.yaml
中指定的資源路徑其實相當于一個 key 来氧,所以用的地方也要用同樣的 key 才能找到 :Image.asset('packages/flutter_ui/images/abc.jpg');
可以看出有三個特殊的規(guī)則诫给,一是前面要加一個關鍵字
packages
,二是lib
這個路徑要忽略掉不寫啦扬,三是要在文件名前加包名中狂,lib
忽略可以理解,但是前面這個packages
關鍵字不是很懂扑毡,之后得抽空研究一下 Flutter 的打包流程吃型。
總之是要好好看文檔??