| // Copyright 2014 The Flutter Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| import 'base/common.dart'; |
| import 'base/file_system.dart'; |
| import 'cache.dart'; |
| |
| /// A validator that runs before the tool runs any command. |
| abstract class PreRunValidator { |
| factory PreRunValidator({ |
| required FileSystem fileSystem, |
| }) => _DefaultPreRunValidator(fileSystem: fileSystem); |
| |
| void validate(); |
| } |
| |
| class _DefaultPreRunValidator implements PreRunValidator { |
| _DefaultPreRunValidator({ |
| required this.fileSystem, |
| }); |
| |
| final FileSystem fileSystem; |
| |
| late final Directory _toolsDir = fileSystem.directory( |
| fileSystem.path.join(Cache.flutterRoot!, 'packages', 'flutter_tools'), |
| ); |
| |
| @override |
| void validate() { |
| // If a user downloads the Flutter SDK via a pre-built archive and there is |
| // an error during extraction, the user could have a valid Dart snapshot of |
| // the tool but not the source directory. We still need the source, so |
| // validate the source directory exists and toolExit if not. |
| if (!_toolsDir.existsSync()) { |
| throwToolExit( |
| 'Flutter SDK installation appears corrupted: expected to find the ' |
| 'directory ${_toolsDir.path} but it does not exist! Please go to ' |
| 'https://flutter.dev/setup for instructions on how to re-install ' |
| 'Flutter.', |
| ); |
| } |
| } |
| } |
| |
| class NoOpPreRunValidator implements PreRunValidator { |
| const NoOpPreRunValidator(); |
| |
| @override |
| void validate() {} |
| } |