MIF_E31231313/Android/flutter_app/lib/widgets/child_summary_card.dart

73 lines
2.3 KiB
Dart

import 'package:flutter/material.dart';
import 'package:lucide_icons/lucide_icons.dart';
import 'package:s_gizi/app_design.dart';
import 'package:s_gizi/models/child_chat_detail_model.dart';
import 'package:s_gizi/widgets/risk_badge.dart';
class ChildSummaryCard extends StatelessWidget {
const ChildSummaryCard({super.key, required this.child, this.onDetail});
final ChildChatDetailModel child;
final VoidCallback? onDetail;
@override
Widget build(BuildContext context) {
final m = child.latestMeasurement;
return HealthCard(
dense: true,
padding: const EdgeInsets.all(14),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
children: [
SgAvatar(name: child.name, radius: 24, icon: LucideIcons.baby),
const SizedBox(width: 10),
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(child.name, style: AppTypography.h3),
Text(
'${child.ageText}${child.gender}',
style: AppTypography.caption,
),
],
),
),
RiskBadge(status: child.riskStatus),
],
),
const SizedBox(height: 10),
Text(
'BB ${m.weightKg.toStringAsFixed(1)} kg • TB ${m.heightCm.toStringAsFixed(0)} cm',
style: AppTypography.caption.copyWith(fontWeight: FontWeight.w800),
),
const SizedBox(height: 6),
Text(
'BB/U: ${child.zscoreResult.bbuStatus}',
style: AppTypography.caption,
),
Text(
'TB/U: ${child.zscoreResult.tbuStatus}',
style: AppTypography.caption,
),
Text(
'BB/TB: ${child.zscoreResult.bbtbStatus}',
style: AppTypography.caption,
),
if (onDetail != null) ...[
const SizedBox(height: 10),
OutlinedButton.icon(
onPressed: onDetail,
icon: const Icon(LucideIcons.fileText, size: 18),
label: const Text('Lihat Detail Anak'),
),
],
],
),
);
}
}