2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Flutter】FlutterGen入門 アセット管理を効率化する方法

Last updated at Posted at 2024-02-04

FlutterGenとは

FlutterGenはFlutterプロジェクトでのアセット管理を効率化し、開発プロセスをスムーズにするためのツールです。

できること

  • 自動生成による直接アクセス
    リソースファイル(画像、フォント、カラーなど)へのアクセスコードを自動生成し、手動でのファイルパス記述が不要になり、リソースへのアクセスが簡単になります。
  • コード補完によるタイポの防止
    IDEのコード補完機能を活用して、リソース名のタイプミスを防止します。また正しいリソース名が自動的に提案され、開発速度と正確性が向上します。
  • 静的解析によるエラー防止
    FlutterGenが生成するコードは静的解析ができ、存在しないファイルを参照している場合や、リソースの指定に誤りがある場合に、コンパイル時にエラーが検出されます。

環境

  • Flutter 3.16.9
  • パッケージは以下を参照(初期から追加したもののみ記載しています)
pubspec.yaml
dev_dependencies:
  flutter_gen_runner: ^5.4.0
  build_runner: ^2.4.7

管理方法

今回は画像、フォント、カラーの基本的な管理方法について説明します。

1.画像

(1)pubspec.yamlにアセットの指定を行います。(以下は例です)

pubspec.yaml
flutter:
  assets:
    - assets/images/

画像配置例
スクリーンショット 2024-02-04 10.45.55.png

(2) 自動生成

build_runnerを使ってファイルを自動生成します。

flutter pub run build_runner build --delete-conflicting-outputs  

lib/gen/assets.gen.dartにファイルが自動生成されます。

スクリーンショット 2024-02-04 10.49.30.png

こちらには、assetsディレクトリ内に配置した画像のパス情報が書いてあります。

(3) 使い方

通常の書き方だと以下のようになりますが、タイポ等に気づきにくいかとおもいます。

Image.asset(
  'assets/images/sample_image.png',
  width: 100,
  height: 100,
),

FlutterGenを使用する場合は、以下のように記述できます。

Image クラスとして使う場合
Assets.images.sampleImage.image(
  width: 100,
  height: 100,
),
②Stringとして使用する場合
Image.asset(
  Assets.images.sampleImage.path,
  width: 100,
  height: 100,
),

(4) SVGの場合

SVGを表示したい場合には有名なところでいうとflutter_svg を使うことが多いかと思います。
FlutterGenではインテグレーション設定があり、pubspec.yamlに次のように設定することで、flutter_svg のSvgPictureを出力することができます。

pubspec.yaml
flutter_gen:
  integrations:
    flutter_svg: true

通常

SvgPicture.asset(
  Assets.images.sampleIcon.path,
  width: 30,
  height: 30,
),

設定後

Assets.images.sampleIcon.svg(
  width: 30,
  height: 30,
),

インテグレーション設定を行うことで、コードの統一性と簡潔さにより、何をしているのかが直感的に理解しやすくなります。

2.フォント

(1)pubspec.yamlでのフォントの設定

プロジェクトのpubspec.yamlファイルに、使用したいフォントと、そのフォントファイルへのパスを指定します。
例えば、RobotoMonoフォントを使用する場合、以下のように記述します。

pubspec.yaml
fonts:
    - family: RobotoMono
      fonts:
        - asset: assets/fonts/RobotoMono-Regular.ttf
        - asset: assets/fonts/RobotoMono-Bold.ttf
          weight: 700

配置例

スクリーンショット 2024-02-04 21.46.17.png

(2) 自動生成

build_runnerを使ってファイルを自動生成します。

flutter pub run build_runner build --delete-conflicting-outputs  

lib/gen/assets.gen.dartにファイルが自動生成されます。

スクリーンショット 2024-02-04 21.40.07.png

(3) 使い方

フォントをDartコード内で使用する際は、自動生成されたFontFamilyクラスを通じて以下のように指定できます。

Text(
  'Hello, World!',
  style: TextStyle(
    fontFamily: FontFamily.robotoMono,
  ),
),

3.カラー

(1)pubspec.yamlでのカラーアセットの指定

プロジェクトのpubspec.yamlファイルにカラーアセットのパスを指定することで、カラー定義を一元管理できます。以下はその設定例です。

pubspec.yaml
flutter_gen:
  colors:
    inputs:
      - assets/color/colors.xml

この設定により、assets/color/colors.xmlファイル内で定義されたカラーがflutter_genによって扱われるようになります。

配置例
プロジェクトのディレクトリにassets/color/colors.xmlファイルを配置します。
このファイルにはアプリケーションで使用するカラーの定義を含めます。
スクリーンショット 2024-02-04 18.43.30.png

例えば、以下のように記述します。

colors.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="black">#000000</color>
    <color name="coffee">#8CF5CB84</color>
</resources>

この方法の利点は、Figmaなどのデザインツールからカラーコードを直接コピーしてcolors.xmlに貼り付けるだけで済む点にあります。

さらに、#8CF5CB84のようにカラーコードの先頭にアルファ値を指定することで、カラーの透明度を細かく調整できます。ここで8Cは透明度を、F5CB84はカラーをそれぞれ表しています。

透明度は16進数で00(完全に透明)からFF(完全に不透明)までの範囲で指定します。アルファ値の詳細な理解には、以下の記事が役立ちます。

なお、カラーコードの先頭のFF(完全に不透明)を省略することも可能です。省略した場合、色はデフォルトで不透明として扱われます。

アルファ値を省略する場合、カラーコードをコピペする際の手間が省けます。透明度を設定したい特定のケースでのみアルファ値を追加することで、作業の効率化が図れます。

アルファ値を常に指定する場合(FFを含める)は、カラーコードの記述に一貫性が生まれ、カラー定義を読む際の明確性が向上します。

これらは、プロジェクトの具体的な要件やチームの方針に基づいて選択すること大切です。

(2) 自動生成

build_runnerを使ってファイルを自動生成します。

flutter pub run build_runner build --delete-conflicting-outputs  

lib/gen/assets.gen.dartにファイルが自動生成されます。

スクリーンショット 2024-02-04 18.45.54.png

(3) 使い方

カラーをDartコード内で使用する際は、自動生成されたColorNameクラスを通じて以下のように指定できます。

Text(
  'Hello, World!',
  style: TextStyle(
    color: ColorName.black,
  ),
),

カラーコードの管理が簡単になりました。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?