import 'package:flutter/material.dart'; import '../themes/stack_colors.dart'; import '../utilities/text_styles.dart'; import '../utilities/util.dart'; import 'conditional_parent.dart'; import 'rounded_white_container.dart'; class DetailItem extends StatelessWidget { const DetailItem({ super.key, required this.title, required this.detail, this.button, this.overrideDetailTextColor, this.showEmptyDetail = true, this.horizontal = false, this.disableSelectableText = false, this.borderColor, this.expandDetail = false, }); final String title; final String detail; final Widget? button; final bool showEmptyDetail; final bool horizontal; final bool disableSelectableText; final Color? overrideDetailTextColor; final Color? borderColor; final bool expandDetail; @override Widget build(BuildContext context) { TextStyle detailStyle = STextStyles.w500_14(context); String _detail = detail; if (overrideDetailTextColor != null) { detailStyle = STextStyles.w500_14(context).copyWith( color: overrideDetailTextColor, ); } if (detail.isEmpty && showEmptyDetail) { _detail = "$title will appear here"; detailStyle = detailStyle.copyWith( color: Theme.of(context).extension()!.textSubtitle3, ); } return DetailItemBase( horizontal: horizontal, borderColor: borderColor, expandDetail: expandDetail, title: disableSelectableText ? Text( title, style: STextStyles.itemSubtitle(context), ) : SelectableText( title, style: STextStyles.itemSubtitle(context), ), detail: disableSelectableText ? Text( _detail, style: detailStyle, ) : SelectableText( _detail, style: detailStyle, ), ); } } class DetailItemBase extends StatelessWidget { const DetailItemBase({ super.key, required this.title, required this.detail, this.button, this.horizontal = false, this.borderColor, this.expandDetail = false, }); final Widget title; final Widget detail; final Widget? button; final bool horizontal; final Color? borderColor; final bool expandDetail; @override Widget build(BuildContext context) { return ConditionalParent( condition: !Util.isDesktop || borderColor != null, builder: (child) => RoundedWhiteContainer( padding: Util.isDesktop ? const EdgeInsets.all(16) : const EdgeInsets.all(12), borderColor: borderColor, child: child, ), child: ConditionalParent( condition: Util.isDesktop && borderColor == null, builder: (child) => Padding( padding: const EdgeInsets.all(16), child: child, ), child: horizontal ? Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ title, if (expandDetail) const SizedBox( width: 16, ), ConditionalParent( condition: expandDetail, builder: (child) => Expanded(child: child), child: detail, ), ], ) : Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ title, button ?? Container(), ], ), const SizedBox( height: 5, ), ConditionalParent( condition: expandDetail, builder: (child) => Expanded(child: child), child: detail, ), ], ), ), ); } }