日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
創(chuàng)新互聯(lián)Flutter教程:Flutter資源和圖片

介紹

Flutter應(yīng)用程序可以包含代碼和 assets(有時(shí)稱為資源)。asset是打包到程序安裝包中的,可在運(yùn)行時(shí)訪問(wèn)。常見(jiàn)類型的asset包括靜態(tài)數(shù)據(jù)(例如JSON文件),配置文件,圖標(biāo)和圖片(JPEG,WebP,GIF,動(dòng)畫(huà)WebP / GIF,PNG,BMP和WBMP)。

創(chuàng)新互聯(lián)建站-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比安新網(wǎng)站開(kāi)發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式安新網(wǎng)站制作公司更省心,省錢(qián),快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋安新地區(qū)。費(fèi)用合理售后完善,十多年實(shí)體公司更值得信賴。

指定 assets

Flutter使用pubspec.yaml文件(位于項(xiàng)目根目錄),來(lái)識(shí)別應(yīng)用程序所需的asset。

這里是一個(gè)例子:

flutter:
  assets:
    - assets/my_icon.png
    - assets/background.png

該assets部分的flutter部分指定應(yīng)包含在應(yīng)用程序中的文件。 每個(gè)asset都通過(guò)相對(duì)于pubspec.yaml文件所在位置的顯式路徑進(jìn)行標(biāo)識(shí)。asset的聲明順序是無(wú)關(guān)緊要的。asset的實(shí)際目錄可以是任意文件夾(在本示例中是assets)。

在構(gòu)建期間,F(xiàn)lutter將asset放置到稱為 asset bundle 的特殊存檔中,應(yīng)用程序可以在運(yùn)行時(shí)讀取它們。

Asset 變體(variant)

構(gòu)建過(guò)程支持asset變體的概念:不同版本的asset可能會(huì)顯示在不同的上下文中。 在pubspec.yaml的assets部分中指定asset路徑時(shí),構(gòu)建過(guò)程中,會(huì)在相鄰子目錄中查找具有相同名稱的任何文件。這些文件隨后會(huì)與指定的asset一起被包含在asset bundle中。

例如,如果您的應(yīng)用程序目錄中有以下文件:

  • …/pubspec.yaml
  • …/graphics/my_icon.png
  • …/graphics/background.png
  • …/graphics/dark/background.png
  • …etc.

…然后您的pubspec.yaml文件包含:

flutter:
  assets:
    - graphics/background.png

……那么這兩個(gè)graphics/background.png和graphics/dark/background.png 將包含在您的asset bundle中。前者被認(rèn)為是_main asset_,后者被認(rèn)為是一種變體(variant)。

在選擇匹配當(dāng)前設(shè)備分辨率的圖片時(shí),F(xiàn)lutter使用asset變體; 見(jiàn)下文。將來(lái),這種機(jī)制可能會(huì)擴(kuò)展到本地化、閱讀提示等方面。

加載 assets

您的應(yīng)用可以通過(guò)AssetBundle對(duì)象訪問(wèn)其asset 。

有兩種主要方法允許從Asset bundle中加載字符串/text(loadString)或圖片/二進(jìn)制(load)。

加載文本assets

每個(gè)Flutter應(yīng)用程序都有一個(gè)rootBundle對(duì)象, 可以輕松訪問(wèn)主資源包??梢灾苯邮褂胮ackage:flutter/services.dart中全局靜態(tài)的rootBundle對(duì)象來(lái)加載asset。

但是,建議使用DefaultAssetBundle來(lái)獲取當(dāng)前BuildContext的AssetBundle。 這種方法不是使用應(yīng)用程序構(gòu)建的默認(rèn)asset bundle,而是使父級(jí)widget在運(yùn)行時(shí)替換的不同的AssetBundle,這對(duì)于本地化或測(cè)試場(chǎng)景很有用。

通常,可以使用DefaultAssetBundle.of()從應(yīng)用運(yùn)行時(shí)間接加載asset(例如JSON文件)。

