import "package:provider/provider.dart"; import "package:shadcn_flutter/shadcn_flutter.dart"; import "../providers/chat_provider.dart"; import "../providers/session_provider.dart"; class Sidebar extends StatelessWidget { const Sidebar(); @override Widget build(BuildContext context) { return Consumer( builder: (context, sessionProvider, _) { return Column( children: [ // sessions list Expanded( child: ListView.builder( itemCount: sessionProvider.sessions.length, itemBuilder: (context, index) { final session = sessionProvider.sessions[index]; final isSelected = sessionProvider.currentSessionId == session.id; return GestureDetector( onTap: () async { await sessionProvider.loadSession(session.id); if (context.mounted) { final chatProvider = Provider.of(context, listen: false); chatProvider.setConversation( sessionProvider.getConversationHistory(), ); } }, child: Container( padding: const EdgeInsets.symmetric( horizontal: 12, vertical: 8, ), decoration: BoxDecoration( color: isSelected ? const Color(0xFFEFF6FF) : Colors.transparent, borderRadius: BorderRadius.circular(4), ), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( session.name, maxLines: 1, overflow: TextOverflow.ellipsis, style: TextStyle( fontWeight: isSelected ? FontWeight.w600 : FontWeight.w400, ), ), Text( "${session.messageCount} msgs", style: const TextStyle( fontSize: 12, color: Color(0xFF94A3B8), ), ), ], ), ), ); }, ), ), // new session button Padding( padding: const EdgeInsets.all(12), child: PrimaryButton( onPressed: () async { await sessionProvider.createNewSession(); if (context.mounted) { final chatProvider = Provider.of(context, listen: false); chatProvider.setConversation( sessionProvider.getConversationHistory(), ); } }, child: const Text("+ New"), ), ), ], ); }, ); } }