Flutter图像生成插件ai_image_generator的使用

Flutter图像生成插件ai_image_generator的使用

初始化

在使用 ai_image_generator 插件之前,需要进行初始化。初始化时需要提供一个API密钥。

void main() async {
  AiImageGenerator.init(
    key: "YOUR_API_KEY",
  );
  runApp(const MyApp());
}

生成图像

使用 generate 方法可以生成图像。该方法接受一个主题字符串作为参数,并返回一个包含生成图像URL的响应对象。

Future<AiResponse> generate(String topic) {
  return AiImageGenerator.i.generate(topic);
}

示例代码

以下是一个完整的示例代码,展示了如何使用 ai_image_generator 插件来生成图像。

import 'dart:developer';

import 'package:flutter/material.dart';
import 'package:ai_image_generator/ai_image_generator.dart';

void main() {
  AiImageGenerator.init(key: "YOUR_API_KEY");
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return const MaterialApp(
      home: AIImageGeneratorScreen(),
    );
  }
}

class AIImageGeneratorScreen extends StatefulWidget {
  const AIImageGeneratorScreen({super.key});

  [@override](/user/override)
  State<AIImageGeneratorScreen> createState() => _AIImageGeneratorScreenState();
}

class _AIImageGeneratorScreenState extends State<AIImageGeneratorScreen> {
  final TextEditingController _controller = TextEditingController(text: "fox");
  AiResponse? response;
  bool _isLoading = false;

  void _generateImage() async {
    setState(() {
      _isLoading = true;
    });

    try {
      response = await AiImageGenerator.i.generate(
        _controller.text,
        n: 1,
      );
      log(response.toString());
      setState(() {});
    } catch (e) {
      // 处理错误
    } finally {
      setState(() {
        _isLoading = false;
      });
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('AI 图像生成器'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          children: [
            TextField(
              controller: _controller,
              decoration: const InputDecoration(
                labelText: '输入提示',
              ),
            ),
            const SizedBox(height: 20),
            ElevatedButton(
              onPressed: _generateImage,
              child: const Text('生成图像'),
            ),
            const SizedBox(height: 20),
            Expanded(
              child: _isLoading
                  ? const Center(
                      child: CircularProgressIndicator(),
                    )
                  : response != null
                      ? Builder(
                          builder: (context) {
                            final data = response?.data ?? [];
                            if (data.isNotEmpty) {
                              return ListView.builder(
                                itemCount: data.length,
                                itemBuilder: (context, index) {
                                  final item = data.elementAt(index);
                                  return ListTile(
                                    title: SelectableText(item.url ?? ''),
                                  );
                                },
                              );
                            } else {
                              return Center(
                                child: Text(
                                  response?.error?.message ?? "",
                                  textAlign: TextAlign.center,
                                ),
                              );
                            }
                          },
                        )
                      : Container(),
            ),
          ],
        ),
      ),
    );
  }
}

