38 lines
1.2 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter_widget_from_html/flutter_widget_from_html.dart';
/// Rendu d'un champ traduit. Tous les champs saisis dans le manager passent par
/// l'éditeur riche : leur valeur est du HTML, titres compris.
///
/// La marge par défaut des `<p>` est neutralisée pour que le bloc s'aligne comme
/// un `Text` à la place duquel il est posé.
class HtmlText extends StatelessWidget {
const HtmlText(this.html, {super.key, this.style, this.textAlign});
final String html;
/// Par défaut, le style ambiant — celui que `ListTile` applique à son titre,
/// par exemple.
final TextStyle? style;
final TextAlign? textAlign;
@override
Widget build(BuildContext context) {
return HtmlWidget(
html,
textStyle: style ?? DefaultTextStyle.of(context).style,
customStylesBuilder: (_) => {
'margin': '0',
if (textAlign != null) 'text-align': _cssAlign(textAlign!),
},
);
}
static String _cssAlign(TextAlign align) => switch (align) {
TextAlign.center => 'center',
TextAlign.right || TextAlign.end => 'right',
TextAlign.justify => 'justify',
_ => 'left',
};
}