build method

  1. @override
Widget build(
  1. BuildContext context,
  2. String text,
  3. GptMarkdownConfig config
)
override

Implementation

@override
Widget build(
  BuildContext context,
  String text,
  final GptMarkdownConfig config,
) {
  final List<Map<int, String>> value = text
      .split('\n')
      .map<Map<int, String>>(
        (e) => e
            .trim()
            .split('|')
            .where((element) => element.isNotEmpty)
            .toList()
            .asMap(),
      )
      .toList();

  int maxCol = 0;
  for (final each in value) {
    if (maxCol < each.keys.length) {
      maxCol = each.keys.length;
    }
  }
  if (maxCol == 0) {
    return Text("", style: config.style);
  }
  final controller = ScrollController();
  return Scrollbar(
    controller: controller,
    child: SingleChildScrollView(
      controller: controller,
      scrollDirection: Axis.horizontal,
      child: StaticTable(
          border: TableBorder(
              borderRadius: Theme.of(context).borderRadiusMd,
              bottom: BorderSide(
                  width: 1, color: Theme.of(context).colorScheme.border),
              left: BorderSide(
                  width: 1, color: Theme.of(context).colorScheme.border),
              right: BorderSide(
                  width: 1, color: Theme.of(context).colorScheme.border),
              top: BorderSide(
                  width: 1, color: Theme.of(context).colorScheme.border)),
          rows: [
            ...value
                .asMap()
                .entries
                .map((i) => TR(
                        column: List.generate(maxCol, (index) {
                      var e = i.value;
                      String data = e[index] ?? "";
                      if (RegExp(r"^:?--+:?$").hasMatch(data.trim()) ||
                          data.trim().isEmpty) {
                        return null;
                      }

                      return TD(MdWidget(
                        (e[index] ?? "").trim(),
                        false,
                        config: config,
                      ));
                    }).whereType<TD>().toList()))
                .where((tr) => tr.column.isNotEmpty)
          ]),
    ),
  );
}