pre_run_validator.dart 1.52 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
// 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() {}
}