Capp - پکیج برنامه کنسول

pub package Dev Donate

Capp یک پکیج قدرتمند Dart است که برای ساده‌سازی توسعه برنامه‌های کنسول تعاملی با ویژگی‌هایی برای مدیریت ورودی‌های کاربر، تولید اطلاعات راهنما، مدیریت آرگومان‌ها و ایجاد خروجی‌های ساختاریافته مانند جداول و نشانگرهای پیشرفت طراحی شده است.

المان‌ها

  • نشانگرهای پیشرفت
  • فیلدهای ورودی بله/خیر
  • فیلدهای ورودی متن/عدد
  • فیلدهای ورودی چندگزینه‌ای
  • انتخابگرهای چندگزینه‌ای
  • نمایش جدول
  • نمایشگر Json

ویژگی‌ها

  • مدیریت آرگومان و گزینه: تعریف و مدیریت آسان آرگومان‌ها و گزینه‌های خط فرمان.
  • مدیریت ورودی کاربر: پشتیبانی از خواندن ورودی‌های کاربر با پیام‌ها و گزینه‌های انتخابی.
  • خروجی ساختاریافته: نمایش جداول، پیام‌ها به صورت رنگی و نشانگرهای پیشرفت مختلف در کنسول.
  • تولید راهنما: تولید خودکار راهنمای کمک برای دستورات و گزینه‌های کنسول شما.

شروع به کار

  1. capp را به pubspec.yaml خود اضافه کنید.
  2. package:capp/capp.dart را import کنید.
  3. دستورات، گزینه‌ها و ورودی‌های کاربر را برای ساخت برنامه کنسول تعاملی خود ایجاد کنید.

مثال استفاده

import "package:capp/capp.dart";

void main([
  List<String> args = const [],
]) {
  var app = CappManager(
    main: CappController(
      '',
      options: [
        CappOption(
          name: 'help',
          shortName: 'h',
          description: 'Show help',
        ),
      ],
      run: (c) async {
        if (c.existsOption('help')) {
          return CappConsole(c.manager.getHelp());
        } else {
          return test(c);
        }
      },
    ),
    args: args,
    controllers: [
      CappController(
        'test',
        options: [],
        run: test,
      ),
    ],
  );

  app.process();
}

Future<CappConsole> test(c) async {
  const options = [
    'Progress circle',
    'Progress bar',
    'Progress spinner',
    'Yes/No questions',
    'Input text',
    'Make a table',
    'Clear screen',
    'Help',
    'Exit',
  ];
  var select = CappConsole.select(
    'Select an option to test Widgets of console:',
    options,
  );
  CappConsole.write('Your selection is: $select', CappColors.success);

  // Progress circle
  if (select == options[0]) {
    await CappConsole.progress(
      'I am waiting here for 5 secounds!',
      () async => Future.delayed(Duration(seconds: 5)),
      type: CappProgressType.circle,
    );
  }
  // Progress bar
  else if (select == options[1]) {
    await CappConsole.progress(
      'I am waiting here for 5 secounds!',
      () async => Future.delayed(Duration(seconds: 5)),
      type: CappProgressType.bar,
    );
  }
  // Progress spinner
  else if (select == options[2]) {
    await CappConsole.progress(
      'I am waiting here for 5 secounds!',
      () async => Future.delayed(Duration(seconds: 5)),
      type: CappProgressType.spinner,
    );
  }
  // Yes/No Questions
  else if (select == options[3]) {
    final res = await CappConsole.yesNo('Do you agree? ');
    CappConsole.write(
      "Your answer is ${res ? 'YES' : 'NO'}",
      CappColors.warning,
    );
  }
  // Input text
  else if (select == options[4]) {
    var age = CappConsole.read(
      'What is your age?',
      isRequired: true,
      isNumber: true,
    );

    CappConsole.write(
      "Your age is: $age",
      CappColors.success,
    );
  }
  // Make a table
  else if (select == options[5]) {
    const table = [
      ['#', 'Name', 'Age', 'City', 'Job'],
      ['1', 'Farhad', '38', 'Amsterdam', 'Engineer'],
      ['2', 'Adrian', '25', 'Berlin', 'Teacher'],
      ['3', 'Arian', '33', 'Frankfort', 'Taxi driver']
    ];

    CappConsole.writeTable(table);

    CappConsole.writeTable(
      table,
      color: CappColors.warning,
      dubleBorder: true,
    );
  }
  // Clear Screen
  else if (select == options[6]) {
    CappConsole.clear();
  }
  // Help
  else if (select == options[7]) {
    CappConsole.write(c.manager.getHelp());
  } else if (select == options.last) {
    return CappConsole('Exit!');
  }

  return test(c);
}

