38 lines
1.2 KiB
Dart
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',
|
|
};
|
|
}
|