From a3a574de5b50f9b6a5e7ba83024819fde4a388aa Mon Sep 17 00:00:00 2001 From: Levi Lesches Date: Thu, 10 Apr 2025 03:56:34 -0400 Subject: [PATCH 1/3] Added -r --rotation option --- lib/src/cli/commands/run.dart | 6 +++++- lib/src/cli/flutterpi_command.dart | 12 ++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/lib/src/cli/commands/run.dart b/lib/src/cli/commands/run.dart index 155746c..a2e8755 100644 --- a/lib/src/cli/commands/run.dart +++ b/lib/src/cli/commands/run.dart @@ -12,6 +12,7 @@ class RunCommand extends fltool.RunCommand with FlutterpiCommandMixin { usesDeviceManager(); usesEngineFlavorOption(); usesDebugSymbolsOption(); + usesRotationOption(); } @protected @@ -39,7 +40,10 @@ class RunCommand extends fltool.RunCommand with FlutterpiCommandMixin { @override Future runCommand() async { await populateCache(); - + // Using ! here because [usesRotationOption] only allows 0, 90, 180, and 270. + final rotation = int.tryParse(stringArg("rotation")!)!; + print("You asked for a rotation of $rotation"); + throw "All done"; return super.runCommand(); } } diff --git a/lib/src/cli/flutterpi_command.dart b/lib/src/cli/flutterpi_command.dart index 164d78a..7913bdd 100644 --- a/lib/src/cli/flutterpi_command.dart +++ b/lib/src/cli/flutterpi_command.dart @@ -290,6 +290,18 @@ mixin FlutterpiCommandMixin on FlutterCommand { ); } + void usesRotationOption() { + argParser.addOption( + "rotation", + abbr: "r", + help: "Start the app with this rotation. This is just an " + "alternative, more intuitive way to specify the " + "startup orientation. The angle is in degrees and clock-wise", + allowed: ["0", "90", "180", "270"], + defaultsTo: "0", + ); + } + bool getIncludeDebugSymbols() { return boolArg('debug-symbols'); } From 66df74ac6f3209f2a4ae2e7bfa4e169a2f175c7c Mon Sep 17 00:00:00 2001 From: Levi Lesches Date: Thu, 10 Apr 2025 04:10:25 -0400 Subject: [PATCH 2/3] Pass --rotation to flutter-pi --- lib/src/cli/commands/run.dart | 4 ---- lib/src/cli/flutterpi_command.dart | 14 ++++++++++++++ lib/src/config.dart | 2 ++ lib/src/devices/flutterpi_ssh/device.dart | 6 ++++++ .../devices/flutterpi_ssh/device_discovery.dart | 1 + 5 files changed, 23 insertions(+), 4 deletions(-) diff --git a/lib/src/cli/commands/run.dart b/lib/src/cli/commands/run.dart index a2e8755..5fb5313 100644 --- a/lib/src/cli/commands/run.dart +++ b/lib/src/cli/commands/run.dart @@ -40,10 +40,6 @@ class RunCommand extends fltool.RunCommand with FlutterpiCommandMixin { @override Future runCommand() async { await populateCache(); - // Using ! here because [usesRotationOption] only allows 0, 90, 180, and 270. - final rotation = int.tryParse(stringArg("rotation")!)!; - print("You asked for a rotation of $rotation"); - throw "All done"; return super.runCommand(); } } diff --git a/lib/src/cli/flutterpi_command.dart b/lib/src/cli/flutterpi_command.dart index 7913bdd..2eac16e 100644 --- a/lib/src/cli/flutterpi_command.dart +++ b/lib/src/cli/flutterpi_command.dart @@ -174,6 +174,18 @@ mixin FlutterpiCommandMixin on FlutterCommand { return remote.contains('@') ? remote.split('@').first : null; } + int get rotation { + final rotationString = stringArg('rotation'); + if (rotationString == null) { + return 0; + } + final rotationInt = int.tryParse(rotationString); + if (rotationInt == null) { + usageException("Invalid --rotation: Expected an integer in degrees. "); + } + return rotationInt; + } + final _contextOverrides = {}; void addContextOverride(dynamic Function() fn) { @@ -249,6 +261,7 @@ mixin FlutterpiCommandMixin on FlutterCommand { fs: globals.fs, logger: globals.logger, platform: globals.platform, + rotation: rotation, ), deviceId: stringArg(FlutterGlobalOptions.kDeviceIdOption, global: true), ), @@ -443,6 +456,7 @@ mixin FlutterpiCommandMixin on FlutterCommand { fs: globals.fs, logger: globals.logger, platform: globals.platform, + rotation: rotation, ), BuildTargets: () => const BuildTargetsImpl(), ApplicationPackageFactory: () => FlutterpiApplicationPackageFactory(), diff --git a/lib/src/config.dart b/lib/src/config.dart index 9495a9e..a832a18 100644 --- a/lib/src/config.dart +++ b/lib/src/config.dart @@ -77,6 +77,7 @@ class FlutterPiToolConfig { required this.fs, required this.logger, required this.platform, + required this.rotation, }) : _config = Config( 'flutterpi_tool_config', fileSystem: fs, @@ -88,6 +89,7 @@ class FlutterPiToolConfig { final Logger logger; final Platform platform; final Config _config; + final int rotation; List getDevices() { final entries = _config.getValue('devices'); diff --git a/lib/src/devices/flutterpi_ssh/device.dart b/lib/src/devices/flutterpi_ssh/device.dart index d13aab7..8ed7a8d 100644 --- a/lib/src/devices/flutterpi_ssh/device.dart +++ b/lib/src/devices/flutterpi_ssh/device.dart @@ -4,6 +4,7 @@ import 'dart:io'; import 'package:flutterpi_tool/src/build_system/build_app.dart'; import 'package:flutterpi_tool/src/cache.dart'; import 'package:flutterpi_tool/src/common.dart'; +import 'package:flutterpi_tool/src/config.dart'; import 'package:flutterpi_tool/src/fltool/common.dart'; import 'package:flutterpi_tool/src/fltool/globals.dart'; import 'package:flutterpi_tool/src/more_os_utils.dart'; @@ -109,6 +110,7 @@ class FlutterpiSshDevice extends Device { required String id, required this.name, required this.sshUtils, + required this.config, required String? remoteInstallPath, required this.logger, required this.os, @@ -129,6 +131,7 @@ class FlutterpiSshDevice extends Device { final Logger logger; final FlutterpiCache cache; final MoreOperatingSystemUtils os; + final FlutterPiToolConfig config; final runningApps = {}; final logReaders = {}; @@ -330,6 +333,7 @@ class FlutterpiSshDevice extends Device { required String flutterpiExe, required String bundlePath, required BuildMode runtimeMode, + required int rotation, Iterable engineArgs = const [], Iterable dartCmdlineArgs = const [], }) { @@ -346,6 +350,7 @@ class FlutterpiSshDevice extends Device { '--dimensions', '$width,$height', ], + "--rotation", rotation.toString(), if (runtimeModeArg != null) runtimeModeArg, bundlePath, ...engineArgs, @@ -495,6 +500,7 @@ class FlutterpiSshDevice extends Device { flutterpiExe: flutterpiExePath, bundlePath: remoteInstallPath, runtimeMode: debuggingOptions.buildInfo.mode, + rotation: config.rotation, engineArgs: [ ...engineArgs, if (debuggingOptions.deviceVmServicePort == null) diff --git a/lib/src/devices/flutterpi_ssh/device_discovery.dart b/lib/src/devices/flutterpi_ssh/device_discovery.dart index 63642e7..f897198 100644 --- a/lib/src/devices/flutterpi_ssh/device_discovery.dart +++ b/lib/src/devices/flutterpi_ssh/device_discovery.dart @@ -47,6 +47,7 @@ class FlutterpiSshDeviceDiscovery extends PollingDeviceDiscovery { os: os, explicitDisplaySizeMillimeters: configEntry.displaySizeMillimeters, explicitDevicePixelRatio: null, + config: config, ); } From 856714a724038ae78040aa0196ac5e2c52f7ecb7 Mon Sep 17 00:00:00 2001 From: Levi Lesches Date: Thu, 10 Apr 2025 04:13:35 -0400 Subject: [PATCH 3/3] Use single quotes --- lib/src/cli/flutterpi_command.dart | 16 ++++++++-------- lib/src/devices/flutterpi_ssh/device.dart | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/lib/src/cli/flutterpi_command.dart b/lib/src/cli/flutterpi_command.dart index 2eac16e..ffc3f54 100644 --- a/lib/src/cli/flutterpi_command.dart +++ b/lib/src/cli/flutterpi_command.dart @@ -181,7 +181,7 @@ mixin FlutterpiCommandMixin on FlutterCommand { } final rotationInt = int.tryParse(rotationString); if (rotationInt == null) { - usageException("Invalid --rotation: Expected an integer in degrees. "); + usageException('Invalid --rotation: Expected an integer in degrees. '); } return rotationInt; } @@ -305,13 +305,13 @@ mixin FlutterpiCommandMixin on FlutterCommand { void usesRotationOption() { argParser.addOption( - "rotation", - abbr: "r", - help: "Start the app with this rotation. This is just an " - "alternative, more intuitive way to specify the " - "startup orientation. The angle is in degrees and clock-wise", - allowed: ["0", "90", "180", "270"], - defaultsTo: "0", + 'rotation', + abbr: 'r', + help: 'Start the app with this rotation. This is just an ' + 'alternative, more intuitive way to specify the ' + 'startup orientation. The angle is in degrees and clock-wise', + allowed: ['0', '90', '180', '270'], + defaultsTo: '0', ); } diff --git a/lib/src/devices/flutterpi_ssh/device.dart b/lib/src/devices/flutterpi_ssh/device.dart index 8ed7a8d..7e00d70 100644 --- a/lib/src/devices/flutterpi_ssh/device.dart +++ b/lib/src/devices/flutterpi_ssh/device.dart @@ -350,7 +350,7 @@ class FlutterpiSshDevice extends Device { '--dimensions', '$width,$height', ], - "--rotation", rotation.toString(), + '--rotation', rotation.toString(), if (runtimeModeArg != null) runtimeModeArg, bundlePath, ...engineArgs,