install method
Implementation
Future<InstallationResult> install({
required String packageName,
String? version,
}) async {
final dryRunResult = await checkCompatibilityOnly(
packageName: packageName,
version: version,
);
if (!dryRunResult.isCompatible) {
return InstallationResult(
installSuccessful: false,
packageName: packageName,
version: version,
warnings: dryRunResult.warnings,
errorMessage: dryRunResult.errorMessage,
);
}
final backupPath = await _backupPubspec();
if (backupPath == null) {
return InstallationResult(
installSuccessful: false,
packageName: packageName,
errorMessage: 'Failed to create backup of pubspec.yaml',
);
}
try {
final installResult = await processRunner.pubAdd(
packageName,
version: version,
);
if (!installResult.success) {
await _restorePubspec(backupPath);
return InstallationResult(
installSuccessful: false,
packageName: packageName,
version: version,
warnings: _extractWarnings(installResult.stdout),
errorMessage: _extractError(installResult.stderr),
);
}
final verifyResult = await processRunner.pubGet();
if (!verifyResult.success) {
await _restorePubspec(backupPath);
return InstallationResult(
installSuccessful: false,
packageName: packageName,
version: version,
errorMessage: 'Installation verification failed',
warnings: _extractWarnings(verifyResult.stderr),
);
}
final resolvedVersions = await _getResolvedVersions();
await _deleteBackup(backupPath);
return InstallationResult(
installSuccessful: true,
packageName: packageName,
version: version,
resolvedVersions: resolvedVersions,
warnings: _extractWarnings(installResult.stdout),
);
} catch (e) {
await _restorePubspec(backupPath);
return InstallationResult(
installSuccessful: false,
packageName: packageName,
version: version,
errorMessage: 'Unexpected error: $e',
);
}
}