代码说明

  1. 初始化

    void main() async {
      AiImageGenerator.init(
        key: "YOUR_API_KEY",
      );
      runApp(const MyApp());
    }
    

    main 函数中调用 AiImageGenerator.init 方法并传入API密钥以初始化插件。

  2. 生成图像

    Future<AiResponse> generate(String topic) {
      return AiImageGenerator.i.generate(topic);
    }
    

    定义了一个 generate 方法用于生成图像,传入的主题字符串将用于生成图像。

  3. 主界面

    class AIImageGeneratorScreen extends StatefulWidget {
      const AIImageGeneratorScreen({super.key});
    
      [@override](/user/override)
      State<AIImageGeneratorScreen> createState() => _AIImageGeneratorScreenState();
    }
    

    创建一个名为 AIImageGeneratorScreen 的状态fulWidget,用于展示用户界面。

  4. 状态管理

    class _AIImageGeneratorScreenState extends State<AIImageGeneratorScreen> {
      final TextEditingController _controller = TextEditingController(text: "fox");
      AiResponse? response;
      bool _isLoading = false;
    
      void _generateImage() async {
        setState(() {
          _isLoading = true;
        });
    
        try {
          response = await AiImageGenerator.i.generate(
            _controller.text,
            n: 1,
          );
          log(response.toString());
          setState(() {});
        } catch (e) {
          // 处理错误
        } finally {
          setState(() {
            _isLoading = false;
          });
        }
      }
    

    管理状态,包括加载状态和响应数据。

  5. UI布局

    [@override](/user/override)
    Widget build(BuildContext context) {
      return Scaffold(
        appBar: AppBar(
          title: const Text('AI 图像生成器'),
        ),
        body: Padding(
          padding: const EdgeInsets.all(16.0),
          child: Column(
            children: [
              TextField(
                controller: _controller,
                decoration: const InputDecoration(
                  labelText: '输入提示',
                ),
              ),
              const SizedBox(height: 20),
              ElevatedButton(
                onPressed: _generateImage,
                child: const Text('生成图像'),
              ),
              const SizedBox(height: 20),
              Expanded(
                child: _isLoading
                    ? const Center(
                        child: CircularProgressIndicator(),
                      )
                    : response != null
                        ? Builder(
                            builder: (context) {
                              final data = response?.data ?? [];
                              if (data.isNotEmpty) {
                                return ListView.builder(
                                  itemCount: data.length,
                                  itemBuilder: (context, index) {
                                    final item = data.elementAt(index);
                                    return ListTile(
                                      title: SelectableText(item.url ?? ''),
                                    );
                                  },
                                );
                              } else {
                                return Center(
                                  child: Text(
                                    response?.error?.message ?? "",
                                    textAlign: TextAlign.center,
                                  ),
                                );
                              }
                            },
                          )
                        : Container(),
              ),
            ],
          ),
        ),
      );
    }
    

更多关于Flutter图像生成插件ai_image_generator的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter图像生成插件ai_image_generator的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


ai_image_generator 是一个用于在 Flutter 应用中生成图像的插件。它通常利用 AI 模型(如 OpenAI 的 DALL-E 或其他图像生成模型)来根据文本描述生成图像。以下是使用 ai_image_generator 插件的基本步骤:

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 ai_image_generator 插件的依赖。

dependencies:
  flutter:
    sdk: flutter
  ai_image_generator: ^1.0.0  # 请根据实际情况使用最新版本

然后运行 flutter pub get 来获取依赖。

2. 获取 API 密钥

大多数 AI 图像生成服务都需要 API 密钥来访问其服务。你需要在相应的 AI 服务提供商(如 OpenAI)注册并获取 API 密钥。

3. 初始化插件

在你的 Flutter 应用中初始化 ai_image_generator 插件,并设置 API 密钥。

import 'package:ai_image_generator/ai_image_generator.dart';

void main() {
  // 初始化 AI 图像生成器
  AiImageGenerator.initialize(apiKey: 'YOUR_API_KEY');
  runApp(MyApp());
}

4. 生成图像

使用 AiImageGenerator 类的方法来生成图像。通常,你需要提供一个文本描述,插件将返回生成的图像 URL 或图像数据。

import 'package:flutter/material.dart';
import 'package:ai_image_generator/ai_image_generator.dart';

class ImageGeneratorScreen extends StatefulWidget {
  [@override](/user/override)
  _ImageGeneratorScreenState createState() => _ImageGeneratorScreenState();
}

class _ImageGeneratorScreenState extends State<ImageGeneratorScreen> {
  String _imageUrl = '';
  bool _isLoading = false;

  Future<void> _generateImage(String prompt) async {
    setState(() {
      _isLoading = true;
    });

    try {
      final imageUrl = await AiImageGenerator.generateImage(prompt);
      setState(() {
        _imageUrl = imageUrl;
      });
    } catch (e) {
      print('Error generating image: $e');
    } finally {
      setState(() {
        _isLoading = false;
      });
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('AI Image Generator'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          children: [
            TextField(
              decoration: InputDecoration(
                labelText: 'Enter a prompt',
                hintText: 'e.g., "A futuristic cityscape"',
              ),
              onSubmitted: _generateImage,
            ),
            SizedBox(height: 20),
            if (_isLoading)
              CircularProgressIndicator()
            else if (_imageUrl.isNotEmpty)
              Image.network(_imageUrl)
            else
              Text('No image generated yet.'),
          ],
        ),
      ),
    );
  }
}
回到顶部