Flutter命令行表格生成插件cli_table的使用

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

Flutter命令行表格生成插件cli_table的使用

cli_table 是一个 Dart 包,它通过在终端中显示静态表格数据来增强用户体验。以下是该包的主要功能和一些使用示例。

Features

  • 在终端内以表格格式显示数据。
  • 提供易于使用的API。
  • 通过chalkdart对表头进行颜色/背景样式设置。
  • 自定义列宽。
  • 支持列和行单元格跨越。
  • 根据预定义宽度的内容截断。
  • 水平内容对齐(左/中/右)。
  • 垂直内容对齐(顶/中/底)。
  • 内边距(左右)。
  • 单词换行选项。
  • 每个单元格的自定义。

cli_table_preview1

Basic Example

import 'package:cli_table/cli_table.dart';

void main() {
  final table = Table(
    header: ['Rel', 'Change', "By", "When"], // Set headers
    columnWidths: [10, 20, 20, 30], // Optionally set column widths
  );

  // Table class extends dart List,
  // so you're free to use all the usual List methods
  table
    ..add(['v0.1', 'First test', 'someone@gmail.com', '9 minutes ago'])
    ..add(['v0.1', 'Second test', 'other@gmail.com', '13 minutes ago']);

  // Call `toString()` to render the final table for output
  print(table.toString());
}

Table Types and Layouts

Horizontal Tables

final table = Table(
  header: ['Index', 'Name'],
);

table.addAll([
  ['1.', 'First'],
  ['2.', 'Second'],
]);

print(table.toString());

Vertical Tables

final table = Table();

table.addAll([
  {'Some key': 'Some value'},
  {'Another key': 'Another value'},
]);

print(table.toString());

Cross Tables

final table = Table(header: ["", "Top Header 1", "Top Header 2"]);

table.addAll([
  {
    'Left Header 1': ['Value Row 1 Col 1', 'Value Row 1 Col 2']
  },
  {
    'Left Header 2': ['Value Row 2 Col 1', 'Value Row 2 Col 2']
  }
]);

print(table.toString());

Other Usage Examples with Different Table Options

Wrap Text on Word Boundaries

final table = Table(
  style: TableStyle(
    border: [], // Clear border style/color (default is ["gray"])
    header: [], // Clear header style/color (defaults to ['red'])
  ),
  columnWidths: [7, 9], // Requires fixed column widths
  wordWrap: true,
);

table.addAll([
  [
    'Hello how are you?',
    'I am fine thanks! Looooooong',
    ['Words that exceed', 'the columnWidth will', 'be truncated.'].join('\n'),
    ['Text is only', 'wrapped for', 'fixed width', 'columns.'].join('\n'),
  ]
]);

print(table.toString());

Use columnSpan to Span Columns

final table = Table();

table.addAll([
  [{'colSpan': 2, 'content': 'First'}], // Set custom column span
  [{'colSpan': 2, 'content': 'Second'}],
  ['Third', 'Fourth']
]);

Use rowSpan to Span Rows

final table = Table();

table.addAll([
  [
    {'rowSpan': 2, 'content': 'First'}, // Set custom row span
    {'rowSpan': 2, 'content': 'Second', 'vAlign': VerticalAlign.center}, // Set custom horizontal alignment
    'hello'
  ],
  ['howdy']
]);

Credits

示例代码

下面是一个更复杂的例子,展示了如何使用 cli_tablechalkdart 来创建一个带有样式和跨行/列功能的测试覆盖率报告。

import 'package:chalkdart/chalk.dart';
import 'package:cli_table/cli_table.dart';

