Flutterラーニングノート08-リソースと画像の追加
5523 ワード
Flutterにはassetsを含めることができ、assetはプログラムインストールパッケージにパッケージされ、実行時にアクセスできます.一般的なタイプのassetには、JSONファイルなどの静的データ、プロファイル、アイコン、およびピクチャ(JPEG、WebP、GIF、animated WebP/GIF、PNG、BMP、WBMP)が含まれます.
assetsの指定
Flutterは、
assetの宣言順序は重要ではありません.実際のディレクトリは任意のフォルダです.これらのファイルはasset bundleという特殊な場所に入れられ、実行時に読み取ることができます.
たとえば、ルートディレクトリには次のファイルがあります.
では、
次のように構成されている場合:
では、
現在のデバイスの解像度に一致するピクチャを選択すると、Flutterはassetバリエーションを使用します.
assetsのロード
AssetBundleからassetにアクセスします. をロード をロードする
テキストassetsのロード
各FlutterアプリケーションにはrootBundleオブジェクトがあり、プライマリasset bundleにアクセスできます.
ただし、現在のBuildContextのAssetBundleを取得するには、DefaultAssetBundleを使用することが望ましい.この方法は、アプリケーションで構築されたデフォルトのasset bundleではなく、親widgetが実行時に置き換える異なるAssetBundleであり、シーンのローカライズやテストに役立ちます.通常、アプリケーションの実行時間からassetを
Widgetコンテキストの外、またはAssetBundleのハンドルが使用できない場合は、rootBundleを使用してassetを直接ロードできます.たとえば、次のようにします.
画像をロード
Flutterは、現在のデバイスの解像度に適した画像をロードすることができる.
解像度関連ピクチャassetsを宣言
AssetImageでは、論理要求assetを現在のデバイスのピクセルスケールに最も近いassetにマッピングする方法について説明します.このマッピングを機能させるには、特定のディレクトリ構造に基づいてassetを保存する必要があります.
ここで、MおよびNはデジタル識別子であり、その中に含まれる画像の解像度に対応し、すなわち、異なる画素デバイスのスケールのピクチャを指定し、主リソースのデフォルトは1.0倍の解像度ピクチャに対応する.
デバイス画素比1.8のデバイスでは、
イメージコントロールでレンダリング画像の幅と高さを指定しない場合は、メインアセットと同じスクリーンスペースを使用しますが、解像度が高いだけです.すなわち、
pubspec.yamlのassetセクションの各項目は、プライマリリソース項目を除く実際のファイルに対応する必要があります.プライマリリソースにリソースが欠けている場合は、解像度が低い順に選択されます.すなわち、1 xにない場合は2 x、2 xにない場合は3 xの順に選択されます.
画像をロード
デフォルトのasset bundleを使用してリソースをロードすると、内部で解像度が自動的に処理されます.
依存パッケージ内のリソース
リソースは
依存パッケージの画像をロードするには、AssetImageにpackageパラメータを指定する必要があります.
アプリケーションは、次のディレクトリ構造を持つ「my_icons」というパッケージに依存するとします.
次に画像をロードし、次の操作を行います.
パケットが使用する自体のリソースもpackageパラメータを加えて取得する必要があります.
リソースは
最初の画像を使用するには、
AndroidでFlutterのリソースを使用
Flutterにアイコンファイルがあります.
AndroidコードでFlutterのリソースを使用するには、FlutterViewからPluginRegistryを取得します.Registrarは、そのlookupKeyForAssetメソッドによってkeyを取得します.
FlutterはAndroid/iOSリソースを使用してiconとsplashを変更
起動アイコンを置換するには、次の手順に従います.
Androidは
Splashコンテンツを置換するには、次の手順に従います.
Androidは
iOSは、起動画面の中心に画像を追加し、
assetsの指定
Flutterは、
pubspec.yaml
ファイルを使用して、アプリケーションに必要なassetを識別します.flutter:
assets:
- images/my_icon.png
- assets/background.png
assetの宣言順序は重要ではありません.実際のディレクトリは任意のフォルダです.これらのファイルはasset bundleという特殊な場所に入れられ、実行時に読み取ることができます.
たとえば、ルートディレクトリには次のファイルがあります.
.../pubspec.yaml
.../graphics/my_icon.png
.../graphics/background.png
.../graphics/dark/background.png
pubspec.yaml
は、flutter:
assets:
- graphics/background.png
では、
graphics/background.png
およびgraphics/dark/background.png
はasset bundleに含まれる.前者はmain asset
と考えられ、後者は変異体variant
と考えられる.次のように構成されている場合:
flutter:
assets:
- graphics/
では、
graphics/my_icon.png
、graphics/background.png
、graphics/dark/background.png
はasset bundleに格納されます.現在のデバイスの解像度に一致するピクチャを選択すると、Flutterはassetバリエーションを使用します.
assetsのロード
AssetBundleからassetにアクセスします.
loadString
メソッド文字列またはテキストtext load
メソッドピクチャまたはバイナリファイルテキストassetsのロード
各FlutterアプリケーションにはrootBundleオブジェクトがあり、プライマリasset bundleにアクセスできます.
package:flutter/services.dart
のグローバル静的rootBundleオブジェクトを直接使用してassetをロードできます.ただし、現在のBuildContextのAssetBundleを取得するには、DefaultAssetBundleを使用することが望ましい.この方法は、アプリケーションで構築されたデフォルトのasset bundleではなく、親widgetが実行時に置き換える異なるAssetBundleであり、シーンのローカライズやテストに役立ちます.通常、アプリケーションの実行時間からassetを
DefaultAssetBundle.of()
を使用してロードすることができる.Widgetコンテキストの外、またはAssetBundleのハンドルが使用できない場合は、rootBundleを使用してassetを直接ロードできます.たとえば、次のようにします.
import 'dart:async' show Future;
import 'package:flutter/services.dart' show rootBundle;
Future loadAsset() async {
return await rootBundle.loadString('assets/config.json');
}
画像をロード
Flutterは、現在のデバイスの解像度に適した画像をロードすることができる.
解像度関連ピクチャassetsを宣言
AssetImageでは、論理要求assetを現在のデバイスのピクセルスケールに最も近いassetにマッピングする方法について説明します.このマッピングを機能させるには、特定のディレクトリ構造に基づいてassetを保存する必要があります.
…/image.png
…/Mx/image.png
…/Nx/image.png
ここで、MおよびNはデジタル識別子であり、その中に含まれる画像の解像度に対応し、すなわち、異なる画素デバイスのスケールのピクチャを指定し、主リソースのデフォルトは1.0倍の解像度ピクチャに対応する.
…/my_icon.png
…/2.0x/my_icon.png
…/3.0x/my_icon.png
デバイス画素比1.8のデバイスでは、
.../2.0x/my_icon.png
が選択される.2.7のデバイスピクセル比について、.../3.0x/my_icon.png
が選択される.イメージコントロールでレンダリング画像の幅と高さを指定しない場合は、メインアセットと同じスクリーンスペースを使用しますが、解像度が高いだけです.すなわち、
.../my_icon.png
がそうである場合、.../3.0x/my_icon.png
はそうであるべきであるが、幅および高さが指定されていない場合、それらはすべて(論理ピクセル単位で)レンダリングされる.pubspec.yamlのassetセクションの各項目は、プライマリリソース項目を除く実際のファイルに対応する必要があります.プライマリリソースにリソースが欠けている場合は、解像度が低い順に選択されます.すなわち、1 xにない場合は2 x、2 xにない場合は3 xの順に選択されます.
画像をロード
Widget build(BuildContext context) {
// ...
return DecoratedBox(
decoration: BoxDecoration(
image: DecorationImage(
//
image: AssetImage('graphics/background.png'),
// ...
),
// ...
),
);
// ...
}
デフォルトのasset bundleを使用してリソースをロードすると、内部で解像度が自動的に処理されます.
依存パッケージ内のリソース
リソースは
pubspec.yaml
で宣言されています.依存パッケージの画像をロードするには、AssetImageにpackageパラメータを指定する必要があります.
アプリケーションは、次のディレクトリ構造を持つ「my_icons」というパッケージに依存するとします.
…/pubspec.yaml
…/icons/heart.png
…/icons/1.5x/heart.png
…/icons/2.0x/heart.png
次に画像をロードし、次の操作を行います.
AssetImage('icons/heart.png', package: 'my_icons')
パケットが使用する自体のリソースもpackageパラメータを加えて取得する必要があります.
リソースは
lib/
パッケージpubspec.yaml
ファイルで宣言されたリソースはpackageにパッケージされます.リソースがlib/
フォルダに直接配置され、pubspec.yaml
ファイルで宣言されていない場合.では、アプリケーションは、自分のpubspec.yaml
にどのリソースが含まれているかを指定する必要があります.たとえば、「fancy_background」というパッケージには、次のファイルが含まれます.…/lib/backgrounds/background1.png
…/lib/backgrounds/background2.png
…/lib/backgrounds/background3.png
最初の画像を使用するには、
pubspec.yaml
で宣言する必要があります.flutter:
assets:
- packages/fancy_backgrounds/backgrounds/background1.png
lib/
は暗黙的であり、経路に含めるべきではない.AndroidでFlutterのリソースを使用
Flutterにアイコンファイルがあります.
flutter:
assets:
- icons/heart.png
AndroidコードでFlutterのリソースを使用するには、FlutterViewからPluginRegistryを取得します.Registrarは、そのlookupKeyForAssetメソッドによってkeyを取得します.
// registrar PluginRegistry.Registrar
AssetManager assetManager = registrar.context().getAssets();
String key = registrar.lookupKeyForAsset("icons/heart.png");
AssetFileDescriptor fd = assetManager.openFd(key);
FlutterはAndroid/iOSリソースを使用してiconとsplashを変更
起動アイコンを置換するには、次の手順に従います.
Androidは
/android/app/src/main/res/
に画像を置き換えるだけでいいです.iOSから/ios/Runner/Assets.xcassets/AppIcon.appiconset
に置き換えてください.Splashコンテンツを置換するには、次の手順に従います.
Androidは
/android/app/src/main/res/drawable/launch_background.xml
ファイルを修正しました.iOSは、起動画面の中心に画像を追加し、
/ios/Runner/Assets.xcassets/LaunchImage.imageset
に画像をドラッグしてimages LaunchImageと名付けます.png、[email protected]、[email protected].異なるファイル名を使用する場合は、同じディレクトリのContentsも更新する必要があります.jsonファイル.