| // Copyright 2013 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 'package:colorize/colorize.dart'; |
| import 'package:file/file.dart'; |
| import 'package:yaml/yaml.dart'; |
| |
| /// The signature for a print handler for commands that allow overriding the |
| /// print destination. |
| typedef Print = void Function(Object? object); |
| |
| /// Key for windows platform. |
| const String kPlatformFlagWindows = 'windows'; |
| |
| /// Key for macos platform. |
| const String kPlatformFlagMacos = 'macos'; |
| |
| /// Key for linux platform. |
| const String kPlatformFlagLinux = 'linux'; |
| |
| /// Key for IPA (iOS) platform. |
| const String kPlatformFlagIos = 'ios'; |
| |
| /// Key for APK (Android) platform. |
| const String kPlatformFlagAndroid = 'android'; |
| |
| /// Key for Web platform. |
| const String kPlatformFlagWeb = 'web'; |
| |
| /// Key for enable experiment. |
| const String kEnableExperiment = 'enable-experiment'; |
| |
| /// Returns whether the given directory contains a Flutter package. |
| bool isFlutterPackage(FileSystemEntity entity) { |
| if (entity is! Directory) { |
| return false; |
| } |
| |
| try { |
| final File pubspecFile = entity.childFile('pubspec.yaml'); |
| final YamlMap pubspecYaml = |
| loadYaml(pubspecFile.readAsStringSync()) as YamlMap; |
| final YamlMap? dependencies = pubspecYaml['dependencies'] as YamlMap?; |
| if (dependencies == null) { |
| return false; |
| } |
| return dependencies.containsKey('flutter'); |
| } on FileSystemException { |
| return false; |
| } on YamlException { |
| return false; |
| } |
| } |
| |
| /// Prints `errorMessage` in red. |
| void printError(String errorMessage) { |
| final Colorize redError = Colorize(errorMessage)..red(); |
| print(redError); |
| } |
| |
| /// Error thrown when a command needs to exit with a non-zero exit code. |
| class ToolExit extends Error { |
| /// Creates a tool exit with the given [exitCode]. |
| ToolExit(this.exitCode); |
| |
| /// The code that the process should exit with. |
| final int exitCode; |
| } |