Flutter命令行工具插件darted_cli的使用

发布于 1周前 作者 eggper 来自 Flutter

Flutter命令行工具插件darted_cli的使用

darted_cli 是一个强大且开发者友好的Dart包,用于构建功能丰富、结构化的命令行界面(CLI)。它简化了创建命令树、解析参数和标志、处理输入验证的过程,专注于开发者的体验和易用性。

目录

  1. 特性
  2. 安装
  3. 使用
  4. 开发者体验
  5. 特性和请求
  6. 许可证

特性

  • 命令树验证:确保命令遵循层次结构并验证父子关系。
  • 参数解析:支持命名和多选项参数及默认值。
  • 标志解析:处理布尔标志及其否定形式(如 --no-flag)。
  • 调用栈管理:按执行顺序跟踪命令、参数和标志。
  • 错误处理:提供无效命令、参数或标志的描述性错误。
  • 帮助和版本标志:内置对 --help--version 标志的支持。
  • 控制台管理:显示带颜色和样式的格式化输出。
  • 可扩展性:轻松添加自定义命令、参数和标志。
  • 可定制响应:为无效输入定义自定义错误消息。
  • 交互式CLI:为命令生成动态帮助文本。
  • 开发者友好:专注于易用性,减少样板代码。

安装

在您的 pubspec.yaml 文件中添加以下内容:

dependencies:
  darted_cli: [latest_version]

然后运行:

dart pub get

使用

1. 定义您的命令

使用树结构定义您的CLI命令:

import 'package:darted_cli/darted_cli.dart';

final List<DartedCommand> commandsTree = [
  DartedCommand(
    name: 'create',
    helperDescription: "This will create something..",
    arguments: [
      DartedArgument(name: 'name', abbreviation: 'n', defaultValue: 'new_flutter_project', isMultiOption: false),
      DartedArgument(name: 'platforms', abbreviation: 'p', acceptedMultiOptionValues: 'android,ios,web', isMultiOption: true, optionsSeparator: ','),
    ],
    flags: [
      DartedFlag.help,
      DartedFlag(name: 'package', abbreviation: 'pa', canBeNegated: false, appliedByDefault: true),
      DartedFlag(name: 'solo', abbreviation: 's', canBeNegated: true, appliedByDefault: false),
    ],
    callback: (arguments, flags) => ConsoleHelper.write(
      '${'This command is ' 'create'.withColor(ConsoleColor.green)} I have the arguments: $arguments, and the flags: $flags',
    ),
    subCommands: [
      DartedCommand(
        name: 'a_sub_command',
        helperDescription: "A sub command for create..",
        callback: (arguments, flags) {
          ConsoleHelper.getUserInput(promptBuilder: (def, secToTimeout) => 'Give me your name!');
          ConsoleHelper.confirm(prompt: 'Are you absolutely sure??', acceptedAffirmatives: ['Yea']);
          ConsoleHelper.executeCommand('flutter doctor -v');
          List<int> theGottenChoices = ConsoleHelper.chooseOption(
            'Choose an option',
            ['Option 1', 'Option 2', 'Option 3'],
            isMultiSelect: true,
            unselectedIndicator: "[]",
            selectedIndicator: "[x]",
            selectionIndicator: "->",
          );
          ConsoleHelper.write('Got the choices: $theGottenChoices');
        },
      ),
    ],
  ),
  DartedCommand(name: 'another_command', callback: (arguments, flags) {}, helperDescription: "Another top level command...")
];

2. 扩展您的回调能力

控制台助手

ConsoleHelper.getUserInput(promptBuilder: (defValue, timeout) => 'enter something...');
ConsoleHelper.write("Here's an output!...");

I/O 助手

IOHelper.list('lib');
IOHelper.files.findAdvanced('lib', RegExp(r'*.yaml'));
IOHelper.files.search('lib', RegExp(r'someWord'), exclude: [main.dart], ignoreHidden: true);

3. 执行它

创建主入口点:

void main(List<String> input) async => await dartedEntry(
  input: input,
  commandsTree: commandsTree,
  customEntryHelper: (tree) async {
    return await AsciiArtModule.textToAscii('DARTED', beforeEachLine: "|  ");
  },
  customVersionResponse: () => "when i get -v, here's a response!",
  customHelpResponse: () => 'custom response for the -h flag?'.withColor(ConsoleColor.cyan),
);

