import 'package:flutter/material.dart'; class ExpandableSection extends StatelessWidget { final String title; final IconData icon; final bool isExpanded; final VoidCallback onTap; final Widget child; final Animation heightFactor; const ExpandableSection({ Key? key, required this.title, required this.icon, required this.isExpanded, required this.onTap, required this.heightFactor, required this.child, }) : super(key: key); @override Widget build(BuildContext context) { final isDark = Theme.of(context).brightness == Brightness.dark; return Column( children: [ GestureDetector( onTap: onTap, child: Container( width: double.infinity, margin: const EdgeInsets.fromLTRB(16, 8, 16, 0), padding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 12.0), decoration: BoxDecoration( color: isDark ? Colors.grey.shade800 : Colors.green.shade100, borderRadius: BorderRadius.vertical( top: const Radius.circular(16), bottom: Radius.circular(isExpanded ? 0 : 16), ), ), child: Row( children: [ Icon( icon, color: isDark ? Colors.green.shade300 : Colors.green.shade800, size: 20, ), const SizedBox(width: 8), Text( title, style: TextStyle( fontWeight: FontWeight.bold, color: isDark ? Colors.green.shade300 : Colors.green.shade800, ), ), const Spacer(), AnimatedRotation( turns: isExpanded ? 0.5 : 0, duration: const Duration(milliseconds: 300), child: Icon( Icons.keyboard_arrow_down, color: isDark ? Colors.green.shade300 : Colors.green.shade800, ), ), ], ), ), ), AnimatedBuilder( animation: heightFactor, builder: (context, innerChild) { return ClipRect( child: Align( heightFactor: heightFactor.value, child: Container( margin: const EdgeInsets.fromLTRB(16, 0, 16, 0), decoration: BoxDecoration( color: isDark ? const Color(0xFF1E1E1E) : Colors.white, borderRadius: const BorderRadius.vertical( bottom: Radius.circular(16), ), boxShadow: [ BoxShadow( color: isDark ? Colors.black.withOpacity(0.3) : Colors.green.withOpacity(0.1), blurRadius: 8, offset: const Offset(0, 4), ), ], ), child: innerChild, ), ), ); }, child: child, ), ], ); } }