Don't search in %LocalAppData% if it's not set (#23933)
It's not usual for this not to be set, but it affected at least one user (#23909) and there are a non-zero number of people online saying it's not set. It's better that we don't crash.
Fixes #23909.
diff --git a/packages/flutter_tools/lib/src/vscode/vscode.dart b/packages/flutter_tools/lib/src/vscode/vscode.dart
index 3ed7586..5fb446c 100644
--- a/packages/flutter_tools/lib/src/vscode/vscode.dart
+++ b/packages/flutter_tools/lib/src/vscode/vscode.dart
@@ -132,19 +132,38 @@
final String progFiles = platform.environment['programfiles'];
final String localAppData = platform.environment['localappdata'];
- return _findInstalled(<_VsCodeInstallLocation>[
- _VsCodeInstallLocation(fs.path.join(localAppData, 'Programs\\Microsoft VS Code'), '.vscode'),
- _VsCodeInstallLocation(fs.path.join(progFiles86, 'Microsoft VS Code'), '.vscode',
- edition: '32-bit edition'),
- _VsCodeInstallLocation(fs.path.join(progFiles, 'Microsoft VS Code'), '.vscode',
- edition: '64-bit edition'),
- _VsCodeInstallLocation(fs.path.join(localAppData, 'Programs\\Microsoft VS Code Insiders'), '.vscode-insiders',
- isInsiders: true),
- _VsCodeInstallLocation(fs.path.join(progFiles86 , 'Microsoft VS Code Insiders'), '.vscode-insiders',
- edition: '32-bit edition', isInsiders: true),
- _VsCodeInstallLocation(fs.path.join(progFiles, 'Microsoft VS Code Insiders'), '.vscode-insiders',
- edition: '64-bit edition', isInsiders: true),
- ]);
+ final List<_VsCodeInstallLocation> searchLocations =
+ <_VsCodeInstallLocation>[];
+
+ if (localAppData != null) {
+ searchLocations.add(_VsCodeInstallLocation(
+ fs.path.join(localAppData, 'Programs\\Microsoft VS Code'),
+ '.vscode'));
+ }
+ searchLocations.add(_VsCodeInstallLocation(
+ fs.path.join(progFiles86, 'Microsoft VS Code'), '.vscode',
+ edition: '32-bit edition'));
+ searchLocations.add(_VsCodeInstallLocation(
+ fs.path.join(progFiles, 'Microsoft VS Code'), '.vscode',
+ edition: '64-bit edition'));
+ if (localAppData != null) {
+ searchLocations.add(_VsCodeInstallLocation(
+ fs.path.join(localAppData, 'Programs\\Microsoft VS Code Insiders'),
+ '.vscode-insiders',
+ isInsiders: true));
+ }
+ searchLocations.add(_VsCodeInstallLocation(
+ fs.path.join(progFiles86, 'Microsoft VS Code Insiders'),
+ '.vscode-insiders',
+ edition: '32-bit edition',
+ isInsiders: true));
+ searchLocations.add(_VsCodeInstallLocation(
+ fs.path.join(progFiles, 'Microsoft VS Code Insiders'),
+ '.vscode-insiders',
+ edition: '64-bit edition',
+ isInsiders: true));
+
+ return _findInstalled(searchLocations);
}
// Linux: