mirror of
https://github.com/flutter/flutter
synced 2024-10-13 19:52:53 +00:00
Fixes terse doctor output when no devices available. (#22108)
This commit is contained in:
parent
f16d005d66
commit
306bcbde8a
|
@ -124,12 +124,20 @@ class Doctor {
|
|||
for (DoctorValidator validator in validators) {
|
||||
final ValidationResult result = await validator.validate();
|
||||
buffer.write('${result.leadingBox} ${validator.title} is ');
|
||||
if (result.type == ValidationType.missing)
|
||||
buffer.write('not installed.');
|
||||
else if (result.type == ValidationType.partial)
|
||||
buffer.write('partially installed; more components are available.');
|
||||
else
|
||||
buffer.write('fully installed.');
|
||||
switch (result.type) {
|
||||
case ValidationType.missing:
|
||||
buffer.write('not installed.');
|
||||
break;
|
||||
case ValidationType.partial:
|
||||
buffer.write('partially installed; more components are available.');
|
||||
break;
|
||||
case ValidationType.notAvailable:
|
||||
buffer.write('not available.');
|
||||
break;
|
||||
case ValidationType.installed:
|
||||
buffer.write('fully installed.');
|
||||
break;
|
||||
}
|
||||
|
||||
if (result.statusInfo != null)
|
||||
buffer.write(' (${result.statusInfo})');
|
||||
|
@ -171,11 +179,17 @@ class Doctor {
|
|||
}
|
||||
status.stop();
|
||||
|
||||
if (result.type == ValidationType.missing) {
|
||||
doctorResult = false;
|
||||
}
|
||||
if (result.type != ValidationType.installed) {
|
||||
issues += 1;
|
||||
switch (result.type) {
|
||||
case ValidationType.missing:
|
||||
doctorResult = false;
|
||||
issues += 1;
|
||||
break;
|
||||
case ValidationType.partial:
|
||||
case ValidationType.notAvailable:
|
||||
issues += 1;
|
||||
break;
|
||||
case ValidationType.installed:
|
||||
break;
|
||||
}
|
||||
|
||||
if (result.statusInfo != null)
|
||||
|
@ -238,7 +252,8 @@ abstract class Workflow {
|
|||
enum ValidationType {
|
||||
missing,
|
||||
partial,
|
||||
installed
|
||||
notAvailable,
|
||||
installed,
|
||||
}
|
||||
|
||||
abstract class DoctorValidator {
|
||||
|
@ -286,6 +301,7 @@ class GroupedValidator extends DoctorValidator {
|
|||
mergedType = ValidationType.partial;
|
||||
}
|
||||
break;
|
||||
case ValidationType.notAvailable:
|
||||
case ValidationType.partial:
|
||||
mergedType = ValidationType.partial;
|
||||
break;
|
||||
|
@ -322,6 +338,7 @@ class ValidationResult {
|
|||
return '[✗]';
|
||||
case ValidationType.installed:
|
||||
return '[✓]';
|
||||
case ValidationType.notAvailable:
|
||||
case ValidationType.partial:
|
||||
return '[!]';
|
||||
}
|
||||
|
@ -600,7 +617,7 @@ class IntelliJValidatorOnMac extends IntelliJValidator {
|
|||
}
|
||||
|
||||
class DeviceValidator extends DoctorValidator {
|
||||
DeviceValidator() : super('Connected devices');
|
||||
DeviceValidator() : super('Connected device');
|
||||
|
||||
@override
|
||||
Future<ValidationResult> validate() async {
|
||||
|
@ -619,7 +636,7 @@ class DeviceValidator extends DoctorValidator {
|
|||
}
|
||||
|
||||
if (devices.isEmpty) {
|
||||
return ValidationResult(ValidationType.partial, messages);
|
||||
return ValidationResult(ValidationType.notAvailable, messages);
|
||||
} else {
|
||||
return ValidationResult(ValidationType.installed, messages, statusInfo: '${devices.length} available');
|
||||
}
|
||||
|
|
|
@ -148,13 +148,16 @@ void main() {
|
|||
'[✗] Missing Validator\n'
|
||||
' ✗ A useful error message\n'
|
||||
' ! A hint message\n'
|
||||
'[!] Not Available Validator\n'
|
||||
' ✗ A useful error message\n'
|
||||
' ! A hint message\n'
|
||||
'[!] Partial Validator with only a Hint\n'
|
||||
' ! There is a hint here\n'
|
||||
'[!] Partial Validator with Errors\n'
|
||||
' ✗ A error message indicating partial installation\n'
|
||||
' ! Maybe a hint will help the user\n'
|
||||
'\n'
|
||||
'! Doctor found issues in 3 categories.\n'
|
||||
'! Doctor found issues in 4 categories.\n'
|
||||
));
|
||||
});
|
||||
|
||||
|
@ -170,6 +173,11 @@ void main() {
|
|||
' • A message that is not an error\n'
|
||||
' ! A hint message\n'
|
||||
'\n'
|
||||
'[!] Not Available Validator\n'
|
||||
' ✗ A useful error message\n'
|
||||
' • A message that is not an error\n'
|
||||
' ! A hint message\n'
|
||||
'\n'
|
||||
'[!] Partial Validator with only a Hint\n'
|
||||
' ! There is a hint here\n'
|
||||
' • But there is no error\n'
|
||||
|
@ -179,7 +187,7 @@ void main() {
|
|||
' ! Maybe a hint will help the user\n'
|
||||
' • An extra message with some verbose details\n'
|
||||
'\n'
|
||||
'! Doctor found issues in 3 categories.\n'
|
||||
'! Doctor found issues in 4 categories.\n'
|
||||
));
|
||||
});
|
||||
});
|
||||
|
@ -301,6 +309,19 @@ class MissingValidator extends DoctorValidator {
|
|||
}
|
||||
}
|
||||
|
||||
class NotAvailableValidator extends DoctorValidator {
|
||||
NotAvailableValidator(): super('Not Available Validator');
|
||||
|
||||
@override
|
||||
Future<ValidationResult> validate() async {
|
||||
final List<ValidationMessage> messages = <ValidationMessage>[];
|
||||
messages.add(ValidationMessage.error('A useful error message'));
|
||||
messages.add(ValidationMessage('A message that is not an error'));
|
||||
messages.add(ValidationMessage.hint('A hint message'));
|
||||
return ValidationResult(ValidationType.notAvailable, messages);
|
||||
}
|
||||
}
|
||||
|
||||
class PartialValidatorWithErrors extends DoctorValidator {
|
||||
PartialValidatorWithErrors() : super('Partial Validator with Errors');
|
||||
|
||||
|
@ -336,6 +357,7 @@ class FakeDoctor extends Doctor {
|
|||
_validators = <DoctorValidator>[];
|
||||
_validators.add(PassingValidator('Passing Validator'));
|
||||
_validators.add(MissingValidator());
|
||||
_validators.add(NotAvailableValidator());
|
||||
_validators.add(PartialValidatorWithHintsOnly());
|
||||
_validators.add(PartialValidatorWithErrors());
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue