diff --git a/packages/flutter_tools/lib/src/artifacts.dart b/packages/flutter_tools/lib/src/artifacts.dart index 0d575ebd481..a874b3c703c 100644 --- a/packages/flutter_tools/lib/src/artifacts.dart +++ b/packages/flutter_tools/lib/src/artifacts.dart @@ -66,9 +66,6 @@ enum Artifact { /// The location of file generators. flutterToolsFileGenerators, - - /// The path to the CanvasKit files built by the flutter engine. - canvasKitPath, } /// A subset of [Artifact]s that are platform and build mode independent @@ -210,7 +207,6 @@ String? _artifactToFileName(Artifact artifact, Platform hostPlatform, [ BuildMod case Artifact.constFinder: return 'const_finder.dart.snapshot'; case Artifact.flutterToolsFileGenerators: - case Artifact.canvasKitPath: return ''; } } @@ -535,7 +531,6 @@ class CachedArtifacts implements Artifacts { case Artifact.windowsCppClientWrapper: case Artifact.windowsDesktopPath: case Artifact.flutterToolsFileGenerators: - case Artifact.canvasKitPath: return _getHostArtifactPath(artifact, platform, mode); } } @@ -574,7 +569,6 @@ class CachedArtifacts implements Artifacts { case Artifact.windowsCppClientWrapper: case Artifact.windowsDesktopPath: case Artifact.flutterToolsFileGenerators: - case Artifact.canvasKitPath: return _getHostArtifactPath(artifact, platform, mode); } } @@ -625,7 +619,6 @@ class CachedArtifacts implements Artifacts { case Artifact.windowsCppClientWrapper: case Artifact.windowsDesktopPath: case Artifact.flutterToolsFileGenerators: - case Artifact.canvasKitPath: return _getHostArtifactPath(artifact, platform, mode); } } @@ -703,8 +696,6 @@ class CachedArtifacts implements Artifacts { throw StateError('Artifact $artifact not available for platform $platform.'); case Artifact.flutterToolsFileGenerators: return _getFileGeneratorsPath(); - case Artifact.canvasKitPath: - return _fileSystem.path.join(_cache.getWebSdkDirectory().path, 'canvaskit'); } } @@ -974,8 +965,6 @@ class CachedLocalEngineArtifacts implements Artifacts { return _fileSystem.path.join(_getDartSdkPath(), 'bin', 'snapshots', artifactFileName); case Artifact.flutterToolsFileGenerators: return _getFileGeneratorsPath(); - case Artifact.canvasKitPath: - return _fileSystem.path.join(localEngineInfo.engineOutPath, 'canvaskit'); } } @@ -1103,8 +1092,6 @@ class CachedLocalWebSdkArtifacts implements Artifacts { _getDartSdkPath(), 'bin', 'snapshots', _artifactToFileName(artifact, _platform, mode), ); - case Artifact.canvasKitPath: - return _fileSystem.path.join(_webSdkPath, 'canvaskit'); case Artifact.genSnapshot: case Artifact.flutterTester: case Artifact.flutterFramework: diff --git a/packages/flutter_tools/lib/src/build_system/targets/web.dart b/packages/flutter_tools/lib/src/build_system/targets/web.dart index d6977f1e5cd..b5c22a655fb 100644 --- a/packages/flutter_tools/lib/src/build_system/targets/web.dart +++ b/packages/flutter_tools/lib/src/build_system/targets/web.dart @@ -516,20 +516,31 @@ class WebBuiltInAssets extends Target { Source.hostArtifact(HostArtifact.flutterWebSdk), ]; + Directory get _canvasKitDirectory => + globals.fs.directory( + fileSystem.path.join( + globals.artifacts!.getHostArtifact(HostArtifact.flutterWebSdk).path, + 'canvaskit', + ) + ); + + List get _canvasKitFiles => _canvasKitDirectory.listSync(recursive: true).whereType().toList(); + + String _filePathRelativeToCanvasKitDirectory(File file) => + fileSystem.path.relative(file.path, from: _canvasKitDirectory.path); + @override - List get outputs => const []; + List get outputs => [ + if (isWasm) const Source.pattern('{BUILD_DIR}/main.dart.js'), + const Source.pattern('{BUILD_DIR}/flutter.js'), + for (final File file in _canvasKitFiles) + Source.pattern('{BUILD_DIR}/canvaskit/${_filePathRelativeToCanvasKitDirectory(file)}'), + ]; @override Future build(Environment environment) async { - final Directory canvasKitDirectory = globals.fs.directory( - globals.artifacts!.getArtifactPath( - Artifact.canvasKitPath, - platform: TargetPlatform.web_javascript, - ), - ); - - for (final File file in canvasKitDirectory.listSync(recursive: true).whereType()) { - final String relativePath = fileSystem.path.relative(file.path, from: canvasKitDirectory.path); + for (final File file in _canvasKitFiles) { + final String relativePath = _filePathRelativeToCanvasKitDirectory(file); final String targetPath = fileSystem.path.join(environment.outputDir.path, 'canvaskit', relativePath); file.copySync(targetPath); } diff --git a/packages/flutter_tools/lib/src/isolated/devfs_web.dart b/packages/flutter_tools/lib/src/isolated/devfs_web.dart index 28f4789e00a..7809c3a1ba1 100644 --- a/packages/flutter_tools/lib/src/isolated/devfs_web.dart +++ b/packages/flutter_tools/lib/src/isolated/devfs_web.dart @@ -420,12 +420,13 @@ class WebAssetServer implements AssetReader { File file = _resolveDartFile(requestPath); if (!file.existsSync() && requestPath.startsWith('canvaskit/')) { - final String canvasKitPath = globals.artifacts!.getArtifactPath( - Artifact.canvasKitPath, - platform: TargetPlatform.web_javascript, + final Directory canvasKitDirectory = globals.fs.directory( + globals.fs.path.join( + globals.artifacts!.getHostArtifact(HostArtifact.flutterWebSdk).path, + 'canvaskit', + ) ); - final Uri potential = globals.fs - .directory(canvasKitPath) + final Uri potential = canvasKitDirectory .uri .resolve(requestPath.replaceFirst('canvaskit/', '')); file = globals.fs.file(potential); diff --git a/packages/flutter_tools/lib/src/test/flutter_web_platform.dart b/packages/flutter_tools/lib/src/test/flutter_web_platform.dart index 355614fc0a3..ec99e517b06 100644 --- a/packages/flutter_tools/lib/src/test/flutter_web_platform.dart +++ b/packages/flutter_tools/lib/src/test/flutter_web_platform.dart @@ -221,9 +221,9 @@ class FlutterWebPlatform extends PlatformPlugin { )); File _canvasKitFile(String relativePath) { - final String canvasKitPath = _artifacts!.getArtifactPath( - Artifact.canvasKitPath, - platform: TargetPlatform.web_javascript, + final String canvasKitPath = _fileSystem.path.join( + _artifacts!.getHostArtifact(HostArtifact.flutterWebSdk).path, + 'canvaskit', ); final File canvasKitFile = _fileSystem.file(_fileSystem.path.join( canvasKitPath, diff --git a/packages/flutter_tools/test/general.shard/artifacts_test.dart b/packages/flutter_tools/test/general.shard/artifacts_test.dart index dbbc815b565..517162b996f 100644 --- a/packages/flutter_tools/test/general.shard/artifacts_test.dart +++ b/packages/flutter_tools/test/general.shard/artifacts_test.dart @@ -145,10 +145,6 @@ void main() { artifacts.getArtifactPath(Artifact.frontendServerSnapshotForEngineDartSdk), fileSystem.path.join('root', 'bin', 'cache', 'dart-sdk', 'bin', 'snapshots', 'frontend_server.dart.snapshot') ); - expect( - artifacts.getArtifactPath(Artifact.canvasKitPath), - fileSystem.path.join('root', 'bin', 'cache', 'flutter_web_sdk', 'canvaskit'), - ); }); testWithoutContext('precompiled web artifact paths are correct', () { @@ -346,10 +342,6 @@ void main() { artifacts.getHostArtifact(HostArtifact.libtessellator).path, fileSystem.path.join('/out', 'host_debug_unopt', 'libtessellator.so'), ); - expect( - artifacts.getArtifactPath(Artifact.canvasKitPath, platform: TargetPlatform.web_javascript), - fileSystem.path.join('/out', 'wasm_release', 'canvaskit'), - ); }); testWithoutContext('falls back to bundled impeller artifacts if the files do not exist in the local engine', () {