void main() {
  // 1. Instantiate Table instance and set options
  final table = Table(
    header: [
      {
        'content': 'Test Coverage Report',
        'colSpan': 6,
        'hAlign': HorizontalAlign.center
      },
    ],
    style: TableStyle(header: ['blue']),
  );

  // 2. Add table data
  table.addAll([
    [
      'Module',
      'Component',
      'Test Cases',
      'Failures',
      'Durations',
      'Success Rate'
    ],
    [
      {
        'rowSpan': 2,
        'content': chalk.grey('Services'),
        'vAlign': VerticalAlign.center
      },
      'User',
      50,
      4,
      '3m 7s',
      chalk.bgGreen.black(' 92.0% ')
    ],
    ['Payment', 100, 80, '7m 15s', chalk.yellow(' 80.0% ')],
    [
      {
        'content': chalk.underline.grey('Subtotal'),
        'colSpan': 2,
        'hAlign': HorizontalAlign.right
      },
      150,
      84,
      '10m 22s',
      chalk.bgRed.black(' 38.3% ')
    ],
    [
      {
        'rowSpan': 2,
        'content': chalk.grey('Controllers'),
        'vAlign': VerticalAlign.center
      },
      'User',
      24,
      18,
      '1m 30s',
      chalk.yellow(' 75.0% ')
    ],
    ['Payment', 30, 2, '50s', chalk.bgGreen.black(' 98.9% ')],
    [
      {
        'content': chalk.underline.grey('Subtotal'),
        'colSpan': 2,
        'hAlign': HorizontalAlign.right
      },
      54,
      42,
      '2m 20s',
      chalk.yellow(' 77.3% ')
    ],
    [
      {
        'content': chalk.underline.bold('TOTAL'),
        'colSpan': 2,
        'hAlign': HorizontalAlign.right
      },
      chalk.bold(204),
      152,
      '12m 42s',
      chalk.yellow(' 74.5% ')
    ],
  ]);

  // 3. Output to console
  print(table.toString());
}

这个示例展示了如何使用 cli_table 创建一个详细的测试覆盖率报告,并利用 chalkdart 添加颜色和样式。希望这些信息对你有帮助!


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

1 回复

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


当然,下面是一个关于如何在Flutter项目中使用cli_table命令行表格生成插件的示例代码。cli_table插件虽然主要用于Dart命令行应用程序,但我们可以展示如何在Flutter项目的命令行工具部分(例如用于生成报表或日志)使用它。

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

dependencies:
  flutter:
    sdk: flutter
  cli_table: ^0.3.1  # 请检查最新版本号

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

接下来,你可以创建一个Dart脚本(比如generate_table.dart),在这个脚本中使用cli_table来生成表格。这里是一个简单的示例:

import 'package:cli_table3/cli_table3.dart';

void main() {
  // 创建一个CliTable实例
  final table = CliTable({
    'headers': ['Name', 'Age', 'Occupation'],
    'colWidths': [20, 10, 25],  // 可选:设置列宽
    'border': true,             // 可选:是否显示边框
  });

  // 添加行数据
  table.rows.add({'Name': 'Alice', 'Age': '30', 'Occupation': 'Engineer'});
  table.rows.add({'Name': 'Bob', 'Age': '25', 'Occupation': 'Designer'});
  table.rows.add({'Name': 'Charlie', 'Age': '35', 'Occupation': 'Teacher'});

  // 打印表格到控制台
  print(table.toString());
}

在这个示例中,我们首先导入了cli_table3包(注意:最新的包名可能是cli_table3而不是cli_table,请根据实际情况调整)。然后,我们创建了一个CliTable实例,并设置了表头、列宽和是否显示边框。接着,我们向表格中添加了几行数据,并最终打印出表格。

为了运行这个脚本,你可以在项目的根目录下打开终端,并运行:

dart path/to/generate_table.dart

path/to/generate_table.dart替换为你实际脚本的路径。运行后,你应该会在控制台中看到格式化的表格输出。

虽然这个示例是在一个单独的Dart脚本中运行的,但你可以根据需要在Flutter项目的其他部分(如命令行工具或后台任务)中集成和使用cli_table。注意,由于Flutter主要用于构建UI应用程序,因此在UI线程中直接使用此类命令行工具可能不太合适。通常,你会在Flutter应用的后台线程或脚本中使用它们来生成报告或日志,然后可能将这些信息显示在UI中或以文件形式保存。

回到顶部