概要
Flutter
で外部のイメージを読み込むためには、Image.network
を使います。今回のブログポストでは、run_with_network_images
パッケージを使ってImage.network
を使ってイメージを表示したウィジェットをテストする方法について説明します。
run_with_network_imagesパッケージ
Image.network
を使ったウィジェットをテストすると、400
エラーが発生してテストがうまく実行できません。Image.network
はdart:io
のHttpClient
を使っていますが、Flutter
ウィジェットテストではdart:io
は常に400
エラーを返すようになってるのでこの問題が発生します。
Flutter
のテストコードでrun_with_network_images
パッケージを使うとこの問題を解決することができます。
run_with_network_imagesパッケージインストール
run_with_network_images
パッケージを使うために、次のコマンドを実行してrun_with_network_images
をインストールします。
flutter pub add --dev run_with_network_images
run_with_network_imagesパッケージの使い方
Image.network
を使うウィジェットをテストするため、run_with_network_images
のrunWithNetworkImages
関数を使って次のようにテストコードを修正する必要があります。
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:run_with_network_images/run_with_network_images.dart';
void main() {
testWidgets('Network image is rendered in widget test', (
WidgetTester tester,
) async {
await runWithNetworkImages(() async {
await tester.pumpWidget(const MyApp());
final image = tester.widget<Image>(find.byType(Image));
expect(
(image.image as NetworkImage).url,
'https://dev-yakuza.posstree.com/assets/images/yakuza.jpg',
);
});
});
}
Image.network
を使うウィジェットのテストコードをawait runWithNetworkImages(() async {});
で囲むことで、400
エラーが発生しなくなってテストがうまく実行でます。
完了
これでrun_with_network_images
パッケージを使ってFlutter
のテストコードで、Image.network
を使ったウィジェットをテストする方法について見て見ました。Image.network
を使ったら必ずこの問題が発生するので、Image.network
を使う場合はrun_with_network_images
パッケージを使うことをお勧めします。
run_with_network_images
パッケージは私が作ったものです。もし、フィードバックや改善点があれば、GitHubのリポジトリで教えてください。
私のブログが役に立ちましたか?下にコメントを残してください。それは私にとって大きな大きな力になります!
アプリ広報
Deku
が開発したアプリを使ってみてください。Deku
が開発したアプリはFlutterで開発されています。興味がある方はアプリをダウンロードしてアプリを使ってくれると本当に助かります。