在Widget上下文之外,或AssetBundle的句柄不可用時(shí),您可以使用rootBundle直接加載這些asset,例如:

import 'dart:async' show Future;
import 'package:flutter/services.dart' show rootBundle;

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

加載 images

Flutter可以為當(dāng)前設(shè)備加載適合其分辨率的圖像。

聲明分辨率相關(guān)的圖片 assets

AssetImage 了解如何將邏輯請(qǐng)求asset映射到最接近當(dāng)前設(shè)備像素比例的asset。為了使這種映射起作用,應(yīng)該根據(jù)特定的目錄結(jié)構(gòu)來(lái)保存asset

  • …/image.png
  • …/Mx/image.png
  • …/Nx/image.png
  • …etc.

其中M和N是數(shù)字標(biāo)識(shí)符,對(duì)應(yīng)于其中包含的圖像的分辨率,也就是說(shuō),它們指定不同素設(shè)備像比例的圖片

主資源默認(rèn)對(duì)應(yīng)于1.0倍的分辨率圖片??匆粋€(gè)例子:

  • …/my_icon.png
  • …/2.0x/my_icon.png
  • …/3.0x/my_icon.png

在設(shè)備像素比率為1.8的設(shè)備上,.../2.0x/my_icon.png 將被選擇。對(duì)于2.7的設(shè)備像素比率,.../3.0x/my_icon.png將被選擇。

如果未在Image控件上指定渲染圖像的寬度和高度,以便它將占用與主資源相同的屏幕空間量(并不是相同的物理像素),只是分辨率更高。 也就是說(shuō),如果.../my_icon.png是72px乘72px,那么.../3.0x/my_icon.png應(yīng)該是216px乘216px; 但如果未指定寬度和高度,它們都將渲染為72像素×72像素(以邏輯像素為單位)。

pubspec.yaml中asset部分中的每一項(xiàng)都應(yīng)與實(shí)際文件相對(duì)應(yīng),但主資源項(xiàng)除外。當(dāng)主資源缺少某個(gè)資源時(shí),會(huì)按分辨率從低到高的順序去選擇 (譯者語(yǔ):也就是說(shuō)1x中沒(méi)有的話會(huì)在2x中找,2x中還沒(méi)有的話就在3x中找)。

加載圖片

要加載圖片,請(qǐng)?jiān)趙idget的build方法中使用 AssetImage類。

例如,您的應(yīng)用可以從上面的asset聲明中加載背景圖片:

Widget build(BuildContext context) {
  // ...
  return new DecoratedBox(
    decoration: new BoxDecoration(
      image: new DecorationImage(
        image: new AssetImage('graphics/background.png'),
        // ...
      ),
      // ...
    ),
  );
  // ...
}

使用默認(rèn)的 asset bundle 加載資源時(shí),內(nèi)部會(huì)自動(dòng)處理分辨率等,這些處理對(duì)開(kāi)發(fā)者來(lái)說(shuō)是無(wú)感知的。 (如果您使用一些更低級(jí)別的類,如 ImageStream或 ImageCache, 您會(huì)注意到有與縮放相關(guān)的參數(shù))

依賴包中的資源圖片

要加載依賴包中的圖像,必須給AssetImage提供package參數(shù)。

例如,假設(shè)您的應(yīng)用程序依賴于一個(gè)名為“my_icons”的包,它具有如下目錄結(jié)構(gòu):

  • …/pubspec.yaml
  • …/icons/heart.png
  • …/icons/1.5x/heart.png
  • …/icons/2.0x/heart.png
  • …etc.

然后加載圖像,使用:

 new AssetImage('icons/heart.png', package: 'my_icons')

包使用的本身的資源也應(yīng)該加上package參數(shù)來(lái)獲取。

打包 package assets

如果在pubspec.yaml文件中聲明了了期望的資源,它將會(huì)打包到響應(yīng)的package中。特別是,包本身使用的資源必須在pubspec.yaml中指定。

