blob: ebce8e619d43e5f3238c2b799181f9f78fa76dcb [file] [log] [blame]
// Copyright 2014 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import '../base/context.dart';
import '../base/user_messages.dart' hide userMessages;
import '../doctor_validator.dart';
import 'visual_studio.dart';
VisualStudioValidator? get visualStudioValidator => context.get<VisualStudioValidator>();
class VisualStudioValidator extends DoctorValidator {
const VisualStudioValidator({
required VisualStudio visualStudio,
required UserMessages userMessages,
}) : _visualStudio = visualStudio,
_userMessages = userMessages,
super('Visual Studio - develop for Windows');
final VisualStudio _visualStudio;
final UserMessages _userMessages;
@override
Future<ValidationResult> validate() async {
final List<ValidationMessage> messages = <ValidationMessage>[];
ValidationType status = ValidationType.missing;
String? versionInfo;
if (_visualStudio.isInstalled) {
status = ValidationType.installed;
messages.add(ValidationMessage(
_userMessages.visualStudioLocation(_visualStudio.installLocation ?? 'unknown')
));
messages.add(ValidationMessage(_userMessages.visualStudioVersion(
_visualStudio.displayName ?? 'unknown',
_visualStudio.fullVersion ?? 'unknown',
)));
if (_visualStudio.isPrerelease) {
messages.add(ValidationMessage(_userMessages.visualStudioIsPrerelease));
}
final String? windows10SdkVersion = _visualStudio.getWindows10SDKVersion();
if (windows10SdkVersion != null) {
messages.add(ValidationMessage(_userMessages.windows10SdkVersion(windows10SdkVersion)));
}
// Messages for faulty installations.
if (!_visualStudio.isAtLeastMinimumVersion) {
status = ValidationType.partial;
messages.add(ValidationMessage.error(
_userMessages.visualStudioTooOld(
_visualStudio.minimumVersionDescription,
_visualStudio.workloadDescription,
),
));
} else if (_visualStudio.isRebootRequired) {
status = ValidationType.partial;
messages.add(ValidationMessage.error(_userMessages.visualStudioRebootRequired));
} else if (!_visualStudio.isComplete) {
status = ValidationType.partial;
messages.add(ValidationMessage.error(_userMessages.visualStudioIsIncomplete));
} else if (!_visualStudio.isLaunchable) {
status = ValidationType.partial;
messages.add(ValidationMessage.error(_userMessages.visualStudioNotLaunchable));
} else if (!_visualStudio.hasNecessaryComponents) {
status = ValidationType.partial;
messages.add(ValidationMessage.error(
_userMessages.visualStudioMissingComponents(
_visualStudio.workloadDescription,
_visualStudio.necessaryComponentDescriptions(),
),
));
} else if (windows10SdkVersion == null) {
status = ValidationType.partial;
messages.add(ValidationMessage.hint(_userMessages.windows10SdkNotFound));
}
versionInfo = '${_visualStudio.displayName} ${_visualStudio.displayVersion}';
} else {
status = ValidationType.missing;
messages.add(ValidationMessage.error(
_userMessages.visualStudioMissing(
_visualStudio.workloadDescription,
),
));
}
return ValidationResult(status, messages, statusInfo: versionInfo);
}
}