mobileCard static method
Widget
mobileCard(
- BuildContext context, {
- required String title,
- required List<
UAdminField> fields, - Widget? leading,
- IconData? icon,
- String? subtitle,
- Widget? badge,
- Widget? trailing,
- VoidCallback? onTap,
Implementation
static Widget mobileCard(
BuildContext context, {
required String title,
required List<UAdminField> fields,
Widget? leading,
IconData? icon,
String? subtitle,
Widget? badge,
Widget? trailing,
VoidCallback? onTap,
}) {
final ColorScheme scheme = Theme.of(context).colorScheme;
final Widget card = UContainer(
margin: const EdgeInsets.symmetric(vertical: 6, horizontal: 2),
padding: const EdgeInsets.all(14),
radius: 16,
color: scheme.surface,
border: Border.all(color: scheme.outlineVariant.withValues(alpha: 0.5)),
boxShadow: <BoxShadow>[BoxShadow(color: scheme.shadow.withValues(alpha: 0.06), blurRadius: 12, offset: const Offset(0, 4))],
child: UColumn(
spacing: 0,
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
URow(
spacing: 12,
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
leading ?? leadingIcon(context, icon ?? Icons.circle_outlined),
Expanded(
child: UColumn(
spacing: 2,
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
UTextTitleSmall(title, maxLines: 2, overflow: TextOverflow.ellipsis, fontWeight: FontWeight.w700),
if (subtitle.isNotNullOrEmpty()) UTextBodySmall(subtitle!, color: scheme.onSurfaceVariant, maxLines: 1, overflow: TextOverflow.ellipsis),
],
),
),
?badge,
?trailing,
],
),
if (fields.isNotEmpty) ...<Widget>[
Padding(
padding: const EdgeInsets.symmetric(vertical: 12),
child: Divider(height: 1, color: scheme.outlineVariant.withValues(alpha: 0.4)),
),
...fields.mapIndexed(
(int idx, UAdminField f) => Padding(
padding: EdgeInsets.only(top: idx == 0 ? 0 : 10),
child: _fieldRow(context, f),
),
),
],
],
),
);
return onTap == null ? card : card.onTapInk(onTap);
}