FlutterGenとは
FlutterGenはFlutterプロジェクトでのアセット管理を効率化し、開発プロセスをスムーズにするためのツールです。
できること
-
自動生成による直接アクセス
リソースファイル(画像、フォント、カラーなど)へのアクセスコードを自動生成し、手動でのファイルパス記述が不要になり、リソースへのアクセスが簡単になります。 -
コード補完によるタイポの防止
IDEのコード補完機能を活用して、リソース名のタイプミスを防止します。また正しいリソース名が自動的に提案され、開発速度と正確性が向上します。 -
静的解析によるエラー防止
FlutterGenが生成するコードは静的解析ができ、存在しないファイルを参照している場合や、リソースの指定に誤りがある場合に、コンパイル時にエラーが検出されます。
環境
- Flutter 3.16.9
- パッケージは以下を参照(初期から追加したもののみ記載しています)
dev_dependencies:
flutter_gen_runner: ^5.4.0
build_runner: ^2.4.7
管理方法
今回は画像、フォント、カラーの基本的な管理方法について説明します。
1.画像
(1)pubspec.yaml
にアセットの指定を行います。(以下は例です)
flutter:
assets:
- assets/images/
(2) 自動生成
build_runner
を使ってファイルを自動生成します。
flutter pub run build_runner build --delete-conflicting-outputs
lib/gen/assets.gen.dart
にファイルが自動生成されます。
こちらには、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を出力することができます。
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フォントを使用する場合、以下のように記述します。
fonts:
- family: RobotoMono
fonts:
- asset: assets/fonts/RobotoMono-Regular.ttf
- asset: assets/fonts/RobotoMono-Bold.ttf
weight: 700
配置例
(2) 自動生成
build_runner
を使ってファイルを自動生成します。
flutter pub run build_runner build --delete-conflicting-outputs
lib/gen/assets.gen.dart
にファイルが自動生成されます。
(3) 使い方
フォントをDartコード内で使用する際は、自動生成されたFontFamilyクラスを通じて以下のように指定できます。
Text(
'Hello, World!',
style: TextStyle(
fontFamily: FontFamily.robotoMono,
),
),
3.カラー
(1)pubspec.yaml
でのカラーアセットの指定
プロジェクトのpubspec.yamlファイルにカラーアセットのパスを指定することで、カラー定義を一元管理できます。以下はその設定例です。
flutter_gen:
colors:
inputs:
- assets/color/colors.xml
この設定により、assets/color/colors.xmlファイル内で定義されたカラーがflutter_genによって扱われるようになります。
配置例
プロジェクトのディレクトリにassets/color/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
にファイルが自動生成されます。
(3) 使い方
カラーをDartコード内で使用する際は、自動生成されたColorNameクラスを通じて以下のように指定できます。
Text(
'Hello, World!',
style: TextStyle(
color: ColorName.black,
),
),
カラーコードの管理が簡単になりました。