tex_text.dart 1.92 KB
library tex_text;

import 'package:flutter/material.dart';
import 'package:flutter_math_fork/flutter_math.dart';
export 'package:flutter_math_fork/flutter_math.dart';

/// A LaTex text view.
class TexText extends StatelessWidget {
  const TexText(this.text,
      {super.key,
      this.style,
      this.mathStyle = MathStyle.display,
      this.alignment = WrapAlignment.start});
  final String text;
  final TextStyle? style;
  final MathStyle mathStyle;
  final WrapAlignment alignment;

  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisSize: MainAxisSize.min,
      crossAxisAlignment: CrossAxisAlignment.values[alignment.index % 3],
      children: text.split('\n').map<Widget>(
        (e) {
          return Wrap(
            alignment: alignment,
            crossAxisAlignment: WrapCrossAlignment.center,
            spacing: 4,
            children: e
                .split("<m>")
                .asMap()
                .map<int, List<Widget>>(
                  (index, e) {
                    if (index.isOdd) {
                      return MapEntry(
                        index,
                        [
                          Math.tex(
                            e,
                            textStyle: style,
                            mathStyle: mathStyle,
                          ),
                        ],
                      );
                    }
                    return MapEntry(
                      index,
                      e.split(" ").map<Widget>((e) {
                        return Text(
                          e,
                          style: style,
                        );
                      }).toList(),
                    );
                  },
                )
                .values
                .toList()
                .expand<Widget>((element) => element)
                .toList(),
          );
        },
      ).toList(),
    );
  }
}