TKK_E32230176/Source-Code-Web/lib/widgets/history_list.dart

86 lines
2.6 KiB
Dart

import 'package:flutter/material.dart';
import '../providers/mqtt_provider.dart';
class HistoryList extends StatelessWidget {
final MQTTProvider provider;
const HistoryList({super.key, required this.provider});
@override
Widget build(BuildContext context) {
if (provider.history.isEmpty) {
return const Card(
child: Padding(
padding: EdgeInsets.all(24),
child: Center(
child: Text('Belum ada riwayat aktivitas',
style: TextStyle(color: Colors.grey))),
),
);
}
return Card(
child: ListView.separated(
shrinkWrap: true,
physics: const NeverScrollableScrollPhysics(),
itemCount: provider.history.length > 20 ? 20 : provider.history.length,
separatorBuilder: (context, index) => const Divider(height: 1),
itemBuilder: (context, index) {
final item = provider.history[index];
return ListTile(
leading: _buildIcon(item['type'], item['value']),
title: Text(item['value'], style: const TextStyle(fontSize: 13)),
subtitle: Text(
'${_formatTime(item['time'])}${item['mode'] == 'manual' ? 'Manual' : 'Otomatis'}',
style: const TextStyle(fontSize: 11),
),
);
},
),
);
}
Widget _buildIcon(String type, String value) {
IconData icon;
Color color;
if (value.contains('Orang terdeteksi')) {
icon = Icons.people;
color = Colors.green;
} else if (value.contains('Ruangan kosong')) {
icon = Icons.people_outline;
color = Colors.grey;
} else if (value.contains('Menyala')) {
icon = Icons.power;
color = Colors.green;
} else if (value.contains('Mati')) {
icon = Icons.power_off;
color = Colors.red;
} else if (value.contains('Suhu')) {
icon = Icons.thermostat;
color = Colors.orange;
} else if (value.contains('Mode')) {
icon = Icons.settings;
color = Colors.blue;
} else if (value.contains('timer') || value.contains('delay')) {
icon = Icons.timer;
color = Colors.orange;
} else if (value.contains('Timer delay')) {
icon = Icons.timer_off;
color = Colors.red;
} else {
icon = Icons.info;
color = Colors.grey;
}
return CircleAvatar(
radius: 16,
backgroundColor: color.withOpacity(0.2),
child: Icon(icon, size: 16, color: color));
}
String _formatTime(DateTime time) {
return '${time.hour.toString().padLeft(2, '0')}:${time.minute.toString().padLeft(2, '0')}:${time.second.toString().padLeft(2, '0')}';
}
}