مثال خروجی

$ dart ./example/example.dart


Select an option to test Widgets of console:

  [1]. Progress circle
  [2]. Progress bar
  [3]. Progress spinner
  [4]. Yes/No questions
  [5]. Input text
  [6]. Make a table
  [7]. Clear screen
  [8]. Help
  [9]. Exit


Enter the number of the option: 1
Your selection is: Progress circle
I am waiting here for 5 secounds!               ⢿                            


Select an option to test Widgets of console:

  [1]. Progress circle
  [2]. Progress bar
  [3]. Progress spinner
  [4]. Yes/No questions
  [5]. Input text
  [6]. Make a table
  [7]. Clear screen
  [8]. Help
  [9]. Exit


Enter the number of the option: 2
Your selection is: Progress bar
I am waiting here for 5 secounds! █████░████████                            


Select an option to test Widgets of console:

  [1]. Progress circle
  [2]. Progress bar
  [3]. Progress spinner
  [4]. Yes/No questions
  [5]. Input text
  [6]. Make a table
  [7]. Clear screen
  [8]. Help
  [9]. Exit


Enter the number of the option: 3
Your selection is: Progress spinner
I am waiting here for 5 secounds! |----->-------|                          


Select an option to test Widgets of console:

  [1]. Progress circle
  [2]. Progress bar
  [3]. Progress spinner
  [4]. Yes/No questions
  [5]. Input text
  [6]. Make a table
  [7]. Clear screen
  [8]. Help
  [9]. Exit


Enter the number of the option: 4
Your selection is: Yes/No questions


Do you agree?  (y/n): N
Your answer is NO


Select an option to test Widgets of console:

  [1]. Progress circle
  [2]. Progress bar
  [3]. Progress spinner
  [4]. Yes/No questions
  [5]. Input text
  [6]. Make a table
  [7]. Clear screen
  [8]. Help
  [9]. Exit


Enter the number of the option: 5
Your selection is: Input text


What is your age? 33
Your age is: 33


Select an option to test Widgets of console:

  [1]. Progress circle
  [2]. Progress bar
  [3]. Progress spinner
  [4]. Yes/No questions
  [5]. Input text
  [6]. Make a table
  [7]. Clear screen
  [8]. Help
  [9]. Exit


Enter the number of the option: 5
Your selection is: Input text


What is your age? 33
Your age is: 33


Select an option to test Widgets of console:

  [1]. Progress circle
  [2]. Progress bar
  [3]. Progress spinner
  [4]. Yes/No questions
  [5]. Input text
  [6]. Make a table
  [7]. Clear screen
  [8]. Help
  [9]. Exit


Enter the number of the option: 6
Your selection is: Make a table
┌───┬────────┬─────┬────────────┬─────────────┐
│ # │  Name  │ Age │    City    │     Job     │
├───┼────────┼─────┼────────────┼─────────────┤
│ 1 │ Farhad │ 38  │ Amsterdam  │ Engineer    │
├───┼────────┼─────┼────────────┼─────────────┤
│ 2 │ Adrian │ 25  │ Berlin     │ Teacher     │
├───┼────────┼─────┼────────────┼─────────────┤
│ 3 │ Arian  │ 33  │ Frankfort  │ Taxi driver │
└───┴────────┴─────┴────────────┴─────────────┘

╔═══╦════════╦═════╦════════════╦═════════════╗
║ # ║  Name  ║ Age ║    City    ║     Job     ║
╠═══╬════════╬═════╬════════════╬═════════════╣
║ 1 ║ Farhad ║ 38  ║ Amsterdam  ║ Engineer    ║
╠═══╬════════╬═════╬════════════╬═════════════╣
║ 2 ║ Adrian ║ 25  ║ Berlin     ║ Teacher     ║
╠═══╬════════╬═════╬════════════╬═════════════╣
║ 3 ║ Arian  ║ 33  ║ Frankfort  ║ Taxi driver ║
╚═══╩════════╩═════╩════════════╩═════════════╝



Select an option to test Widgets of console:

  [1]. Progress circle
  [2]. Progress bar
  [3]. Progress spinner
  [4]. Yes/No questions
  [5]. Input text
  [6]. Make a table
  [7]. Clear screen
  [8]. Help
  [9]. Exit


Enter the number of the option: 8
Your selection is: Help
Available commands:
1) test:
──────────────────────────────


      --help    Show help
      -h
──────────────────────────────