当前位置: 首页 > article >正文

dart 控制台应用

前言

学了挺长时间flutter,最近才发现原来它也可以写控制台应用,而且很方便,这里学习记录一下。

环境

我用的flutter版本是2.5.1,用更高的也可以,用低的话就不支持空安全了。

创建工程

使用命令

dart create console_project

console_project是项目名字,这样就创建好了一个基本的console工程。工程中只有一个dart文件,为了方便我将它命名成main.dart , pubspec.yaml也要一起要改一下名字。main.dart文件中只有一个main函数。

创建命令

这里要用到两个重要的类CommandRunner和Command,Command用来定义一个命令,可以在 CommandRunner中添加多个Command。

class BuildCommand extends Command<void> {
  
  String get description => "build command";

  // 重要,build就是我们要运行的命令
  
  String get name => "build";

  BuildCommand() {
  	// todo 添加命令参数,下面说    
  }

  
  void run() {
    // todo 解析参数
  }
}

上面自定义的BuildCommand中有几个比较重要的方法,name指定这个命令的名称。
先添加上args库用来帮助我们解析命令,自己处理很麻烦

  args: ^2.0.0

下面举一个实际的例子,假设我们希望输入命令 commit --m “first commit” --all 时,能自动把所有文件添加到git仓库中,command就可以实现为

class CommitCommand extends Command<void> {
  @override
  String get description => "";

  @override
  String get name => "commit";

  CommitCommand() {
    argParser.addOption("m");
    argParser.addFlag('all', negatable: false);
  }

  @override
  void run() {
    String msg = argResults!['m'] as String;
    bool all = argResults!['all'] as bool;
    if (all){
    	runCommand('git add .', []);
    	runCommand('git commit -m ', [msg]);
	}
  }
}

在构造函数中添加参数,一般只需要添加两种,一种是Option, 例如argParser.addOption(“m”); 输入时对应的参数是 --m “first commit”,后面需要跟上它对应的参数;另一种是Flag, 例如argParser.addFlag(‘all’, negatable: false); 它输入对应的是–all,后面不需要带参数,表示一个bool型的值。
在run函数中,就可以将定义的option 和flag取出来了。

    String msg = argResults!['m'] as String;
    bool all = argResults!['all'] as bool;

上面的argParser和argResults都是定义在Command类中的。runCommand是我重新写的一个函数来执行终端命令,可以借助process_run这个库来运行终端命令。

定义好一个命令和对应的处理逻辑后,把它们添加到CommandRunner中,就可以运行了。

void main(List<String> arguments) {
  var runner = CommandRunner('dart_tool', "自定义命令行工具");
  runner.addCommand(CommitCommand());
  runner.addCommand(BuildCommand());

  runner.run(arguments).catchError((error) {
    print("error: $error");
  });
}

终端输入

dart bin/main.dart commit --m "first commit" --all 

就可以运行我们的命令了。如果输出错误的命令可以看到提示

➜  console-project git:(main) ✗ dart bin/main.dart buildbuild
error: Could not find a command named "buildbuild".

Usage: dart_tool <command> [arguments]

Global options:
-h, --help    Print this usage information.

Available commands:
  build    build command
  commit   git commit

Run "dart_tool help <command>" for more information about a command.

http://www.kler.cn/a/156306.html

相关文章:

  • 量化交易系统开发-实时行情自动化交易-3.4.1.2.A股交易数据
  • 【设计模式】行为型模式(二):策略模式、命令模式
  • 卓胜微嵌入式面试题及参考答案(2万字长文)
  • Python 随笔
  • 相机光学(四十二)——sony的HDR技术
  • 实现一个BLE HID鼠标
  • 小程序如何刷新当前页面?
  • SQL server 2016安装
  • IEEE 机器人最优控制开源库 Model-based Optimization for Robotics
  • 【开源】基于JAVA的校园电商物流云平台
  • 【C++】sizeof()、strlen()、length()\以及size()用法区别
  • 【每日一题】1038. 从二叉搜索树到更大和树-2023.12.4
  • python-GC机制、装饰器、生成器、迭代器、三元表达式、列表生成式、生成器表达式、函数递归、面向对象、
  • 【数据结构】八大排序 (三)
  • 如何精准操作无人机自动停机坪?
  • (c语言进阶)作业讲解
  • Docker pull 命令
  • 网件R8500 trojan
  • 技术前沿丨Teranode如何实现无限扩容
  • 36、红外遥控(外部中断)
  • 数据库事务的隔离级别
  • PyQt实战 创建一个PyQt5项目
  • 【算法】滑动窗口题单——5.多指针滑动窗口⭐
  • LabVIEW通过编程将图形类控件的X轴显示为时间戳
  • easyrecovery2024绿色版中文语言电脑数据恢复工具
  • 网络层之SDN基本概念、路由算法和路由协议