Flutter3.7更新時: No file or variants found for assetのエラー
結論:プロジェクトフォルダ直下のフォルダ名からパスを記載する
2023/2/9 Flutter エラー・バグ日記
とても恥ずかしいレベルのエラーだったが、忘れないように記録。
Flutter SDKを3.3.4から3.7.1にアップグレード後、プロジェクトをビルドしたら以下のエラーが発生。
Error detected in pubspec.yaml:
No file or variants found for asset: sample_image.png.
Target debug_android_application failed: Exception: Failed to bundle asset files.
どうやらアセット登録していた画像ファイルが見つからないらしい。
今までは問題なく読み込めていたのだが。。
公式サイトにきちんと説明があった
プロジェクトフォルダ直下に、「assets」というフォルダを作成し、その中に画像ファイル(sample_image.png)を保存していた。
また、「pubspec.yaml」には、下記のように記載していた。
assets: - sample_image.png
しかし、Flutter公式サイト
を見ると、どうやらフォルダ名(この例では「assets」)から記載しないと駄目らしい。。
今までエラーが出なかったのが不思議だが、、確かに、下記のとおり書き直したら、問題なくエラーは解消された。
assets: - assets/sample_image.png
恥ずかしながら今ごろ知る。。
今更の復習になるが、「assets/sample_image.png」の部分の「assets」は、あくまで自分が付けたフォルダ名であり、例えば「documents」というフォルダ名にした場合は、「documents/sample_image.png」とする必要がある。
一方、「assets:」の方は、「pubspec.yaml」ファイルで、アセット登録のために決められた表記なので、フォルダ名に関係なく「assets:」とする必要がある。
GitHubにも同じイシューがあった
イシューと呼んで良いのか分からないレベルだが、自分と全く同じ相談が上がっていた。
Flutter3.7.0にしたら、「フォルダ名/」が無いとエラーになったとのこと。
- なぜ今までエラーにならなかったのか?
- 仕様が変わったなら説明する必要がある
などのコメントがされているが、、、公式サイトに「フォルダ名/」が必要と書かれているので、仕方がない気がする。。
Flutter SDKをダウングレードして再検証していないので分からないが、今までは、フォルダ名を「assets」とした場合は、自動的にアセット用フォルダと判断してくれていたのだろうか。。
フォルダ内全体を対象とする場合
ちなみに、よくある間違いとして、アセット用フォルダ内を一括で指定したいときに、末尾に「/」が必要なのに、付け忘れるケースがあるとのこと。
こちらの記事で説明くださっていた。
よく見ると、先の公式サイトにも
To include all assets under a directory, specify the directory name with the / character at the end:
ディレクトリの下にすべてのアセットを含めるには、末尾に / 文字を付けてディレクトリ名を指定します。(Google翻訳)
と説明されていた。
「pubspec.yaml」の書き方は、しばらく復習していなかったので、良い機会になった。。
\一般的なエラー対処法をまとめた記事はこちら/
リリースしたアプリ(全てFlutterで開発)
個人アプリ開発で役立ったもの
おすすめの学習教材
\超初心者向けでオススメな元Udemyの講座/
\キャンペーン時を狙えば安価で網羅的な内容が学べる(日本語訳あり)/
\Gitの基礎について無料で学べる/
おすすめの学習書籍
\実用的。image_pickerに関してかなり助けられた/
\Dartの基礎文法を素早くインプットできる/