diff --git a/packages/flutter_tools/lib/src/commands/precache.dart b/packages/flutter_tools/lib/src/commands/precache.dart index ab8e4d5789..f7d3fdd0b1 100644 --- a/packages/flutter_tools/lib/src/commands/precache.dart +++ b/packages/flutter_tools/lib/src/commands/precache.dart @@ -13,6 +13,8 @@ class PrecacheCommand extends FlutterCommand { PrecacheCommand() { argParser.addFlag('all-platforms', abbr: 'a', negatable: false, help: 'Precache artifacts for all platforms.'); + argParser.addFlag('force', abbr: 'f', negatable: false, + help: 'Force downloading of artifacts.'); argParser.addFlag('android', negatable: true, defaultsTo: true, help: 'Precache artifacts for Android development'); argParser.addFlag('ios', negatable: true, defaultsTo: true, @@ -55,10 +57,11 @@ class PrecacheCommand extends FlutterCommand { requiredArtifacts.add(artifact); } } - if (cache.isUpToDate()) { - printStatus('Already up-to-date.'); - } else { + final bool forceUpdate = argResults['force']; + if (forceUpdate || !cache.isUpToDate()) { await cache.updateAll(requiredArtifacts); + } else { + printStatus('Already up-to-date.'); } return null; } diff --git a/packages/flutter_tools/test/commands/precache_test.dart b/packages/flutter_tools/test/commands/precache_test.dart index 217f3cd8c5..7bbaca03fd 100644 --- a/packages/flutter_tools/test/commands/precache_test.dart +++ b/packages/flutter_tools/test/commands/precache_test.dart @@ -63,6 +63,23 @@ void main() { Cache: () => cache, FlutterVersion: () => flutterVersion, }); + + testUsingContext('Downloads artifacts when --force is provided', () async { + when(cache.isUpToDate()).thenReturn(true); + // Release lock between test cases. + Cache.releaseLockEarly(); + final PrecacheCommand command = PrecacheCommand(); + applyMocksToCommand(command); + await createTestCommandRunner(command).run(const ['precache', '--force']); + expect(artifacts, unorderedEquals({ + DevelopmentArtifact.universal, + DevelopmentArtifact.iOS, + DevelopmentArtifact.android, + })); + }, overrides: { + Cache: () => cache, + FlutterVersion: () => flutterVersion, + }); }); }