dashboardFull static method
Dashboard full-page skeleton (KPIs + chart + sections)
Implementation
static Widget dashboardFull({bool isWide = false}) {
return SingleChildScrollView(
padding: const EdgeInsets.all(16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
// Section header
const SkeletonLoader(width: 200, height: 20, borderRadius: 6),
const SizedBox(height: 4),
const SkeletonLoader(width: 160, height: 10, borderRadius: 4),
const SizedBox(height: 16),
// KPI cards
dashboardKpis(count: 4, isWide: isWide),
const SizedBox(height: 20),
// Section header 2
const SkeletonLoader(width: 180, height: 20, borderRadius: 6),
const SizedBox(height: 12),
dashboardKpis(count: 4, isWide: isWide),
const SizedBox(height: 24),
// Chart placeholder
Container(
height: 240,
decoration: BoxDecoration(
color: Colors.white.withAlpha(13),
borderRadius: BorderRadius.circular(16),
),
padding: const EdgeInsets.all(16),
child: const Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
SkeletonLoader(width: 140, height: 16, borderRadius: 4),
Spacer(),
SkeletonLoader(height: 150, borderRadius: 8),
],
),
),
const SizedBox(height: 24),
// Two cards side by side
if (isWide)
const Row(
children: [
Expanded(child: SkeletonLoader(height: 200, borderRadius: 16)),
SizedBox(width: 16),
Expanded(child: SkeletonLoader(height: 200, borderRadius: 16)),
],
)
else ...[
const SkeletonLoader(height: 200, borderRadius: 16),
const SizedBox(height: 16),
const SkeletonLoader(height: 200, borderRadius: 16),
],
],
),
);
}