OpenAI in Flutter: How to use Text completion to create automatic image descriptions?

Here’s a tutorial on how to use Text completion from OpenAI with Flutter. This tutorial assumes that you already have some familiarity with Flutter and have set up your development environment.


Before we get started, you’ll need to create an OpenAI API key to access the Text completion API. You can sign up for an account and create an API key on the OpenAI website.

Once you have your API key, you’ll also need to install the http package in your Flutter project. You can do this by adding the following line to your project’s pubspec.yaml file:


You’ll also need to import the http package in any files where you want to use the Text completion API.


Let’s say you want to build a simple app that allows users to generate a text description of a photo. You can use the Text completion API to generate a sentence or two describing the photo.

Here’s an example of how you might implement this in Flutter:

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

class TextCompletionApi {
  static const apiKey = 'YOUR_API_KEY_HERE';
  static const endpoint = '';

  static Future<String> generateDescription(String photoUrl) async {
    final prompt = 'Describe the photo in one or two sentences:';
    final headers = {'Authorization': 'Bearer $apiKey', 'Content-Type': 'application/json'};
    final data = {
      'prompt': prompt,
      'max_tokens': 32,
      'temperature': 0.5,
      'model': 'text-davinci-002',
      'prompt': photoUrl,
    final response = await, headers: headers, body: jsonEncode(data));
    final json = jsonDecode(response.body);
    final choices = json['choices'] as List;
    if (choices.isNotEmpty) {
      return choices[0]['text'] as String;
    } else {
      throw Exception('No completions found');

class MyHomePage extends StatelessWidget {
  final TextEditingController _textEditingController = TextEditingController();

  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Photo Description Generator'),
      body: Column(
        children: [
            controller: _textEditingController,
            decoration: InputDecoration(
              hintText: 'Enter a photo URL',
            onPressed: () async {
              final photoUrl = _textEditingController.text;
              final description = await TextCompletionApi.generateDescription(photoUrl);
              ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text(description)));
            child: Text('Generate Description'),

In this example, we define a TextCompletionApi class that encapsulates the logic for generating descriptions using the Text completion API. The generateDescription method takes a photo URL as input, sends a request to the API to generate a description, and returns the resulting text.

We then use this class in a simple Flutter app with a TextField for entering a photo URL and a button for generating a description. When the button is pressed, we call the generateDescription method and display the resulting description in a SnackBar.

More: Text completion in OpenAI. What is this? What is text completion used for?


Let’s go through the code in more detail.

class TextCompletionApi

Here, we define a TextCompletionApi class that provides a static method generateDescription for generating descriptions using the Text completion API.

The apiKey and endpoint constants are used to store the API key and the API endpoint URL, respectively.

The generateDescription method takes a photoUrl parameter, which is the URL of the photo to generate a description for. It sends a POST request to the API with the following parameters:

  • prompt: The prompt to provide to the API, which in this case is “Describe the photo in one or two sentences:”
  • max_tokens: The maximum number of tokens to generate (i.e., the length of the text)
  • temperature: The “creativity” of the generated text, with higher values leading to more unpredictable text
  • model: The name of the language model to use (in this case, “text-davinci-002”)
  • prompt: The photo URL to use as the prompt for the generated text

After sending the request, the method parses the response JSON and returns the generated text.

MyHomePage class

In this class, we define a MyHomePage widget that displays a TextField and a button for generating descriptions.

The TextField is controlled by a TextEditingController, which allows us to access the text entered by the user.

When the button is pressed, we call the generateDescription method of the TextCompletionApi class with the photo URL entered by the user. We then display the resulting description in a SnackBar.


In this tutorial, we went over how to use Text completion from OpenAI with Flutter to generate text descriptions based on a prompt. We covered the requirements, provided a specific example, and explained the code in detail. You can use this as a starting point for building your own apps that leverage the power of OpenAI’s language models!

Related posts:

  1. Automatically adjust the size of the text based on the available space in Flutter
  2. OpenAI in Flutter: Advanced Examples of Using Text Completion
  3. Open Ai in Flutter: Step by Step building a basic language translation application with Text completion