| // Copyright 2018 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 '../base/common.dart'; |
| import '../project.dart'; |
| import '../runner/flutter_command.dart'; |
| |
| class MakeHostAppEditableCommand extends FlutterCommand { |
| MakeHostAppEditableCommand() { |
| requiresPubspecYaml(); |
| |
| argParser.addFlag( |
| 'ios', |
| help: 'Whether to make this project\'s iOS app editable.', |
| negatable: false, |
| ); |
| argParser.addFlag( |
| 'android', |
| help: 'Whether ot make this project\'s Android app editable.', |
| negatable: false, |
| ); |
| } |
| |
| FlutterProject _project; |
| |
| @override |
| final String name = 'make-host-app-editable'; |
| |
| @override |
| final String description = 'Moves host apps from generated directories to non-generated directories so that they can be edited by developers.\n\n' |
| 'Use flags to specify which host app to make editable. If no flags are provided then all host apps will be made editable.\n\n' |
| 'Once a host app is made editable, that host app cannot be regenerated by Flutter and it will not receive future template changes.'; |
| |
| @override |
| Future<void> validateCommand() async { |
| await super.validateCommand(); |
| _project = await FlutterProject.current(); |
| if (!_project.isModule) |
| throw ToolExit("Only projects created using 'flutter create -t module' can have their host apps made editable."); |
| } |
| |
| @override |
| Future<FlutterCommandResult> runCommand() async { |
| await _project.ensureReadyForPlatformSpecificTooling(); |
| |
| final bool isAndroidRequested = argResults['android']; |
| final bool isIOSRequested = argResults['ios']; |
| |
| if (isAndroidRequested == isIOSRequested) { |
| // No flags provided, or both flags provided. Make Android and iOS host |
| // apps editable. |
| await _project.android.makeHostAppEditable(); |
| await _project.ios.makeHostAppEditable(); |
| } else if (isAndroidRequested) { |
| await _project.android.makeHostAppEditable(); |
| } else if (isIOSRequested) { |
| await _project.ios.makeHostAppEditable(); |
| } |
| |
| return null; |
| } |
| } |