包也可以選擇在其lib/文件夾中包含未在其pubspec.yaml文件中聲明的資源。在這種情況下,對(duì)于要打包的圖片,應(yīng)用程序必須在pubspec.yaml中指定包含哪些圖像。 例如,一個(gè)名為“fancy_backgrounds”的包,可能包含以下文件:

  • …/lib/backgrounds/background1.png
  • …/lib/backgrounds/background2.png
  • …/lib/backgrounds/background3.png

要包含第一張圖像,必須在pubspec.yaml的assets部分中聲明它:

flutter:
  assets:
    - packages/fancy_backgrounds/backgrounds/background1.png

The lib/ is implied, so it should not be included in the asset path.

lib/是隱含的,所以它不應(yīng)該包含在資產(chǎn)路徑中。

平臺(tái) assets

也有時(shí)候可以直接在平臺(tái)項(xiàng)目中使用asset。以下是在Flutter框架加載并運(yùn)行之前使用資源的兩種常見(jiàn)情況。

更新app 圖標(biāo)

更新您的Flutter應(yīng)用程序的啟動(dòng)圖標(biāo)的方式與在本機(jī)Android或iOS應(yīng)用程序中更新啟動(dòng)圖標(biāo)的方式相同 

Android

在Flutter項(xiàng)目的根目錄中,導(dǎo)航到.../android/app/src/main/res。各種位圖資源文件夾(如mipmap-hdpi已包含占位符圖像”ic_launcher.png”)。 只需按照Android開(kāi)發(fā)人員指南中的說(shuō)明, 將其替換為所需的資源,并遵守每種屏幕密度的建議圖標(biāo)大小標(biāo)準(zhǔn)。

注意: 如果您重命名.png文件,則還必須在您AndroidManifest.xml標(biāo)簽的android:icon屬性中更新名稱。

iOS

在你的Flutter項(xiàng)目的根目錄中,導(dǎo)航到.../ios/Runner。該目錄中Assets.xcassets/AppIcon.appiconset已經(jīng)包含占位符圖片。 只需將它們替換為適當(dāng)大小的圖片。保留原始文件名稱。 

更新啟動(dòng)頁(yè)

在Flutter框架加載時(shí),F(xiàn)lutter會(huì)使用本地平臺(tái)機(jī)制繪制啟動(dòng)頁(yè)。此啟動(dòng)頁(yè)將持續(xù)到Flutter渲染應(yīng)用程序的第一幀時(shí)。

注意: 這意味著如果您不在應(yīng)用程序的main()方法中調(diào)用runApp 函數(shù) (或者更具體地說(shuō),如果您不調(diào)用window.render去響應(yīng)window.onDrawFrame)的話, 啟動(dòng)屏幕將永遠(yuǎn)持續(xù)顯示。

Android

要將啟動(dòng)屏幕(splash screen)添加到您的Flutter應(yīng)用程序, 請(qǐng)導(dǎo)航至.../android/app/src/main。在res/drawable/launch_background.xml,通過(guò)自定義drawable來(lái)實(shí)現(xiàn)自定義啟動(dòng)界面。

iOS

要將圖片添加到啟動(dòng)屏幕(splash screen)的中心,請(qǐng)導(dǎo)航至.../ios/Runner。在Assets.xcassets/LaunchImage.imageset, 拖入圖片,并命名為images LaunchImage.png、LaunchImage@2x.png、LaunchImage@3x.png。 如果您使用不同的文件名,那您還必須更新同一目錄中的Contents.json文件。

您也可以通過(guò)打開(kāi)Xcode完全自定義storyboard。在Project Navigator中導(dǎo)航到Runner/Runner然后通過(guò)打開(kāi)Assets.xcassets拖入圖片,或者通過(guò)在LaunchScreen.storyboard中使用Interface Builder進(jìn)行自定義。


本文名稱:創(chuàng)新互聯(lián)Flutter教程:Flutter資源和圖片
分享路徑:http://www.5511xx.com/article/djhgjce.html