The-Agency/lib/ui/widgets/chat_view.dart

61 lines
1.5 KiB
Dart

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<ChatView> createState() => _ChatViewState();
}
class _ChatViewState extends State<ChatView> {
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<ChatProvider>(
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);
},
);
},
);
}
}