installAll method
Future<PackageInstallResult>
installAll({
- required String projectPath,
- required List<
DependencyConfig> dependencies, - required List<
DependencyConfig> devDependencies, - String executable = 'flutter',
Installs dependencies and devDependencies sequentially into projectPath using flutter pub add,
then runs a final flutter pub get.
Implementation
Future<PackageInstallResult> installAll({
required String projectPath,
required List<DependencyConfig> dependencies,
required List<DependencyConfig> devDependencies,
String executable = 'flutter',
}) async {
final installedDeps = <String>[];
final installedDevDeps = <String>[];
// 1. Install regular dependencies sequentially
for (final dep in dependencies) {
final pkgSpec =
dep.version != null ? '${dep.name}:${dep.version}' : dep.name;
final result = await _runner.run(
executable,
['pub', 'add', pkgSpec],
workingDirectory: projectPath,
);
if (result.exitCode != 0) {
final errText = result.stderr.toString().trim().isNotEmpty
? result.stderr.toString().trim()
: result.stdout.toString().trim();
throw PackageInstallException(
packageName: dep.name,
errorDetails: errText,
installedBeforeFailure: List.unmodifiable(installedDeps),
isDevDependency: false,
);
}
installedDeps.add(dep.name);
}
// 2. Install dev dependencies sequentially
for (final devDep in devDependencies) {
final pkgSpec = devDep.version != null
? '${devDep.name}:${devDep.version}'
: devDep.name;
final result = await _runner.run(
executable,
['pub', 'add', '--dev', pkgSpec],
workingDirectory: projectPath,
);
if (result.exitCode != 0) {
final errText = result.stderr.toString().trim().isNotEmpty
? result.stderr.toString().trim()
: result.stdout.toString().trim();
final allInstalled = [...installedDeps, ...installedDevDeps];
throw PackageInstallException(
packageName: devDep.name,
errorDetails: errText,
installedBeforeFailure: List.unmodifiable(allInstalled),
isDevDependency: true,
);
}
installedDevDeps.add(devDep.name);
}
// 3. Final explicit `flutter pub get`
if (dependencies.isNotEmpty || devDependencies.isNotEmpty) {
final getResult = await _runner.run(
executable,
['pub', 'get'],
workingDirectory: projectPath,
);
if (getResult.exitCode != 0) {
throw FlutterCommandException(
executable: executable,
arguments: ['pub', 'get'],
exitCode: getResult.exitCode,
stdout: getResult.stdout.toString(),
stderr: getResult.stderr.toString(),
);
}
}
return PackageInstallResult(
installedDependencies: List.unmodifiable(installedDeps),
installedDevDependencies: List.unmodifiable(installedDevDeps),
);
}