HydroNutrify_Ari_e41221567/lib/ui/shared/components/empty_state.dart

121 lines
3.1 KiB
Dart

import 'package:flutter/material.dart';
import 'package:mobile_monitoring/core/constants/colors.dart';
/// Empty State - Widget untuk menampilkan empty state
class EmptyState extends StatelessWidget {
final String title;
final String? message;
final IconData? icon;
final Widget? illustration;
final String? actionText;
final VoidCallback? onAction;
const EmptyState({
super.key,
required this.title,
this.message,
this.icon,
this.illustration,
this.actionText,
this.onAction,
});
@override
Widget build(BuildContext context) {
return Center(
child: Padding(
padding: const EdgeInsets.all(32),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
if (illustration != null)
illustration!
else if (icon != null)
Icon(
icon,
size: 80,
color: AppColors.mediumGray,
),
const SizedBox(height: 24),
Text(
title,
style: const TextStyle(
fontSize: 18,
fontWeight: FontWeight.w600,
color: AppColors.textPrimary,
),
textAlign: TextAlign.center,
),
if (message != null) ...[
const SizedBox(height: 8),
Text(
message!,
style: const TextStyle(
fontSize: 14,
color: AppColors.textSecondary,
),
textAlign: TextAlign.center,
),
],
if (actionText != null && onAction != null) ...[
const SizedBox(height: 24),
ElevatedButton(
onPressed: onAction,
style: ElevatedButton.styleFrom(
backgroundColor: AppColors.primary,
foregroundColor: AppColors.white,
padding: const EdgeInsets.symmetric(
horizontal: 32,
vertical: 12,
),
),
child: Text(actionText!),
),
],
],
),
),
);
}
}
/// No Data Widget - Widget untuk menampilkan tidak ada data
class NoDataWidget extends StatelessWidget {
final String? message;
const NoDataWidget({
super.key,
this.message,
});
@override
Widget build(BuildContext context) {
return EmptyState(
icon: Icons.inbox_outlined,
title: 'Tidak Ada Data',
message: message ?? 'Belum ada data yang tersedia',
);
}
}
/// No Connection Widget - Widget untuk menampilkan tidak ada koneksi
class NoConnectionWidget extends StatelessWidget {
final VoidCallback? onRetry;
const NoConnectionWidget({
super.key,
this.onRetry,
});
@override
Widget build(BuildContext context) {
return EmptyState(
icon: Icons.wifi_off_outlined,
title: 'Tidak Ada Koneksi',
message: 'Periksa koneksi internet Anda dan coba lagi',
actionText: 'Coba Lagi',
onAction: onRetry,
);
}
}