Skip to content

Commit 27281da

Browse files
[flutter_tools] dont include material shaders in web builds (#116538)
* [flutter_tools] dont include material shaders in web builds * add test
1 parent 06e7c7a commit 27281da

File tree

2 files changed

+62
-1
lines changed

2 files changed

+62
-1
lines changed

packages/flutter_tools/lib/src/asset.dart

+2-1
Original file line numberDiff line numberDiff line change
@@ -424,7 +424,8 @@ class ManifestAssetBundle implements AssetBundle {
424424
// For all platforms, include the shaders unconditionally. They are
425425
// small, and whether they're used is determined only by the app source
426426
// code and not by the Flutter manifest.
427-
..._getMaterialShaders(),
427+
if (targetPlatform != TargetPlatform.web_javascript)
428+
..._getMaterialShaders(),
428429
];
429430
for (final _Asset asset in materialAssets) {
430431
final File assetFile = asset.lookupAssetFile(_fileSystem);

packages/flutter_tools/test/general.shard/asset_test.dart

+60
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@
22
// Use of this source code is governed by a BSD-style license that can be
33
// found in the LICENSE file.
44

5+
import 'package:file/memory.dart';
56
import 'package:flutter_tools/src/asset.dart';
67
import 'package:flutter_tools/src/base/file_system.dart';
8+
import 'package:flutter_tools/src/build_info.dart';
79
import 'package:flutter_tools/src/cache.dart';
810
import 'package:flutter_tools/src/globals.dart' as globals;
911

@@ -81,6 +83,64 @@ void main() {
8183
);
8284
});
8385
});
86+
87+
const String packageConfig = '''
88+
{
89+
"configVersion": 2,
90+
"packages":[
91+
{
92+
"name": "my_package",
93+
"rootUri": "file:///",
94+
"packageUri": "lib/",
95+
"languageVersion": "2.17"
96+
}
97+
]
98+
}
99+
''';
100+
101+
const String pubspecDotYaml = '''
102+
name: my_package
103+
''';
104+
105+
testUsingContext('Bundles material shaders on non-web platforms', () async {
106+
final String shaderPath = globals.fs.path.join(
107+
Cache.flutterRoot!,
108+
'packages', 'flutter', 'lib', 'src', 'material', 'shaders', 'ink_sparkle.frag'
109+
);
110+
globals.fs.file(shaderPath).createSync(recursive: true);
111+
globals.fs.file('.dart_tool/package_config.json')
112+
..createSync(recursive: true)
113+
..writeAsStringSync(packageConfig);
114+
globals.fs.file('pubspec.yaml').writeAsStringSync(pubspecDotYaml);
115+
final AssetBundle asset = AssetBundleFactory.instance.createBundle();
116+
117+
await asset.build(packagesPath: '.packages', targetPlatform: TargetPlatform.android_arm);
118+
119+
expect(asset.entries.keys, contains('shaders/ink_sparkle.frag'));
120+
}, overrides: <Type, Generator>{
121+
FileSystem: () => MemoryFileSystem.test(),
122+
ProcessManager: () => FakeProcessManager.empty(),
123+
});
124+
125+
testUsingContext('Does not bundles material shaders on web platforms', () async {
126+
final String shaderPath = globals.fs.path.join(
127+
Cache.flutterRoot!,
128+
'packages', 'flutter', 'lib', 'src', 'material', 'shaders', 'ink_sparkle.frag'
129+
);
130+
globals.fs.file(shaderPath).createSync(recursive: true);
131+
globals.fs.file('.dart_tool/package_config.json')
132+
..createSync(recursive: true)
133+
..writeAsStringSync(packageConfig);
134+
globals.fs.file('pubspec.yaml').writeAsStringSync(pubspecDotYaml);
135+
final AssetBundle asset = AssetBundleFactory.instance.createBundle();
136+
137+
await asset.build(packagesPath: '.packages', targetPlatform: TargetPlatform.web_javascript);
138+
139+
expect(asset.entries.keys, isNot(contains('shaders/ink_sparkle.frag')));
140+
}, overrides: <Type, Generator>{
141+
FileSystem: () => MemoryFileSystem.test(),
142+
ProcessManager: () => FakeProcessManager.empty(),
143+
});
84144
}
85145

86146
Future<String> getValueAsString(String key, AssetBundle asset) async {

0 commit comments

Comments
 (0)