// 用户输入示例
// dart run my_package create --name project_name -p android,ios
// 输出:
// Command: create
// Arguments: { name: project_name, platforms: [android, ios] }
// Flags: { package: true, solo: false }

开发者体验

darted_cli 设计时考虑到了开发者的需求,提供了简便的设置、最小化样板代码、高度可定制性以及交互式调试等功能。

为什么选择 darted_cli

  • 节省时间:无需重新实现解析逻辑或验证检查。
  • 专注逻辑:集中精力于CLI应用程序的功能。
  • 可靠的框架:适用于简单和复杂的CLI需求。

特性和请求

  • ✅ 添加自定义ASCII艺术字体。
  • ✅ 添加命令执行功能。
  • ✅ 添加提示选择选项。
  • ❌ 添加编译选项。
  • ❌ 添加更多动画加载器。

许可证

根据MIT许可证授权。您可以自由使用、修改和分发此软件包。


这个Markdown文档详细介绍了如何使用 `darted_cli` 插件来创建功能丰富的命令行工具,并包含了完整的示例代码以供参考。希望这对您有所帮助!

更多关于Flutter命令行工具插件darted_cli的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter命令行工具插件darted_cli的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何使用Flutter命令行工具插件darted_cli的示例代码案例。假设你已经有一个Flutter项目,并且你已经将darted_cli作为依赖项添加到了你的pubspec.yaml文件中。

首先,确保你已经在pubspec.yaml文件中添加了darted_cli依赖:

dependencies:
  flutter:
    sdk: flutter
  darted_cli: ^最新版本号  # 请替换为实际的最新版本号

然后,运行flutter pub get来安装依赖。

接下来,你可以在你的Flutter项目中创建一个命令行工具脚本。例如,在lib目录下创建一个新的Dart文件,比如cli_tool.dart

// lib/cli_tool.dart
import 'package:darted_cli/darted_cli.dart';

void main(List<String> arguments) {
  // 定义命令行参数
  final cli = Cli()
    ..addCommand(
      Command('greet', 'Greets the user')
        ..addOption(
          Option('name', 'The name of the user to greet', abbr: 'n')
            ..required = true,
        )
        ..onRun((context) {
          final name = context.arguments['name'] as String;
          print('Hello, $name!');
        }),
    )
    ..addCommand(
      Command('farewell', 'Bids farewell to the user')
        ..addOption(
          Option('name', 'The name of the user to bid farewell to', abbr: 'n')
            ..required = true,
        )
        ..onRun((context) {
          final name = context.arguments['name'] as String;
          print('Goodbye, $name.');
        }),
    );

  // 运行命令行工具
  cli.run(arguments);
}

在这个示例中,我们定义了两个命令:greetfarewell。每个命令都接受一个名为name的选项,这是必需的。

接下来,你需要一个方式来运行这个命令行工具。由于darted_cli是为Dart命令行应用设计的,你不能直接从Flutter应用中运行它(因为Flutter应用通常运行在Dart VM Service Protocol之上,而不是直接的命令行环境中)。但是,你可以将这部分代码作为一个独立的Dart脚本运行。

你可以通过创建一个bin目录并在其中创建一个新的Dart文件(比如main.dart),然后将上面的代码复制进去,来实现这一点:

// bin/main.dart
// 内容与 lib/cli_tool.dart 相同

然后,你可以通过命令行运行这个脚本:

dart bin/main.dart greet -n John
dart bin/main.dart farewell -n Jane

这将输出:

Hello, John!
Goodbye, Jane.

请注意,darted_cli是一个用于创建命令行应用的库,而不是专门为Flutter设计的。因此,上面的示例更适合作为一个独立的Dart命令行应用来运行,而不是直接在Flutter应用中运行。如果你需要在Flutter应用中集成命令行功能,你可能需要考虑其他方法,比如使用平台通道与原生代码交互,或者将命令行工具作为一个独立的进程来运行并与Flutter应用进行通信。

回到顶部