Flutter命令行工具插件darted_cli的使用
Flutter命令行工具插件darted_cli的使用
darted_cli
是一个强大且开发者友好的Dart包,用于构建功能丰富、结构化的命令行界面(CLI)。它简化了创建命令树、解析参数和标志、处理输入验证的过程,专注于开发者的体验和易用性。
目录
特性
- 命令树验证:确保命令遵循层次结构并验证父子关系。
- 参数解析:支持命名和多选项参数及默认值。
- 标志解析:处理布尔标志及其否定形式(如
--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
更多关于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);
}
在这个示例中,我们定义了两个命令:greet
和farewell
。每个命令都接受一个名为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应用进行通信。