| // Copyright 2015 The Chromium 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 'dart:async'; |
| import 'dart:io'; |
| |
| import 'package:args/command_runner.dart'; |
| |
| import '../application_package.dart'; |
| import '../device.dart'; |
| import '../toolchain.dart'; |
| import 'flutter_command_runner.dart'; |
| |
| abstract class FlutterCommand extends Command { |
| FlutterCommandRunner get runner => super.runner; |
| |
| /// Whether this command needs to be run from the root of a project. |
| bool get requiresProjectRoot => true; |
| |
| Future downloadApplicationPackages() async { |
| if (applicationPackages == null) |
| applicationPackages = await ApplicationPackageStore.forConfigs(runner.buildConfigurations); |
| } |
| |
| Future downloadToolchain() async { |
| if (toolchain == null) |
| toolchain = await Toolchain.forConfigs(runner.buildConfigurations); |
| } |
| |
| void connectToDevices() { |
| if (devices == null) |
| devices = new DeviceStore.forConfigs(runner.buildConfigurations); |
| } |
| |
| Future downloadApplicationPackagesAndConnectToDevices() async { |
| await downloadApplicationPackages(); |
| connectToDevices(); |
| } |
| |
| void inheritFromParent(FlutterCommand other) { |
| applicationPackages = other.applicationPackages; |
| toolchain = other.toolchain; |
| devices = other.devices; |
| } |
| |
| Future<int> run() async { |
| if (requiresProjectRoot) { |
| if (!FileSystemEntity.isFileSync('pubspec.yaml')) { |
| stderr.writeln('No pubspec.yaml file found. ' |
| 'This command should be run from the root of a project.'); |
| return 1; |
| } |
| } |
| |
| return runInProject(); |
| } |
| |
| Future<int> runInProject(); |
| |
| ApplicationPackageStore applicationPackages; |
| Toolchain toolchain; |
| DeviceStore devices; |
| } |