From 5fd17bccff2e57b043cb56ec703ea2f385ee7c98 Mon Sep 17 00:00:00 2001
From: Srivats Venkataraman <42980667+srivats22@users.noreply.github.com>
Date: Mon, 28 Apr 2025 09:19:00 -0400
Subject: [PATCH] Changes message when web folder is not present (#165084)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
This PR addresses: https://github.com/flutter/flutter/issues/164921
The old message for when the web folder wasnt present and a build for
web command was executed the following message was thrown:
```Missing index.html.```
The new message is going to be:
```Run flutter create . --platforms web```
## Pre-launch Checklist
- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [x] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [x] I read and followed the [Flutter Style Guide], including [Features
we expect every widget to implement].
- [x] I signed the [CLA].
- [x] I listed at least one issue that this PR fixes in the description
above.
- [x] I updated/added relevant documentation (doc comments with `///`).
- [x] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [x] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [x] All existing and new tests are passing.
If you need help, consider asking for advice on the #hackers-new channel
on [Discord].
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[Tree Hygiene]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
[test-exempt]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement
[CLA]: https://cla.developers.google.com/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Discord]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md
[Data Driven Fixes]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
---
.../lib/src/commands/build_web.dart | 5 ++-
.../hermetic/build_web_test.dart | 37 ++++++++++++++++++-
2 files changed, 40 insertions(+), 2 deletions(-)
diff --git a/packages/flutter_tools/lib/src/commands/build_web.dart b/packages/flutter_tools/lib/src/commands/build_web.dart
index 091e676d098..6fdca627530 100644
--- a/packages/flutter_tools/lib/src/commands/build_web.dart
+++ b/packages/flutter_tools/lib/src/commands/build_web.dart
@@ -217,7 +217,10 @@ class BuildWebCommand extends BuildSubCommand {
);
}
if (!project.web.existsSync()) {
- throwToolExit('Missing index.html.');
+ throwToolExit(
+ 'This project is not configured for the web.\n'
+ 'To configure this project for the web, run flutter create . --platforms web',
+ );
}
if (!_fileSystem.currentDirectory
.childDirectory('web')
diff --git a/packages/flutter_tools/test/commands.shard/hermetic/build_web_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/build_web_test.dart
index 01f7fa1583b..509a6e37f71 100644
--- a/packages/flutter_tools/test/commands.shard/hermetic/build_web_test.dart
+++ b/packages/flutter_tools/test/commands.shard/hermetic/build_web_test.dart
@@ -64,7 +64,11 @@ void main() {
expect(
() => runner.run(['build', 'web', '--no-pub']),
- throwsToolExit(message: 'Missing index.html.'),
+ throwsToolExit(
+ message:
+ 'This project is not configured for the web.\n'
+ 'To configure this project for the web, run flutter create . --platforms web',
+ ),
);
},
overrides: {
@@ -588,6 +592,37 @@ void main() {
ProcessManager: () => processManager,
},
);
+
+ testUsingContext(
+ 'Refuses to build for web when folder is missing',
+ () async {
+ fileSystem.file(fileSystem.path.join('web')).deleteSync(recursive: true);
+ final CommandRunner runner = createTestCommandRunner(
+ BuildCommand(
+ androidSdk: FakeAndroidSdk(),
+ buildSystem: TestBuildSystem.all(BuildResult(success: true)),
+ fileSystem: fileSystem,
+ logger: logger,
+ osUtils: FakeOperatingSystemUtils(),
+ ),
+ );
+
+ expect(
+ () => runner.run(['build', 'web', '--no-pub']),
+ throwsToolExit(
+ message:
+ 'This project is not configured for the web.\n'
+ 'To configure this project for the web, run flutter create . --platforms web',
+ ),
+ );
+ },
+ overrides: {
+ Platform: () => fakePlatform,
+ FileSystem: () => fileSystem,
+ FeatureFlags: () => TestFeatureFlags(isWebEnabled: true),
+ ProcessManager: () => processManager,
+ },
+ );
}
void setupFileSystemForEndToEndTest(FileSystem fileSystem) {