chatbot_ui 0.1.2
chatbot_ui: ^0.1.2 copied to clipboard
A customizable Flutter chat UI package with easy integration for local or API-based AI chatbots.
Chatbot UI
Chatbot UI is a comprehensive Flutter package that provides a ready-to-use chat interface with seamless integration for multiple AI providers including OpenAI, Groq, Gemini, and local AI services.
Features
🎨 Fully Customizable UI - Themes, colors, bubbles, and animations 🤖 Multiple AI Providers - OpenAI, Groq, Gemini, Local AI 💬 Streaming Responses - Real-time token-by-token responses 📱 Floating Chat Bubble - Non-intrusive chat widget 🚀 Easy Integration - Add chat with just a few lines of code 🔄 Conversation History - Automatic context management 🎯 Type Safety - Full Dart type support 📦 Zero Configuration - Local AI works out of the box Installation
- Add Dependency
Add to your pubspec.yaml:
yaml dependencies: chatbot_ui: ^0.1.1 2. Install Package
bash flutter pub get 3. Import in Your Code
dart import 'package:chatbot_ui/chatbot_ui.dart'; Quick Start
Minimal Example (3 lines of code)
dart // 1. Create a service (choose your AI provider) final service = LocalAIService();
// 2. Create provider final chatProvider = ChatProvider(service);
// 3. Add the chat UI ChatUI( chatProvider: chatProvider, title: 'AI Assistant', ) Complete Working Example
dart import 'package:flutter/material.dart'; import 'package:chatbot_ui/chatbot_ui.dart';
void main() => runApp(const MyApp());
class MyApp extends StatelessWidget { const MyApp({super.key});
@override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( body: ChatUI( chatProvider: ChatProvider(LocalAIService()), title: 'AI Assistant', ), ), ); } } Floating Chat Bubble (Easiest Integration)
dart // Step 1: Choose your AI provider final aiService = LocalAIService(); // or OpenAIService, GroqService, GeminiService
// Step 2: Add the floating chat bubble to your app FloatingChatBubble( service: aiService, title: 'Chat Support', bubbleColor: Colors.blue, )
// That's it! Your users get a beautiful chat interface AI Providers
- Local AI Service (No API Key Required)
Best for: Testing, offline use, simple rule-based responses
dart import 'package:chatbot_ui/chatbot_ui.dart';
final service = LocalAIService();
// With custom responses final customService = LocalAIService( customResponses: { 'hello': 'Hi there! Welcome to my app!', 'help': 'How can I assist you today?', 'bye': 'Goodbye! Come back anytime.', }, );
// Add custom response dynamically customService.addCustomResponse('support', 'Our support team is available 24/7'); Default Responses:
"hello" → "Hello! How can I help you today?" "how are you" → "I'm doing great, thank you for asking!" "help" → "I can help answer questions, provide information, or just chat!" "bye" → "Goodbye! Feel free to come back if you need anything." 2. OpenAI Service
Best for: Advanced AI capabilities, GPT models
dart final service = OpenAIService( apiKey: 'your-openai-api-key', model: 'gpt-3.5-turbo', // or 'gpt-4' temperature: 0.7, maxTokens: 1000, );
// Available models: // - gpt-3.5-turbo (fast, cost-effective) // - gpt-4 (more capable, slower) // - gpt-4-turbo-preview (latest features) 3. Groq Service (Ultra-Fast)
Best for: Speed, LPU acceleration
dart final service = GroqService( apiKey: 'your-groq-api-key', model: 'mixtral-8x7b-32768', // or 'llama2-70b-4096', 'gemma-7b-it' temperature: 0.7, maxTokens: 1024, );
// Available Groq models: // - mixtral-8x7b-32768 (best performance) // - llama2-70b-4096 (high accuracy) // - gemma-7b-it (fast and efficient) // - llama3-70b-8192 (latest Llama) // - llama3-8b-8192 (lightweight) 4. Gemini Service
Best for: Google's AI capabilities
dart final service = GeminiService( apiKey: 'your-gemini-api-key', model: 'gemini-pro', temperature: 0.7, maxTokens: 2048, );
// Available models: // - gemini-pro (text-only) // - gemini-pro-vision (image understanding) Integration Methods
Method 1: Full Screen Chat
Use case: Dedicated chat page
dart class MyChatPage extends StatelessWidget { @override Widget build(BuildContext context) { final chatProvider = ChatProvider(LocalAIService());
return ChatUI(
chatProvider: chatProvider,
title: 'Customer Support',
theme: ChatTheme.light(),
showHeader: true,
actions: [
IconButton(
icon: const Icon(Icons.delete),
onPressed: () => chatProvider.clearMessages(),
),
],
);
} } Method 2: Floating Chat Bubble
Use case: Chat overlay on any screen
dart class MyHomePage extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: const Text('My App')), body: Stack( children: [ // Your app content YourAppContent(),
// Floating chat bubble
FloatingChatBubble(
service: LocalAIService(),
title: 'AI Support',
bubbleColor: Colors.blue,
bubbleIcon: Icons.support_agent,
showCloseButton: true,
bubbleSize: 60,
padding: const EdgeInsets.all(16),
),
],
),
);
} } Method 3: Embedded Chat
Use case: Chat as part of a larger layout
dart class EmbeddedChat extends StatelessWidget { @override Widget build(BuildContext context) { return Column( children: [ Expanded( child: ChatUI( chatProvider: ChatProvider(LocalAIService()), title: 'Chat', showHeader: false, // Hide header for embedding ), ), // Other widgets below chat const BottomNavigationBar(), ], ); } } Customization
Theme Customization
dart final customTheme = ChatTheme( // Colors primaryColor: Colors.purple, userBubbleColor: Colors.purple, assistantBubbleColor: Colors.grey.shade300, errorBubbleColor: Colors.red, backgroundColor: Colors.white, inputBackgroundColor: Colors.grey.shade100,
// Text styles userTextStyle: const TextStyle(color: Colors.white, fontSize: 16), assistantTextStyle: const TextStyle(color: Colors.black, fontSize: 16), errorTextStyle: const TextStyle(color: Colors.white, fontSize: 14),
// Layout borderRadius: 16.0, bubblePadding: const EdgeInsets.symmetric(horizontal: 16, vertical: 10), messageListPadding: const EdgeInsets.all(16), inputMaxLines: 5,
// Features showAvatars: true, showTimestamps: true,
// Custom icon sendButtonIcon: const Icon(Icons.send_rounded), );
// Use in ChatUI ChatUI( chatProvider: chatProvider, theme: customTheme, // ... ) Pre-built Themes
dart // Light theme (default) final lightTheme = ChatTheme.light();
// Dark theme final darkTheme = ChatTheme.dark();
// Custom theme from light final customLight = ChatTheme.light().copyWith( primaryColor: Colors.green, userBubbleColor: Colors.green, ); Custom User Profiles
dart // Custom user final customUser = ChatUser( id: 'user_123', name: 'John Doe', avatarUrl: 'https://example.com/avatar.jpg', color: Colors.blue, );
// Custom assistant final customAssistant = ChatUser( id: 'ai_bot', name: 'SmartBot', avatarWidget: Image.asset('assets/bot_avatar.png'), color: Colors.orange, );
// Use in ChatUI ChatUI( chatProvider: chatProvider, user: customUser, assistant: customAssistant, // ... ) API Reference
ChatMessage Class
dart class ChatMessage { final String id; // Unique identifier final String content; // Message text final MessageRole role; // user, assistant, system, error final DateTime timestamp; // When message was created final bool isStreaming; // Whether message is being streamed final Map<String, dynamic>? metadata; // Additional data
// Factory methods factory ChatMessage.user({required String content}); factory ChatMessage.assistant({required String content, bool isStreaming}); factory ChatMessage.error({required String content}); } ChatProvider Class
dart class ChatProvider extends ChangeNotifier { List
void sendMessage(String content); // Send a message void clearMessages(); // Clear all messages void retryLastMessage(); // Retry last failed message } AIService Interface
dart abstract class AIService { Future
Stream
Future
Example 1: Customer Support Chat
dart class CustomerSupportChat extends StatelessWidget { @override Widget build(BuildContext context) { final service = OpenAIService( apiKey: 'your-api-key', model: 'gpt-3.5-turbo', );
final theme = ChatTheme(
primaryColor: Colors.indigo,
userBubbleColor: Colors.indigo,
assistantBubbleColor: Colors.grey.shade200,
);
return ChatUI(
chatProvider: ChatProvider(service),
title: 'Customer Support',
theme: theme,
user: ChatUser(
id: 'customer',
name: 'You',
avatarUrl: 'https://example.com/customer.jpg',
),
assistant: ChatUser(
id: 'support',
name: 'Support Agent',
avatarWidget: const Icon(Icons.support_agent),
),
);
} } Example 2: Medical Assistant (with Disclaimer)
dart class MedicalAssistantChat extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( body: Column( children: [ Container( padding: const EdgeInsets.all(12), color: Colors.yellow.shade100, child: const Row( children: [ Icon(Icons.warning, color: Colors.orange), SizedBox(width: 8), Expanded( child: Text( 'Disclaimer: This AI provides general information only. ' 'Always consult a healthcare professional.', style: TextStyle(fontSize: 12), ), ), ], ), ), Expanded( child: ChatUI( chatProvider: ChatProvider( OpenAIService(apiKey: 'key', model: 'gpt-4'), ), title: 'Health Assistant', theme: ChatTheme.light().copyWith( primaryColor: Colors.teal, userBubbleColor: Colors.teal, ), ), ), ], ), ); } } Example 3: E-commerce Product Assistant
dart class ProductAssistant extends StatefulWidget { final String productId;
const ProductAssistant({super.key, required this.productId});
@override State
class _ProductAssistantState extends State
@override void initState() { super.initState(); _aiService = CustomAIService( apiEndpoint: 'https://api.example.com/chat', headers: {'X-Product-ID': widget.productId}, ); _chatProvider = ChatProvider(_aiService); }
@override Widget build(BuildContext context) { return FloatingChatBubble( service: _aiService, title: 'Product Expert', bubbleColor: Colors.orange, bubbleIcon: Icons.shopping_bag, ); } } Troubleshooting
Common Issues and Solutions
Issue Solution API Key not working Verify key is correct and has proper permissions Streaming not working Check if your AI provider supports streaming UI not showing Ensure ChatProvider is properly initialized Messages not saving Implement your own persistence layer Slow responses Use Groq for faster responses or reduce maxTokens Debug Mode
dart // Enable debug logging class DebugAIService extends LocalAIService { @override Future
dart // Use const constructors where possible const customTheme = ChatTheme( primaryColor: Colors.blue, // ... );
// Dispose providers properly @override void dispose() { _chatProvider.dispose(); super.dispose(); } Support & Resources
GitHub Repository: github.com/SyedaFakhiraSaghir/chatbot_ui Issue Tracker: github.com/SyedaFakhiraSaghir/chatbot_ui/issues Documentation: github.com/SyedaFakhiraSaghir/chatbot_ui/blob/main/README.md Examples: Check the /example folder Topics
chat ui ai chatbot messaging License
MIT License - feel free to use in commercial and personal projects.