import 'package:flutter/material.dart'; import '../utils/app_colors.dart'; class SensorCard extends StatelessWidget { final String title; final String value; final String unit; final IconData icon; final Color statusColor; final String status; final VoidCallback? onTap; const SensorCard({ Key? key, required this.title, required this.value, required this.unit, required this.icon, required this.statusColor, required this.status, this.onTap, }) : super(key: key); @override Widget build(BuildContext context) { return Card( elevation: 4, margin: const EdgeInsets.symmetric(vertical: 8), shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)), child: InkWell( borderRadius: BorderRadius.circular(12), onTap: onTap, child: Container( padding: const EdgeInsets.all(16), decoration: BoxDecoration( borderRadius: BorderRadius.circular(12), gradient: LinearGradient( begin: Alignment.topLeft, end: Alignment.bottomRight, colors: [AppColors.backgroundWhite, AppColors.backgroundLight], ), ), child: Column( children: [ Row( children: [ Container( padding: const EdgeInsets.all(10), decoration: BoxDecoration( color: statusColor.withOpacity(0.1), shape: BoxShape.circle, ), child: Icon(icon, color: statusColor, size: 24), ), const SizedBox(width: 12), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( title, style: const TextStyle( fontSize: 14, fontWeight: FontWeight.w500, color: AppColors.textSecondary, ), ), const SizedBox(height: 4), Row( children: [ Text( value, style: const TextStyle( fontSize: 24, fontWeight: FontWeight.bold, color: AppColors.textPrimary, ), ), const SizedBox(width: 4), Text( unit, style: const TextStyle( fontSize: 16, fontWeight: FontWeight.w500, color: AppColors.textSecondary, ), ), ], ), ], ), ), ], ), const SizedBox(height: 12), Container( width: double.infinity, padding: const EdgeInsets.symmetric( horizontal: 12, vertical: 6, ), decoration: BoxDecoration( color: statusColor.withOpacity(0.1), borderRadius: BorderRadius.circular(20), ), child: Text( status, textAlign: TextAlign.center, style: TextStyle( fontSize: 12, fontWeight: FontWeight.w600, color: statusColor, ), ), ), ], ), ), ), ); } } class ControlCard extends StatelessWidget { final String title; final String description; final IconData icon; final bool isActive; final VoidCallback onToggle; final Color activeColor; const ControlCard({ Key? key, required this.title, required this.description, required this.icon, required this.isActive, required this.onToggle, required this.activeColor, }) : super(key: key); @override Widget build(BuildContext context) { return Card( elevation: 4, margin: const EdgeInsets.symmetric(vertical: 8), shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)), child: Container( padding: const EdgeInsets.all(16), decoration: BoxDecoration( borderRadius: BorderRadius.circular(12), gradient: LinearGradient( begin: Alignment.topLeft, end: Alignment.bottomRight, colors: [AppColors.backgroundWhite, AppColors.backgroundLight], ), ), child: Row( children: [ Container( padding: const EdgeInsets.all(10), decoration: BoxDecoration( color: (isActive ? activeColor : AppColors.secondaryGray) .withOpacity(0.1), shape: BoxShape.circle, ), child: Icon( icon, color: isActive ? activeColor : AppColors.secondaryGray, size: 24, ), ), const SizedBox(width: 12), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( title, style: const TextStyle( fontSize: 16, fontWeight: FontWeight.w600, color: AppColors.textPrimary, ), ), const SizedBox(height: 4), Text( description, style: const TextStyle( fontSize: 13, color: AppColors.textSecondary, ), ), ], ), ), Switch( value: isActive, onChanged: (_) => onToggle(), activeColor: activeColor, inactiveTrackColor: AppColors.secondaryLightGray, ), ], ), ), ); } }