iServe Chatbot
A reusable Flutter package for integrating a chatbot experience into Flutter applications.
The package provides a ready-to-use chatbot UI with conversation handling, interactive options, knowledge-base results, loading states, error handling, and customizable theming.
Features
- 💬 Ready-to-use chatbot UI
- 🔄 Conversation and session management
- 🔘 Interactive chatbot options
- 📚 Knowledge-base result cards
- ⏳ Loading and typing indicators
- ❌ Error handling
- 📜 Conversation history
- 🎨 Customizable theme
- 📱 Responsive UI
- 🧩 BLoC-based state management
- 🔌 Simple integration
Installation
Add the package to your application's pubspec.yaml:
dependencies:
iserve_chatbot: ^0.0.3
Then run:
flutter pub get
Usage
Import the package:
import 'package:iserve_chatbot/iserve_chatbot.dart';
Initialize the chatbot:
IserveChatbot(
user: const ChatbotUser(
orgId: '<organization-id>',
userId: '<user-id>',
contactId: '<contact-id>',
email: '<user-email>',
orgCode: '<organization-code>',
),
)
Example:
class ChatScreen extends StatelessWidget {
const ChatScreen({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
body: IserveChatbot(
user: const ChatbotUser(
orgId: '<organization-id>',
userId: '<user-id>',
contactId: '<contact-id>',
email: '<user-email>',
orgCode: '<organization-code>',
),
),
);
}
}
The host application only needs to provide the required user context. The package handles the chatbot's internal state, API communication, conversation flow, and UI.
User Configuration
ChatbotUser provides the context required by the chatbot.
const ChatbotUser(
orgId: '<organization-id>',
userId: '<user-id>',
contactId: '<contact-id>',
email: '<user-email>',
orgCode: '<organization-code>',
)
Available fields
| Field | Type | Description |
|---|---|---|
orgId |
String |
Organization identifier |
userId |
String |
User identifier |
contactId |
String |
Contact identifier |
email |
String |
User email |
orgCode |
String |
Organization code |
Note: The values above are placeholders. Replace them with values from your application's authenticated user context.
Custom Theme
The chatbot supports customization through IserveChatbotTheme.
IserveChatbot(
user: const ChatbotUser(
orgId: '<organization-id>',
userId: '<user-id>',
contactId: '<contact-id>',
email: '<user-email>',
orgCode: '<organization-code>',
),
theme: const IserveChatbotTheme(
backgroundColor: Colors.white,
botBubbleColor: Color(0xFFF1F3F5),
userBubbleColor: Color(0xFF1976D2),
botTextColor: Colors.black87,
userTextColor: Colors.white,
sendButtonColor: Color(0xFF1976D2),
),
)
The theme can customize:
- Chat background
- Bot message bubbles
- User message bubbles
- Text colors
- Option buttons
- Input field
- Send button
- Knowledge-base cards
- Error messages
- Border radius
- Padding
If no custom theme is provided, the package uses its default theme.
Architecture
The package uses a layered architecture:
┌─────────────────────────────┐
│ IserveChatbot │
│ Public API │
└──────────────┬──────────────┘
│
▼
┌─────────────────────────────┐
│ ChatbotView │
│ UI │
└──────────────┬──────────────┘
│
▼
┌─────────────────────────────┐
│ ChatbotBloc │
│ State Management │
└──────────────┬──────────────┘
│
▼
┌─────────────────────────────┐
│ ChatbotRepository │
│ API Communication │
└─────────────────────────────┘
The BLoC, repository, API communication, and internal widgets are implementation details of the package.
Applications should interact with the package through its public API.
Project Structure
iserve_chatbot/
├── lib/
│ ├── iserve_chatbot.dart
│ └── src/
│ ├── api/
│ ├── bloc/
│ ├── models/
│ ├── theme/
│ └── widgets/
│
├── example/
├── test/
├── README.md
├── CHANGELOG.md
├── LICENSE
└── pubspec.yaml
Example
The package includes an example application demonstrating basic integration and usage.
Run the example:
cd example
flutter pub get
flutter run
Development
Get the package dependencies:
flutter pub get
Run tests:
flutter test
Validate the package before publishing:
dart pub publish --dry-run
Versioning
This package follows Semantic Versioning.
Versions use the following format:
MAJOR.MINOR.PATCH
For example:
1.2.3
- MAJOR — breaking changes
- MINOR — backward-compatible features
- PATCH — backward-compatible bug fixes
For example:
1.0.0 → 1.0.1 # Bug fix
1.0.1 → 1.1.0 # New feature
1.1.0 → 2.0.0 # Breaking change
Release notes for each version are documented in CHANGELOG.md.
Requirements
- Flutter
- Dart SDK
>=3.10.1 <4.0.0
License
See LICENSE for license information.
Contributing
Contributions, issues, and feature requests are welcome.
Please follow the project's development guidelines and submit changes through the appropriate repository workflow.