execute method
Implementation
Future<AnalysisResult> execute(String projectPath) async {
try {
_state.startAnalysis();
// Find asset directories
_state.setTask('Reading project configuration...');
final assetPaths = await _fileService.findAssetPaths(projectPath);
if (assetPaths.isEmpty) {
throw AssetOptException('No asset directories found in pubspec.yaml');
}
// Scan for assets
_state.setTask('Scanning asset directories...');
final scanResult = await _fileService.scanAssets(assetPaths);
final totalFiles = scanResult.assets.length;
// Get detailed image info for each asset
_state.setTask('Analyzing assets...');
final assetDetails = <AssetDetail>[];
var processed = 0;
for (final asset in scanResult.assets) {
final file = File(asset.path);
final imageInfo = await _imageService.getImageInfo(file);
assetDetails.add(AssetDetail(
info: asset,
imageInfo: imageInfo,
issues: _analyzeAssetIssues(asset, imageInfo),
));
processed++;
_state.updateProgress(
'Analyzing ${path_util.basename(asset.path)}',
processed,
totalFiles,
);
}
_state.setTask('Finalizing analysis...');
final result = AnalysisResult(
assets: assetDetails,
scanErrors: scanResult.errors,
analyzedAt: DateTime.now(),
projectRoot: projectPath,
);
_state.completeAnalysis(result);
return result;
} catch (e) {
_state.failAnalysis(e.toString());
rethrow;
}
}