commands property

  1. @override
NatrixBlock get commands
override

commands is a section that lists applicable sub-NatrixCommands.

Implementation

@override
NatrixBlock get commands {
  final List<NatrixCommand> commands = context.cmd.children.toList();
  if (commands.isEmpty) {
    return NatrixBlock.empty();
  }
  final List<NatrixText> lines = [];
  final List<NatrixCommand> sortable = List.of(commands);
  sortable.sort((a, b) => b.id.length.compareTo(a.id.length));
  const int space = 3;
  final int longestLength = sortable.first.id.length;

  for (final NatrixCommand cmd in commands) {
    String current = cmd.id;
    current += " " * (longestLength - current.length + space);
    final List<NatrixText> tips = NatrixText(
      cmd.tooltip,
    ).wrap(maxLineLength - current.length);
    for (int i = 0; i < tips.length; i++) {
      if (i == 0) {
        lines.add(NatrixText(current + tips[i].text));
        continue;
      }
      lines.add(NatrixText(" " * current.length + tips[i].text));
    }
  }
  return NatrixBlock(
    heading: NatrixText("Commands:", style: NatrixStyle.bold),
    content: NatrixStructure(
      spacePrefix: 1,
      sections: [NatrixColumn(lines: lines)],
    ),
  );
}