Creating a Custom Chatbot on Custom Data Using Flutter and Ollama

Mohammad Mahdi
3 min readFeb 2, 2025

--

Chatbots have become an essential part of modern applications, offering automated customer support, personalized recommendations, and interactive user engagement. While many chatbot solutions rely on predefined APIs, sometimes you need a chatbot tailored to your specific data. In this article, we’ll walk through the process of creating a custom chatbot using Flutter and Ollama, a powerful AI framework.

Why Use Flutter and Ollama?

Flutter provides a seamless cross-platform development experience, allowing you to build a chatbot that works on both Android and iOS with a single codebase. Ollama, on the other hand, allows us to train and fine-tune AI models on our own dataset, ensuring our chatbot provides relevant and accurate responses.

Setting Up the Project

1. Initialize a New Flutter Project

If you haven’t already, create a new Flutter project:

flutter create custom_chatbot
cd custom_chatbot

2. Add Required Dependencies

To integrate a chatbot, you’ll need HTTP for API calls and a state management solution like Riverpod or Provider:

dependencies:
flutter:
sdk: flutter
http: ^0.14.0
provider: ^6.0.0

Run flutter pub get to install the dependencies.

3. Set Up Ollama

Ollama provides powerful AI models for natural language processing. Follow these steps:

  1. Install Ollama: Download here
  2. Prepare your dataset (CSV, JSON, or database format) containing the chatbot’s knowledge base.
  3. Train the model using Ollama’s CLI:
ollama train --data my_dataset.json --output my_custom_model

4.Deploy the trained model on Ollama’s cloud or local environment.

Building the Chat UI in Flutter

A chatbot UI typically consists of a text input field and a conversation history. Let’s create a simple UI:

1. Create the Chat Screen

import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'chat_provider.dart';

class ChatScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
final chatProvider = Provider.of<ChatProvider>(context);
TextEditingController controller = TextEditingController();

return Scaffold(
appBar: AppBar(title: Text('Custom Chatbot')),
body: Column(
children: [
Expanded(
child: ListView.builder(
itemCount: chatProvider.messages.length,
itemBuilder: (context, index) {
final message = chatProvider.messages[index];
return ListTile(
title: Text(message.text),
subtitle: Text(message.sender),
);
},
),
),
Padding(
padding: const EdgeInsets.all(8.0),
child: Row(
children: [
Expanded(
child: TextField(
controller: controller,
decoration: InputDecoration(hintText: 'Ask something...'),
),
),
IconButton(
icon: Icon(Icons.send),
onPressed: () {
chatProvider.sendMessage(controller.text);
controller.clear();
},
),
],
),
),
],
),
);
}
}

2. Manage Chat State with Provider

import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'dart:convert';

class ChatProvider extends ChangeNotifier {
List<Message> messages = [];

void sendMessage(String text) async {
messages.add(Message(text: text, sender: 'User'));
notifyListeners();

final response = await http.post(
Uri.parse('https://api.ollama.ai/chat'),
headers: {'Content-Type': 'application/json'},
body: jsonEncode({'message': text}),
);

if (response.statusCode == 200) {
final responseData = jsonDecode(response.body);
messages.add(Message(text: responseData['reply'], sender: 'Bot'));
notifyListeners();
}
}
}

class Message {
final String text;
final String sender;

Message({required this.text, required this.sender});
}

Running the Chatbot

Now, run the Flutter app using:

flutter run

Type a message in the chat input field, and the chatbot will respond using the trained Ollama model.

Enhancing the Chatbot

  • Improve UI: Use animations for smooth message transitions.
  • Add Voice Input: Use the speech_to_text package to enable voice-based interactions.
  • Enhance AI Responses: Train the model with more diverse datasets and refine its responses.
  • Deploy to Cloud: Host your chatbot model on a cloud service for scalability.

Conclusion

Building a custom chatbot with Flutter and Ollama provides the flexibility to tailor responses to your specific needs. By integrating AI models with a Flutter UI, you can create intelligent, responsive, and highly engaging chatbot experiences.

--

--

No responses yet