/// Widget: Description Item /// /// Displays a label-value pair for design request details. library; import 'package:flutter/material.dart'; import 'package:flutter_html/flutter_html.dart'; /// Description Item Widget /// /// Shows a label and value pair with: /// - Inline layout (label: value) for single line /// - Stacked layout for multi-line values /// - HTML rendering support for rich text content /// - Theme-aware colors class DescriptionItem extends StatelessWidget { const DescriptionItem({ super.key, required this.label, required this.value, this.isMultiLine = false, this.isHtml = false, }); final String label; final String value; final bool isMultiLine; final bool isHtml; Widget _buildValueWidget(BuildContext context) { final colorScheme = Theme.of(context).colorScheme; if (isHtml) { return Html( data: value, style: { 'body': Style( fontSize: FontSize(15), color: colorScheme.onSurface, fontWeight: FontWeight.w500, lineHeight: const LineHeight(1.6), margin: Margins.zero, padding: HtmlPaddings.zero, ), 'p': Style( margin: Margins.only(bottom: 8), ), 'ul': Style( margin: Margins.only(left: 16, bottom: 8), ), 'ol': Style( margin: Margins.only(left: 16, bottom: 8), ), 'li': Style( margin: Margins.only(bottom: 4), ), }, ); } return Text( value, style: TextStyle( fontSize: 15, color: colorScheme.onSurface, fontWeight: FontWeight.w500, height: 1.6, ), ); } @override Widget build(BuildContext context) { final colorScheme = Theme.of(context).colorScheme; if (isMultiLine) { return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( label, style: TextStyle( fontSize: 13, color: colorScheme.onSurfaceVariant, fontWeight: FontWeight.w500, ), ), const SizedBox(height: 4), _buildValueWidget(context), ], ); } return Container( padding: const EdgeInsets.only(bottom: 12), decoration: BoxDecoration( border: Border( bottom: BorderSide(color: colorScheme.surfaceContainerHighest), ), ), child: Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ SizedBox( width: 120, child: Text( label, style: TextStyle( fontSize: 13, color: colorScheme.onSurfaceVariant, fontWeight: FontWeight.w500, ), ), ), Expanded( child: _buildValueWidget(context), ), ], ), ); } }