-
Notifications
You must be signed in to change notification settings - Fork 29.7k
Closed
Labels
P1High-priority issues at the top of the work listHigh-priority issues at the top of the work listfound in release: 3.22Found to occur in 3.22Found to occur in 3.22found in release: 3.23Found to occur in 3.23Found to occur in 3.23has reproducible stepsThe issue has been confirmed reproducible and is ready to work onThe issue has been confirmed reproducible and is ready to work onr: fixedIssue is closed as already fixed in a newer versionIssue is closed as already fixed in a newer versionteam-toolOwned by Flutter Tool teamOwned by Flutter Tool teamtoolAffects the "flutter" command-line tool. See also t: labels.Affects the "flutter" command-line tool. See also t: labels.triaged-toolTriaged by Flutter Tool teamTriaged by Flutter Tool team
Description
Steps to reproduce
- Create a new Flutter project (no need to create native flavors as this also fails with normal projects too)
- Add a new asset image and register it under pubspec.yaml as a flavor asset
- Create your app with an Image that references the image asset you just added to your project
- Write your UI tests asserting the image will be there
- Run your tests (with or without the --flavor param)
- Tests are failing: Unable to load asset
Expected results
- Create a new Flutter project (no need to create native flavors as this also fails with normal projects too)
- Add a new asset image and register it under pubspec.yaml as a flavor asset
- Create your app with an Image that references the image asset you just added to your project
- Write your UI tests asserting the image will be there
- Run your tests (with or without the --flavor param)
- Tests are passing and assets are properly rendered under UI tests
Actual results
Unable to load assets, no matter if you pass or not the flavor parameter.
Also, if you don't configure conditional imports under pubspec.yaml, tests work like a charm:
- Create a new Flutter project (no need to create native flavors as this also fails with normal projects too)
- Add a new asset image and register it under pubspec.yaml
- Create your app with an Image that references the image asset you just added to your project
- Write your UI tests asserting the image will be there
- Run your tests (with or without the --flavor param)
- Tests are passing
Code sample
Code sample
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true,
),
home: const MyHomePage(),
);
}
}
class MyHomePage extends StatelessWidget {
const MyHomePage({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(),
body: Center(
child: Image.asset('assets/flavor/image.png'),
),
);
}
}import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:flavor_assets_test/main.dart';
void main() {
testWidgets('Expect Image', (tester) async {
await tester.pumpWidget(const MyApp());
expect(find.byType(Image), findsOneWidget);
});
}
name: flavor_assets_test
description: "A new Flutter project."
publish_to: 'none'
version: 1.0.0+1
environment:
sdk: '>=3.4.1 <4.0.0'
dependencies:
flutter:
sdk: flutter
dev_dependencies:
flutter_test:
sdk: flutter
flutter_lints: ^3.0.0
flutter:
uses-material-design: true
assets:
- path: assets/flavor/
flavors:
- flavorScreenshots or Video
No response
Logs
Logs (with flavor argument)
fvm flutter test --flavor flavor
00:00 +0: loading /Users/angeloavv/StudioProjects/flavor_assets_test/test/widget_test.dart 00:01 +0: loading /Users/angeloavv/StudioProjects/flavor_assets_test/test/widget_test.dart 00:02 +0: loading /Users/angeloavv/StudioProjects/flavor_assets_test/test/widget_test.dart 00:03 +0: loading /Users/angeloavv/StudioProjects/flavor_assets_test/test/widget_test.dart 00:04 +0: loading /Users/angeloavv/StudioProjects/flavor_assets_test/test/widget_test.dart 00:04 +0: Expect Image 00:04 +0: Expect Image
══╡ EXCEPTION CAUGHT BY IMAGE RESOURCE SERVICE ╞════════════════════════════════════════════════════
The following assertion was thrown resolving an image codec:
Unable to load asset: "assets/flavor/image.png".
The asset does not exist or has empty data.
When the exception was thrown, this was the stack:
#0 PlatformAssetBundle.load (package:flutter/src/services/asset_bundle.dart:332:7)
#1 PlatformAssetBundle.loadBuffer (package:flutter/src/services/asset_bundle.dart:359:36)
#2 AssetBundleImageProvider._loadAsync (package:flutter/src/painting/image_provider.dart:754:33)
#3 AssetBundleImageProvider.loadImage (package:flutter/src/painting/image_provider.dart:714:14)
#4 ImageProvider.resolveStreamForKey.<anonymous closure> (package:flutter/src/painting/image_provider.dart:520:39)
#5 ImageCache.putIfAbsent (package:flutter/src/painting/image_cache.dart:377:22)
#6 ImageProvider.resolveStreamForKey (package:flutter/src/painting/image_provider.dart:517:81)
#7 ScrollAwareImageProvider.resolveStreamForKey (package:flutter/src/widgets/scroll_aware_image_provider.dart:104:19)
#8 ImageProvider.resolve.<anonymous closure> (package:flutter/src/painting/image_provider.dart:366:9)
#9 ImageProvider._createErrorHandlerAndKey.<anonymous closure> (package:flutter/src/painting/image_provider.dart:479:24)
#10 SynchronousFuture.then (package:flutter/src/foundation/synchronous_future.dart:43:39)
#11 ImageProvider._createErrorHandlerAndKey (package:flutter/src/painting/image_provider.dart:476:9)
#12 ImageProvider.resolve (package:flutter/src/painting/image_provider.dart:363:5)
#13 _ImageState._resolveImage (package:flutter/src/widgets/image.dart:1111:16)
#14 _ImageState.didChangeDependencies (package:flutter/src/widgets/image.dart:1061:5)
#15 StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:5636:11)
#16 ComponentElement.mount (package:flutter/src/widgets/framework.dart:5463:5)
... Normal element mounting (28 frames)
#44 Element.inflateWidget (package:flutter/src/widgets/framework.dart:4340:16)
#45 MultiChildRenderObjectElement.inflateWidget (package:flutter/src/widgets/framework.dart:6904:36)
#46 MultiChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:6916:32)
... Normal element mounting (338 frames)
#384 Element.inflateWidget (package:flutter/src/widgets/framework.dart:4340:16)
#385 MultiChildRenderObjectElement.inflateWidget (package:flutter/src/widgets/framework.dart:6904:36)
#386 MultiChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:6916:32)
... Normal element mounting (463 frames)
#849 Element.inflateWidget (package:flutter/src/widgets/framework.dart:4340:16)
#850 Element.updateChild (package:flutter/src/widgets/framework.dart:3843:20)
#851 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5512:16)
#852 Element.rebuild (package:flutter/src/widgets/framework.dart:5203:7)
#853 ProxyElement.update (package:flutter/src/widgets/framework.dart:5816:5)
#854 Element.updateChild (package:flutter/src/widgets/framework.dart:3827:15)
#855 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5512:16)
#856 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5650:11)
#857 Element.rebuild (package:flutter/src/widgets/framework.dart:5203:7)
#858 StatefulElement.update (package:flutter/src/widgets/framework.dart:5673:5)
#859 Element.updateChild (package:flutter/src/widgets/framework.dart:3827:15)
#860 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5512:16)
#861 Element.rebuild (package:flutter/src/widgets/framework.dart:5203:7)
#862 ProxyElement.update (package:flutter/src/widgets/framework.dart:5816:5)
#863 Element.updateChild (package:flutter/src/widgets/framework.dart:3827:15)
#864 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5512:16)
#865 Element.rebuild (package:flutter/src/widgets/framework.dart:5203:7)
#866 ProxyElement.update (package:flutter/src/widgets/framework.dart:5816:5)
#867 Element.updateChild (package:flutter/src/widgets/framework.dart:3827:15)
#868 _RawViewElement._updateChild (package:flutter/src/widgets/view.dart:291:16)
#869 _RawViewElement.update (package:flutter/src/widgets/view.dart:378:5)
#870 Element.updateChild (package:flutter/src/widgets/framework.dart:3827:15)
#871 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5512:16)
#872 Element.rebuild (package:flutter/src/widgets/framework.dart:5203:7)
#873 StatelessElement.update (package:flutter/src/widgets/framework.dart:5563:5)
#874 Element.updateChild (package:flutter/src/widgets/framework.dart:3827:15)
#875 RootElement._rebuild (package:flutter/src/widgets/binding.dart:1581:16)
#876 RootElement.update (package:flutter/src/widgets/binding.dart:1559:5)
#877 RootElement.performRebuild (package:flutter/src/widgets/binding.dart:1573:7)
#878 Element.rebuild (package:flutter/src/widgets/framework.dart:5203:7)
#879 BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2905:19)
#880 AutomatedTestWidgetsFlutterBinding.drawFrame (package:flutter_test/src/binding.dart:1418:19)
#881 RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:443:5)
#882 SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1392:15)
#883 SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1313:9)
#884 AutomatedTestWidgetsFlutterBinding.pump.<anonymous closure> (package:flutter_test/src/binding.dart:1273:9)
#887 TestAsyncUtils.guard (package:flutter_test/src/test_async_utils.dart:71:41)
#888 AutomatedTestWidgetsFlutterBinding.pump (package:flutter_test/src/binding.dart:1260:27)
#889 WidgetTester.pumpWidget.<anonymous closure> (package:flutter_test/src/widget_tester.dart:602:22)
#892 TestAsyncUtils.guard (package:flutter_test/src/test_async_utils.dart:71:41)
#893 WidgetTester.pumpWidget (package:flutter_test/src/widget_tester.dart:599:27)
#894 main.<anonymous closure> (file:///Users/angeloavv/StudioProjects/flavor_assets_test/test/widget_test.dart:8:18)
#895 testWidgets.<anonymous closure>.<anonymous closure> (package:flutter_test/src/widget_tester.dart:183:29)
<asynchronous suspension>
#896 TestWidgetsFlutterBinding._runTestBody (package:flutter_test/src/binding.dart:1017:5)
<asynchronous suspension>
<asynchronous suspension>
(elided 5 frames from dart:async and package:stack_trace)
Image provider: AssetImage(bundle: null, name: "assets/flavor/image.png")
Image key: AssetBundleImageKey(bundle: PlatformAssetBundle#161dc(), name: "assets/flavor/image.png",
scale: 1.0)
════════════════════════════════════════════════════════════════════════════════════════════════════
00:04 +0 -1: Expect Image [E]
Test failed. See exception logs above.
The test description was: Expect Image
To run this test again: /Users/angeloavv/fvm/versions/3.22.1/bin/cache/dart-sdk/bin/dart test /Users/angeloavv/StudioProjects/flavor_assets_test/test/widget_test.dart -p vm --plain-name 'Expect Image'
00:04 +0 -1: Some tests failed. Logs (without flavor argument)
fvm flutter test
Resolving dependencies...
Downloading packages...
collection 1.18.0 (1.19.0 available)
flutter_lints 3.0.2 (4.0.0 available)
leak_tracker 10.0.4 (10.0.5 available)
leak_tracker_flutter_testing 3.0.3 (3.0.5 available)
lints 3.0.0 (4.0.0 available)
material_color_utilities 0.8.0 (0.12.0 available)
meta 1.12.0 (1.15.0 available)
test_api 0.7.0 (0.7.2 available)
vm_service 14.2.1 (14.2.4 available)
Got dependencies!
9 packages have newer versions incompatible with dependency constraints.
Try `flutter pub outdated` for more information.
00:00 +0: loading /Users/angeloavv/StudioProjects/flavor_assets_test/test/widget_test.dart 00:01 +0: loading /Users/angeloavv/StudioProjects/flavor_assets_test/test/widget_test.dart 00:01 +0: Expect Image 00:01 +0: Expect Image
══╡ EXCEPTION CAUGHT BY IMAGE RESOURCE SERVICE ╞════════════════════════════════════════════════════
The following assertion was thrown resolving an image codec:
Unable to load asset: "assets/flavor/image.png".
The asset does not exist or has empty data.
When the exception was thrown, this was the stack:
#0 PlatformAssetBundle.load (package:flutter/src/services/asset_bundle.dart:332:7)
#1 PlatformAssetBundle.loadBuffer (package:flutter/src/services/asset_bundle.dart:359:36)
#2 AssetBundleImageProvider._loadAsync (package:flutter/src/painting/image_provider.dart:754:33)
#3 AssetBundleImageProvider.loadImage (package:flutter/src/painting/image_provider.dart:714:14)
#4 ImageProvider.resolveStreamForKey.<anonymous closure> (package:flutter/src/painting/image_provider.dart:520:39)
#5 ImageCache.putIfAbsent (package:flutter/src/painting/image_cache.dart:377:22)
#6 ImageProvider.resolveStreamForKey (package:flutter/src/painting/image_provider.dart:517:81)
#7 ScrollAwareImageProvider.resolveStreamForKey (package:flutter/src/widgets/scroll_aware_image_provider.dart:104:19)
#8 ImageProvider.resolve.<anonymous closure> (package:flutter/src/painting/image_provider.dart:366:9)
#9 ImageProvider._createErrorHandlerAndKey.<anonymous closure> (package:flutter/src/painting/image_provider.dart:479:24)
#10 SynchronousFuture.then (package:flutter/src/foundation/synchronous_future.dart:43:39)
#11 ImageProvider._createErrorHandlerAndKey (package:flutter/src/painting/image_provider.dart:476:9)
#12 ImageProvider.resolve (package:flutter/src/painting/image_provider.dart:363:5)
#13 _ImageState._resolveImage (package:flutter/src/widgets/image.dart:1111:16)
#14 _ImageState.didChangeDependencies (package:flutter/src/widgets/image.dart:1061:5)
#15 StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:5636:11)
#16 ComponentElement.mount (package:flutter/src/widgets/framework.dart:5463:5)
... Normal element mounting (28 frames)
#44 Element.inflateWidget (package:flutter/src/widgets/framework.dart:4340:16)
#45 MultiChildRenderObjectElement.inflateWidget (package:flutter/src/widgets/framework.dart:6904:36)
#46 MultiChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:6916:32)
... Normal element mounting (338 frames)
#384 Element.inflateWidget (package:flutter/src/widgets/framework.dart:4340:16)
#385 MultiChildRenderObjectElement.inflateWidget (package:flutter/src/widgets/framework.dart:6904:36)
#386 MultiChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:6916:32)
... Normal element mounting (463 frames)
#849 Element.inflateWidget (package:flutter/src/widgets/framework.dart:4340:16)
#850 Element.updateChild (package:flutter/src/widgets/framework.dart:3843:20)
#851 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5512:16)
#852 Element.rebuild (package:flutter/src/widgets/framework.dart:5203:7)
#853 ProxyElement.update (package:flutter/src/widgets/framework.dart:5816:5)
#854 Element.updateChild (package:flutter/src/widgets/framework.dart:3827:15)
#855 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5512:16)
#856 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5650:11)
#857 Element.rebuild (package:flutter/src/widgets/framework.dart:5203:7)
#858 StatefulElement.update (package:flutter/src/widgets/framework.dart:5673:5)
#859 Element.updateChild (package:flutter/src/widgets/framework.dart:3827:15)
#860 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5512:16)
#861 Element.rebuild (package:flutter/src/widgets/framework.dart:5203:7)
#862 ProxyElement.update (package:flutter/src/widgets/framework.dart:5816:5)
#863 Element.updateChild (package:flutter/src/widgets/framework.dart:3827:15)
#864 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5512:16)
#865 Element.rebuild (package:flutter/src/widgets/framework.dart:5203:7)
#866 ProxyElement.update (package:flutter/src/widgets/framework.dart:5816:5)
#867 Element.updateChild (package:flutter/src/widgets/framework.dart:3827:15)
#868 _RawViewElement._updateChild (package:flutter/src/widgets/view.dart:291:16)
#869 _RawViewElement.update (package:flutter/src/widgets/view.dart:378:5)
#870 Element.updateChild (package:flutter/src/widgets/framework.dart:3827:15)
#871 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5512:16)
#872 Element.rebuild (package:flutter/src/widgets/framework.dart:5203:7)
#873 StatelessElement.update (package:flutter/src/widgets/framework.dart:5563:5)
#874 Element.updateChild (package:flutter/src/widgets/framework.dart:3827:15)
#875 RootElement._rebuild (package:flutter/src/widgets/binding.dart:1581:16)
#876 RootElement.update (package:flutter/src/widgets/binding.dart:1559:5)
#877 RootElement.performRebuild (package:flutter/src/widgets/binding.dart:1573:7)
#878 Element.rebuild (package:flutter/src/widgets/framework.dart:5203:7)
#879 BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2905:19)
#880 AutomatedTestWidgetsFlutterBinding.drawFrame (package:flutter_test/src/binding.dart:1418:19)
#881 RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:443:5)
#882 SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1392:15)
#883 SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1313:9)
#884 AutomatedTestWidgetsFlutterBinding.pump.<anonymous closure> (package:flutter_test/src/binding.dart:1273:9)
#887 TestAsyncUtils.guard (package:flutter_test/src/test_async_utils.dart:71:41)
#888 AutomatedTestWidgetsFlutterBinding.pump (package:flutter_test/src/binding.dart:1260:27)
#889 WidgetTester.pumpWidget.<anonymous closure> (package:flutter_test/src/widget_tester.dart:602:22)
#892 TestAsyncUtils.guard (package:flutter_test/src/test_async_utils.dart:71:41)
#893 WidgetTester.pumpWidget (package:flutter_test/src/widget_tester.dart:599:27)
#894 main.<anonymous closure> (file:///Users/angeloavv/StudioProjects/flavor_assets_test/test/widget_test.dart:8:18)
#895 testWidgets.<anonymous closure>.<anonymous closure> (package:flutter_test/src/widget_tester.dart:183:29)
<asynchronous suspension>
#896 TestWidgetsFlutterBinding._runTestBody (package:flutter_test/src/binding.dart:1017:5)
<asynchronous suspension>
<asynchronous suspension>
(elided 5 frames from dart:async and package:stack_trace)
Image provider: AssetImage(bundle: null, name: "assets/flavor/image.png")
Image key: AssetBundleImageKey(bundle: PlatformAssetBundle#b2f74(), name: "assets/flavor/image.png",
scale: 1.0)
════════════════════════════════════════════════════════════════════════════════════════════════════
00:01 +0 -1: Expect Image [E]
Test failed. See exception logs above.
The test description was: Expect Image
To run this test again: /Users/angeloavv/fvm/versions/3.22.1/bin/cache/dart-sdk/bin/dart test /Users/angeloavv/StudioProjects/flavor_assets_test/test/widget_test.dart -p vm --plain-name 'Expect Image'
00:01 +0 -1: Some tests failed.Flutter Doctor output
Doctor output
fvm flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[!] Flutter (Channel stable, 3.22.1, on macOS 14.5 23F79 darwin-arm64, locale it-IT)
! Warning: `dart` on your path resolves to /opt/homebrew/Cellar/dart/3.2.3/libexec/bin/dart, which is not inside your current Flutter SDK checkout at /Users/angeloavv/fvm/versions/3.22.1. Consider adding /Users/angeloavv/fvm/versions/3.22.1/bin to the front of your path.
[✓] Android toolchain - develop for Android devices (Android SDK version 34.0.0)
[✓] Xcode - develop for iOS and macOS (Xcode 15.4)
[✓] Chrome - develop for the web
[✓] Android Studio (version 2024.1)
[✓] IntelliJ IDEA Community Edition (version 2024.1.3)
[✓] Connected device (5 available)
[✓] Network resources
! Doctor found issues in 1 category.lucavenir, EliaTolin, im-trisha, antoniopetricc and andreadelfante
Metadata
Metadata
Assignees
Labels
P1High-priority issues at the top of the work listHigh-priority issues at the top of the work listfound in release: 3.22Found to occur in 3.22Found to occur in 3.22found in release: 3.23Found to occur in 3.23Found to occur in 3.23has reproducible stepsThe issue has been confirmed reproducible and is ready to work onThe issue has been confirmed reproducible and is ready to work onr: fixedIssue is closed as already fixed in a newer versionIssue is closed as already fixed in a newer versionteam-toolOwned by Flutter Tool teamOwned by Flutter Tool teamtoolAffects the "flutter" command-line tool. See also t: labels.Affects the "flutter" command-line tool. See also t: labels.triaged-toolTriaged by Flutter Tool teamTriaged by Flutter Tool team