Flutter

Flutter : Asset

iosroid 2019. 11. 20. 16:22

Asset

Flutter 앱에 이미지나 아이콘 같은 리소스 파일인 asset 을 살펴보자.

Asset 은 앱에 포함되며 실행시 사용가능하다.

아래의 것들이 포함될 수 있다.

Common types of assets inclde static data (for example, JSON files), configuration files, icons, and images (JPEG, WebP, GIF, animated WebP/GIF, PNG, BMP, and WBMP).

pubspec.yaml

asset 에 포함될 파일들은 pubspec.yaml 에 작성되어야 앱에 포함된다.

프로젝트 에서 asset 을 위한 폴더를 만들어 파일을 넣고 그 경로를 파일 이름과 함께 추가한다.

아래와 같이 asset 폴더와 photos 하위 폴더를 만들어 이미지 파일들을 넣었다.

 

asset_list.json 에는 이미지 파일들의 이름이 들어있다.

{
  "photos": {
    "image1": "aerial-photo-of-city-2832039.jpg",
    "image2": "assorted-title-cassette-tapes-2796145.jpg",
    "image3": "empty-white-chairs-beside-table-2995012.jpg",
    "image4": "green-leaf-tree-2454682.jpg"
  }
}

pubspec.yaml 에는 flutter: 아래 assets: 항목에 추가한다.

파일이름을 모두 넣어도 되고 경로 주소만 넣어도 모두 포함된다.

flutter:

assets:
  - asset/asset_list.json
  - asset/photos/
#   - asset/photos/aerial-photo-of-city-2832039.jpg
#   - asset/photos/assorted-title-cassette-tapes-2796145.jpg
#   - asset/photos/empty-white-chairs-beside-table-2995012.jpg
#   - asset/photos/green-leaf-tree-2454682.jpgflutter:
assets:
  - asset/

AssetBundle

asset 으로 포함된 파일들은 AssetBundle object 를 통해 접근할 수 있다.

모든 Flutter app 이 기본적으로 가지는 rootBundle object 를 통해 BuildContext와 상관없이 바로 asset 을 접근할 수 있다.

BuildContext 를 통해 실행중 다른 AssetBundle 을 가지는 위젯에 접근하여 여러 asset 을 이용할 수 있는 DefaultAssetBundle 도 있다.

var bundle = DefaultAssetBundle.of(context);
bundle.loadString('asset/configure.json');

예제에서는 rootBundle 을 사용했다. DefaultAssetBundle 도 context 에서 찾지 못하면 rootBundle을 사용하게 된다.

AssetImage

이미지를 asset 에서 가져오기 위해 AssetImage 클래스를 사용한다.

Widget build(BuildContext context) {
 return Image(image: AssetImage('asset/background.png'));
}

Example app

asset_list.json 파일에서 이미지 목록을 읽어 순서대로 화면에 이미지를 출력한다.

 

rootBundle.loadString() 으로 asset_list.json 파일을 읽어 assets 변수에 저장한다.

 

assets 에서 이미지 이름을 얻어 이미지 위젯을 리턴한다.

 

버튼을 누를때마다 카운터를 늘려 다음 이미지가 로드 되도록 동작 한다.

Reference

Adding assets and images