flutter_gen_ai_chat_ui 1.0.3
flutter_gen_ai_chat_ui: ^1.0.3 copied to clipboard
A modern, customizable chat UI package for Flutter applications, optimized for AI interactions with support for dark mode, animations, and responsive design.
example/lib/main.dart
import 'package:dash_chat_2/dash_chat_2.dart';
import 'package:flutter/material.dart';
import 'package:flutter_gen_ai_chat_ui/flutter_gen_ai_chat_ui.dart';
import 'simple_chat_screen.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return const MaterialApp(home: SimpleChatScreen());
}
}
class SimpleChatScreen extends StatefulWidget {
const SimpleChatScreen({super.key});
@override
State<SimpleChatScreen> createState() => _SimpleChatScreenState();
}
class _SimpleChatScreenState extends State<SimpleChatScreen> {
late final ChatMessagesController _controller;
late final ChatUser _currentUser;
late final ChatUser _aiUser;
bool _isLoading = false;
@override
void initState() {
super.initState();
_controller = ChatMessagesController();
_currentUser = ChatUser(id: '1', firstName: 'User');
_aiUser = ChatUser(id: '2', firstName: 'AI Assistant');
}
Future<void> _handleSendMessage(ChatMessage message) async {
setState(() => _isLoading = true);
_controller.addMessage(message);
try {
// Simulate AI response
await Future.delayed(const Duration(seconds: 1));
final response = "This is a demo response to: ${message.text}";
final aiMessage = ChatMessage(
text: response,
user: _aiUser,
createdAt: DateTime.now(),
);
_controller.addMessage(aiMessage);
} finally {
if (mounted) {
setState(() => _isLoading = false);
}
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Simple AI Chat'),
elevation: 0,
surfaceTintColor: Colors.transparent,
),
body: AiChatWidget(
config: const AiChatConfig(
hintText: 'Type a message...',
enableAnimation: true,
),
currentUser: _currentUser,
aiUser: _aiUser,
controller: _controller,
onSendMessage: _handleSendMessage,
isLoading: _isLoading,
),
);
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
}