import "package:flutter/widgets.dart"; import "package:provider/provider.dart"; import "../providers/chat_provider.dart"; import "message_bubble.dart"; class ChatView extends StatefulWidget { const ChatView(); @override State createState() => _ChatViewState(); } class _ChatViewState extends State { late ScrollController _scrollController; @override void initState() { super.initState(); _scrollController = ScrollController(); } @override void dispose() { _scrollController.dispose(); super.dispose(); } void _scrollToBottom() { WidgetsBinding.instance.addPostFrameCallback((_) { if (_scrollController.hasClients) { _scrollController.animateTo( _scrollController.position.maxScrollExtent, duration: const Duration(milliseconds: 300), curve: Curves.easeOut, ); } }); } @override Widget build(BuildContext context) { return Consumer( builder: (context, chatProvider, _) { // scroll to bottom when new messages arrive if (chatProvider.messages.isNotEmpty) { _scrollToBottom(); } return ListView.builder( controller: _scrollController, itemCount: chatProvider.messages.length, itemBuilder: (context, index) { final message = chatProvider.messages[index]; return MessageBubble(message: message); }, ); }, ); } }